yangfeng
2023-08-18 96fdf32bd5612b6c16dcbcc8352a9f54adcc8e7e
產品相關及bug修復
31个文件已修改
1859 ■■■■ 已修改文件
src/components/makepager/CommonFormTableView.vue 239 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/makepager/TableCommonView.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/client/client/DetailClientManage.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/client/contacts/DetailContacts.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/client/followupRecords/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/client/salesLead/DetailSalesLead.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/other/commonDialog/SelectCommonDialog.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/other/payment/collectionPlan/AddCollectionPlan.vue 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/other/payment/collectionPlan/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/other/payment/receipt/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/contractManage/AddContractManageDialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/contractManage/DetailContractManage.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/generatePlan/DetailGeneratePlan.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/masterOrder/AddMasterOrderDialog.vue 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/quotation/AddQuotationDialog.vue 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/quotation/DetailQuotation.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/quotation/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/refundForm/AddRefundFormDialog.vue 161 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/refundForm/DetailRefundForm.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesDetails/AddSalesDetailsDialog.vue 164 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesDetails/DetailSpecification.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesDetails/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesReturn/AddSalesReturnDialog.vue 171 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesReturn/DetailReturn.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/subOrder/AddSubOrderDialog.vue 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/subOrder/DetailSubOrder.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/service/clientServiceOrder/DetailClientServiceOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/service/serviceContract/AddServiceContractDialog.vue 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/service/serviceContract/DetailServiceContract.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/service/serviceFollowup/DetailServiceFollowup.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/makepager/CommonFormTableView.vue
@@ -1,15 +1,15 @@
<template>
  <div class="page-view">
    <el-form ref="form" :model="productTableList" :show-message="false" label-position="right">
    <el-form ref="form" :model="tableList" :show-message="false" label-position="right">
      <el-table
        :data="productTableList.tableData"
        :data="tableList.tableData"
        :show-summary="showSummary.show"
        :summary-method="getSummaries"
        :span-method="arraySpanMethod"
        style="width: 100%"
      >
        <el-table-column
          v-for="(item, i) in productTableList.tableColumn"
          v-for="(item, i) in tableList.tableColumn"
          :key="i"
          :prop="item.prop"
          :label="item.label"
@@ -43,6 +43,32 @@
                ></el-input>
              </el-form-item>
              <el-form-item
                v-else-if="item.productName"
                label=" "
                :prop="'tableData.' + scope.$index + '.' + item.prop"
                :rules="[{ required: item.isRequird ? true : false, message: '产品名称不能为空' }]"
              >
                <div class="custom-name">
                  <el-autocomplete
                    v-model="scope.row[item.prop]"
                    :fetch-suggestions="querySearchAsync"
                    value-key="name"
                    size="mini"
                    @select="
                      (val) => {
                        handleSelectClient(val, item.prop, scope.row)
                      }
                    "
                  ></el-autocomplete>
                  <div class="common-select-btn" @click="selClientClick(scope.row, item.prop)">
                    <i class="el-icon-circle-plus-outline" title="选择"></i>
                  </div>
                  <div class="common-select-btn" @click="clearupClient(scope.row)">
                    <i class="el-icon-edit-outline" title="清除"></i>
                  </div>
                </div>
              </el-form-item>
              <el-form-item
                v-else-if="item.date"
                label=" "
                :prop="'tableData.' + scope.$index + '.' + item.prop"
@@ -51,6 +77,47 @@
                <!-- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input> -->
                <el-date-picker v-model="scope.row[item.prop]" type="date" size="mini" style="width: 110px">
                </el-date-picker>
              </el-form-item>
              <el-form-item
                v-else-if="item.inputNumber"
                label=" "
                :prop="'tableData.' + scope.$index + '.' + item.prop"
                :rules="[{ required: item.isRequird ? true : false, message: '输入不能为空' }]"
              >
                <el-input-number
                  v-model="scope.row[item.prop]"
                  placeholder=""
                  :min="0"
                  :controls="false"
                  size="mini"
                  style="width: 100%; margin-right: 5px"
                  @change="
                    (val) => {
                      commonInputChange(val, item.prop, scope.row)
                    }
                  "
                ></el-input-number>
              </el-form-item>
              <el-form-item
                v-else-if="item.inputFloat"
                label=" "
                :prop="'tableData.' + scope.$index + '.' + item.prop"
                :rules="[{ required: item.isRequird ? true : false, message: '输入不能为空' }]"
              >
                <el-input-number
                  v-model="scope.row[item.prop]"
                  placeholder=""
                  :min="0"
                  :precision="2"
                  :controls="false"
                  size="mini"
                  style="width: 100%; margin-right: 5px"
                  @change="
                    (val) => {
                      commonInputChange(val, item.prop, scope.row)
                    }
                  "
                ></el-input-number>
              </el-form-item>
              <span v-else>{{ scope.row[item.prop] }}</span>
            </template>
@@ -77,12 +144,21 @@
        </el-col>
      </el-row>
    </div>
    <!-- 合同订单 -->
    <SelectCommonDialog
      v-if="editSelCommonConfig.editVisible"
      :edit-common-config="editSelCommonConfig"
      @selClient="selClient"
    />
  </div>
</template>
<script>
import { getProductList } from "@/api/common/other"
import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog"
export default {
  name: "CommmonFormTableView",
  components: { SelectCommonDialog },
  props: {
    detailEnter: {
      type: Boolean,
@@ -115,11 +191,39 @@
  },
  data() {
    return {
      total: 0
      total: 0,
      productList: [],
      tableList: [],
      editSelCommonConfig: {
        editVisible: false,
        title: "",
        infomation: {}
      },
      productIndex: 0
    }
  },
  created() {
    this.getProductList()
    this.tableList = this.productTableList
  },
  computed: {},
  methods: {
    // 产品名称
    async getProductList() {
      await getProductList({
        productName: "",
        productNumber: "",
        page: 1,
        pageSize: 5
      }).then((res) => {
        console.log(res.data)
        if (res.data.code === 200) {
          if (res.data.data.data && res.data.data.data.length > 0) {
            this.productList = res.data.data.data
          }
        }
      })
    },
    handleReserve(row) {
      return row._id ? row._id : row.id
    },
@@ -144,32 +248,41 @@
    },
    // 合计
    getSummaries(param) {
      if (this.showSummary.show) {
        const { columns, data } = param
        const sums = []
        columns.forEach((column, index) => {
          if (index === this.showSummary.mergeNumber) {
            sums[index] = "小计"
          }
          const values = data.map((item) => Number(item[column.property]))
          // if (column.property === this.showSummary.sumProp) {
          if (this.showSummary.sumProp.includes(column.property)) {
            sums[index] = values.reduce((prev, curr) => {
              const value = Number(curr)
              if (!isNaN(value)) {
                return this.number_format(prev + curr, 2, ".", ",")
              } else {
                return this.number_format(prev, 2, ".", ",")
              }
            }, 0)
            if (column.property === "total") {
              this.total = sums[index]
      const { columns, data } = param
      const sums = []
      columns.forEach((column, index) => {
        // // 更改行名称
        if (index === this.showSummary.mergeNumber) {
          sums[index] = "小计:"
          return
        }
        const title = ["#"]
        // 去除某些不需要计算的数据
        if (title.includes(column.label)) {
          sums[index] = ""
          return
        }
        // 把当前表格数据中同个分类的数据收集起来
        const values = data.map((item) => Number(item[column.property]))
        // 过滤掉
        if (!values.every((value) => Number.isNaN(value))) {
          sums[index] = ` ${values.reduce((prev, curr) => {
            const value = Number(curr)
            if (!Number.isNaN(value)) {
              const num = prev + curr
              return Number(num.toFixed(2))
            } else {
              return Number(prev.toFixed(2))
            }
            sums[index]
          }
        })
        return sums
      }
          }, 0)}`
        } else {
          sums[index] = ""
        }
        if (column.property === "total") {
          this.total = sums[index]
        }
      })
      return sums
    },
    // 数字换行为金额显示格式
    number_format(number, decimals, dec_point, thousands_sep) {
@@ -223,6 +336,63 @@
          this.$emit("recalculateProductClick")
        })
        .catch(() => {})
    },
    // 选择产品名称相关方法
    querySearchAsync(queryString, cb) {
      var restaurants = this.productList
      var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants
      cb(results)
    },
    createStateFilter(queryString) {
      return (state) => {
        return state.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
      }
    },
    handleSelectClient(item, prop, row) {
      // this.clientId = item.id
      console.log(item, prop, row)
      this.tableList.tableData.map((ite) => {
        if (ite.name === item.name) {
          ite.amount = item.amount || 1
          ite.number = item.number
          ite.price = item.price
          ite.total = item.amount ? item.amount * item.price : 1 * item.price
        }
      })
    },
    selClientClick(row, prop) {
      console.log(row, prop)
      this.productIndex = row.productId - 1
      this.editSelCommonConfig.title = "产品名称"
      this.editSelCommonConfig.editVisible = true
    },
    selClient(item) {
      console.log(item)
      console.log(this.tableList.tableData)
      // this.editConfig.infomation.client_name = row.name
      this.tableList.tableData.map((ite, index) => {
        if (index === this.productIndex) {
          ite.name = item.name
          ite.amount = item.amount || 1
          ite.number = item.number
          ite.price = item.price
          ite.total = item.amount ? item.amount * item.price : 1 * item.price
        }
      })
    },
    // 清除已选择用户
    clearupClient(row) {
      this.productIndex = row.productId - 1
      this.tableList.tableData.map((ite, index) => {
        if (index === this.productIndex) {
          ite.name = ""
          ite.amount = 1
          ite.number = ""
          ite.price = 0
          ite.total = 0
        }
      })
      this.$emit("clearupProduct", this.tableList.tableData)
    }
  }
}
@@ -233,6 +403,14 @@
.page-view {
  .el-form-item {
    margin-bottom: 0;
    .custom-name {
      display: flex;
      .common-select-btn {
        margin-left: 5px;
        font-size: 18px;
        cursor: pointer;
      }
    }
  }
}
::v-deep {
@@ -251,5 +429,8 @@
  .el-table th.el-table__cell > .cell {
    padding: 0 5px;
  }
  .el-input__inner {
    text-align: left;
  }
}
</style>
src/components/makepager/TableCommonView.vue
@@ -92,6 +92,16 @@
            </ul>
            <div v-else class="no-product">{{ "--" }}</div>
          </div>
          <div v-else-if="item.isProductCommon" class="product-view">
            <ul v-if="scope.row.products && scope.row.products.length > 0">
              <li v-for="(item, index) in scope.row.products" :key="index">
                <div :class="scope.row.products.length === 1 ? 'name-view no-bottom' : 'name-view'">
                  {{ item.prop === "price" ? item.price : item.total }}
                </div>
              </li>
            </ul>
            <div v-else class="no-product">{{ "--" }}</div>
          </div>
          <span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span>
        </template>
      </el-table-column>
src/views/client/client/DetailClientManage.vue
@@ -306,11 +306,11 @@
          leftStr: "所属公海",
          leftValue: "",
          rightStr: "下次回访日期",
          rightValue: this.processTime(item.next_visit_time)
          rightValue: item.next_visit_time
        },
        {
          leftStr: "最晚服务到期日",
          leftValue: this.processTime(item.latest_service_time),
          leftValue: item.latest_service_time,
          rightStr: "创建时间",
          rightValue: ""
        },
@@ -364,7 +364,7 @@
        },
        {
          leftStr: "注册时间",
          leftValue: this.processTime(item.registration_time),
          leftValue: item.registration_time,
          rightStr: "注册资金",
          rightValue: item.RegisteredCapital.name
        },
@@ -421,12 +421,6 @@
      } else if (value === "annex") {
        this.isAnnexExpand = !this.isAnnexExpand
      }
    },
    // 处理时间
    processTime(dateTime) {
      return this.dateFormat("YYYY-mm-dd HH:MM:SS", dateTime) === "1900-01-01 08:00:00"
        ? "--"
        : this.dateFormat("YYYY-mm-dd HH:MM:SS", dateTime)
    },
    // 时间显示
    dateFormat(fmt, date) {
src/views/client/contacts/DetailContacts.vue
@@ -203,7 +203,7 @@
        },
        {
          leftStr: "下次回访日期",
          leftValue: "",
          leftValue: item.Client.next_visit_time,
          rightStr: "最新联系日期",
          rightValue: ""
        },
src/views/client/followupRecords/index.vue
@@ -153,7 +153,7 @@
          { label: "联系人姓名", prop: "contact_name", min: 100, isContactClick: true }, // 联系人姓名
          { label: "客户状态", prop: "client_status", min: 100 }, // 客户状态
          { label: "联系方式", prop: "contact_information_name", min: 100 }, // 联系方式
          { label: "联系人日期", prop: "follow_time", min: 130 }, // 联系人日期
          { label: "联系日期", prop: "follow_time", min: 130 }, // 联系人日期
          { label: "下次回访日期", prop: "next_follow_time", min: 130 }, // 下次回访日期
          { label: "负责人", prop: "member_name", min: 110 }, // 负责人
          { label: "跟进记录", prop: "record", min: 130 } // 跟进记录
src/views/client/salesLead/DetailSalesLead.vue
@@ -61,6 +61,10 @@
                  </div>
                </li>
              </ul>
              <div class="business_scope">
                <div class="content-title">{{ "最新进展" }}</div>
                <div class="content-data">{{ record ? record : "--" }}</div>
              </div>
            </div>
          </div>
          <!-- 地址信息 -->
@@ -145,11 +149,12 @@
      addressInfoList: [],
      isRemarkExpand: true, // 备注信息
      remarkInfoList: [],
      addConfig: {}
      addConfig: {},
      record: ""
    }
  },
  created() {
    this.setData()
    this.setData(this.detailConfig.infomation)
    this.addConfig = {
      id_name: "sales_leads_id",
      id: this.detailConfig.infomation.id,
@@ -160,31 +165,34 @@
  },
  mounted() {},
  methods: {
    setData() {
    setData(item) {
      if (item.FollowRecord && item.FollowRecord.length > 0) {
        this.record = item.FollowRecord[0].record
      }
      this.basicInfoList = [
        {
          leftStr: "客户名称",
          leftValue: this.detailConfig.infomation.name,
          leftValue: item.name,
          rightStr: "销售线索编号",
          rightValue: this.detailConfig.infomation.number
          rightValue: item.number
        },
        {
          leftStr: "联系人姓名",
          leftValue: this.detailConfig.infomation.contact_name,
          leftValue: item.contact_name,
          rightStr: "联系人职务",
          rightValue: this.detailConfig.infomation.contact_position
          rightValue: item.contact_position
        },
        {
          leftStr: "手机号码",
          leftValue: this.detailConfig.infomation.contact_phone,
          leftValue: item.contact_phone,
          rightStr: "商机状态",
          rightValue: "新建"
        },
        {
          leftStr: "商机来源",
          leftValue: this.detailConfig.infomation.sales_resources,
          leftValue: item.sales_resources,
          rightStr: "负责人",
          rightValue: this.detailConfig.infomation.member_name
          rightValue: item.member_name
        },
        {
          leftStr: "分配日期",
@@ -209,13 +217,13 @@
        {
          leftStr: "未联系天数",
          leftValue: "",
          rightStr: "最新推进时间",
          rightStr: "最新联系日期",
          rightValue: ""
        },
        {
          leftStr: "最新进展",
          leftValue: "",
          rightStr: "最新联系日期",
          leftValue: this.record,
          rightStr: "",
          rightValue: ""
        }
      ]
@@ -224,11 +232,11 @@
          leftStr: "国家",
          leftValue: "中国",
          rightStr: "省份",
          rightValue: this.detailConfig.infomation.Province.name
          rightValue: item.Province.name
        },
        {
          leftStr: "城市",
          leftValue: this.detailConfig.infomation.City.name,
          leftValue: item.City.name,
          rightStr: "",
          rightValue: ""
        }
@@ -335,6 +343,24 @@
              width: 100%;
            }
          }
          .business_scope {
            display: flex;
            align-items: center;
            font-size: 14px;
            min-height: 40px;
            .content-title {
              width: 320px;
              text-align: right;
              color: #555;
            }
            .content-data {
              flex: 1;
              padding: 5px;
              text-align: left;
              margin-left: 25px;
              color: #333;
            }
          }
        }
      }
    }
src/views/other/commonDialog/SelectCommonDialog.vue
@@ -145,9 +145,8 @@
        this.tableList = {
          tableInfomation: [],
          tableColumn: [
            { label: "产品名称", prop: "Name", isClick: true },
            { label: "产品编号", prop: "Number" },
            { label: "规格型号", prop: "MaterialMode" }
            { label: "产品名称", prop: "name", isClick: true },
            { label: "产品编号", prop: "number" }
          ]
        }
        this.searchSel = { value: "Name", label: "产品名称" }
src/views/other/payment/collectionPlan/AddCollectionPlan.vue
@@ -13,8 +13,8 @@
        <div class="collection-view">
          <div class="label">收款计划类型</div>
          <el-select v-model="editConfig.infomation.collectionType" size="mini">
            <el-option label="计划收款日期" value="1"></el-option>
            <el-option label="项目状态" value="2"></el-option>
            <el-option label="计划收款日期" :value="1"></el-option>
            <el-option label="项目状态" :value="2"></el-option>
          </el-select>
        </div>
        <div class="collection-view">
@@ -191,11 +191,13 @@
      sourceId: this.editCommonConfig.infomation.id,
      principalId: 0,
      planAmount: 0, // 计划金额
      firstDate: this.getCurrentDate(1)
      firstDate: this.getCurrentDate(1),
      collectionType: 1,
      tableInfomation: []
    }
  },
  created() {
    console.log(this.editCommonConfig.sourceType)
    console.log(this.editCommonConfig)
    this.setData()
    this.setTableForm()
    this.getCommonData()
@@ -204,7 +206,7 @@
    // 设置初始值
    setData() {
      this.editConfig.infomation = {
        collectionType: "1",
        collectionType: this.collectionType,
        moneyType: "人民币",
        amount: this.amount.toFixed(2)
      }
@@ -261,63 +263,9 @@
      this.editConfig.visible = false
    },
    setTableForm() {
      this.setTableInfomation(this.firstDate)
      this.tableData = {
        tableInfomation: [
          {
            amount: this.amount,
            amountReceivable: this.amount * 0.3,
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.getCurrentDate(1),
            collectionType: 0,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
            percent: 30,
            principalId: this.principalId,
            remark: "",
            sourceId: this.sourceId,
            sourceType: this.sourceType,
            status: 1,
            term: 1
          },
          {
            amount: this.amount,
            amountReceivable: this.amount * 0.5,
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.getCurrentDate(2),
            collectionType: 0,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
            percent: 50,
            principalId: this.principalId,
            remark: "",
            sourceId: this.sourceId,
            sourceType: this.sourceType,
            status: 1,
            term: 2
          },
          {
            amount: this.amount,
            amountReceivable: this.amount * 0.2,
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.getCurrentDate(3),
            collectionType: 0,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
            percent: 20,
            principalId: this.principalId,
            remark: "",
            sourceId: this.sourceId,
            sourceType: this.sourceType,
            status: 1,
            term: 3
          }
        ],
        tableInfomation: this.tableInfomation,
        tableColumn: [
          { label: "操作", prop: "operate", width: 60 },
          { label: "期次", prop: "term", inputNumber: true, width: 90 },
@@ -327,6 +275,65 @@
          { label: "备注", prop: "remark", input: true }
        ]
      }
    },
    setTableInfomation(date) {
      console.log(this.sourceId)
      this.tableInfomation = [
        {
          amount: this.amount,
          amountReceivable: this.amount * 0.3,
          amountReceived: 0,
          amountTotal: 0,
          collectionDate: this.setDate(date, 0),
          collectionType: this.editConfig.infomation.collectionType,
          fileId: 0,
          id: 0,
          moneyType: "人民币",
          percent: 30,
          principalId: this.principalId,
          remark: "",
          sourceId: this.sourceId,
          sourceType: this.sourceType,
          status: 1,
          term: 1
        },
        {
          amount: this.amount,
          amountReceivable: this.amount * 0.5,
          amountReceived: 0,
          amountTotal: 0,
          collectionDate: this.setDate(date, 1),
          collectionType: this.editConfig.infomation.collectionType,
          fileId: 0,
          id: 0,
          moneyType: "人民币",
          percent: 50,
          principalId: this.principalId,
          remark: "",
          sourceId: this.sourceId,
          sourceType: this.sourceType,
          status: 1,
          term: 2
        },
        {
          amount: this.amount,
          amountReceivable: this.amount * 0.2,
          amountReceived: 0,
          amountTotal: 0,
          collectionDate: this.setDate(date, 2),
          collectionType: this.editConfig.infomation.collectionType,
          fileId: 0,
          id: 0,
          moneyType: "人民币",
          percent: 20,
          principalId: this.principalId,
          remark: "",
          sourceId: this.sourceId,
          sourceType: this.sourceType,
          status: 1,
          term: 3
        }
      ]
    },
    // 重算
    recalculateClick() {
@@ -341,7 +348,7 @@
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.setDate(this.firstDate, 0),
            collectionType: 0,
            collectionType: this.editConfig.infomation.collectionType,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
@@ -362,7 +369,7 @@
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.setDate(this.firstDate, 0),
            collectionType: 0,
            collectionType: this.editConfig.infomation.collectionType,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
@@ -380,7 +387,7 @@
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.setDate(this.firstDate, 1),
            collectionType: 0,
            collectionType: this.editConfig.infomation.collectionType,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
@@ -394,62 +401,8 @@
          }
        ]
      } else if (this.allTerms === 3) {
        this.tableData.tableInfomation = [
          {
            amount: this.amount,
            amountReceivable: this.amount * 0.3,
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.setDate(this.firstDate, 0),
            collectionType: 0,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
            percent: 30,
            principalId: this.principalId,
            remark: "",
            sourceId: this.sourceId,
            sourceType: this.sourceType,
            status: 1,
            term: 1
          },
          {
            amount: this.amount,
            amountReceivable: this.amount * 0.5,
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.setDate(this.firstDate, 1),
            collectionType: 0,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
            percent: 50,
            principalId: this.principalId,
            remark: "",
            sourceId: this.sourceId,
            sourceType: this.sourceType,
            status: 1,
            term: 2
          },
          {
            amount: this.amount,
            amountReceivable: this.amount * 0.2,
            amountReceived: 0,
            amountTotal: 0,
            collectionDate: this.setDate(this.firstDate, 2),
            collectionType: 0,
            fileId: 0,
            id: 0,
            moneyType: "人民币",
            percent: 20,
            principalId: this.principalId,
            remark: "",
            sourceId: this.sourceId,
            sourceType: this.sourceType,
            status: 1,
            term: 3
          }
        ]
        this.setTableInfomation(this.firstDate)
        this.tableData.tableInfomation = this.tableInfomation
      }
    },
    delClick(row) {
@@ -482,6 +435,8 @@
    },
    principalClick(val) {
      this.principalId = val
      this.setTableInfomation(this.firstDate)
      this.tableData.tableInfomation = this.tableInfomation
    }
  }
}
src/views/other/payment/collectionPlan/index.vue
@@ -112,6 +112,7 @@
  },
  created() {
    this.setTable()
    console.log(this.addConfig)
    if (!this.isDetail) {
      this.serviceContractId = 0
    } else {
@@ -148,15 +149,15 @@
        serviceContractId: this.serviceContractId
      })
        .then((res) => {
          if (res.code === 200) {
            if (res.data.list && res.data.list.length > 0) {
              const list = res.data.list.map((item) => {
          if (res.data.code === 200) {
            if (res.data.data.data && res.data.data.data.length > 0) {
              const list = res.data.data.data.map((item) => {
                return {
                  ...item
                }
              })
              this.tableList.tableInfomation = list || []
              this.pagerOptions.totalCount = res.data.count
              this.pagerOptions.totalCount = res.data.data.count
            } else {
              this.tableList.tableInfomation = []
            }
@@ -193,7 +194,6 @@
    // 新建
    addBtnClick() {
      if (this.tableList.tableInfomation && this.tableList.tableInfomation.length > 0) {
        this.$message.success("该订单已创建收款计划")
        this.$confirm("该订单已创建收款计划", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
src/views/other/payment/receipt/index.vue
@@ -154,17 +154,17 @@
      })
        .then((res) => {
          console.log(res)
          if (res.code === 200) {
            if (res.data.list && res.data.list.length > 0) {
              const list = res.data.list.map((item) => {
          if (res.data.code === 200) {
            if (res.data.data.data && res.data.data.data.length > 0) {
              const list = res.data.data.data.map((item) => {
                return {
                  ...item,
                  paymentType_name: item.PaymentType.name,
                  paymentType_name: item.paymentType.name,
                  principal_name: item.principal.username
                }
              })
              this.tableList.tableInfomation = list || []
              this.pagerOptions.totalCount = res.data.count
              this.pagerOptions.totalCount = res.data.data.count
            } else {
              this.tableList.tableInfomation = []
            }
src/views/sales/contractManage/AddContractManageDialog.vue
@@ -128,11 +128,11 @@
            </el-row>
          </div> -->
          <!-- 展开收起 -->
          <div v-if="editConfig.title === '新建'" class="unflod-collapse" @click="unflodCollapseClick">
          <!-- <div v-if="editConfig.title === '新建'" class="unflod-collapse" @click="unflodCollapseClick">
            <div>{{ unflodCollapseStr }}</div>
            <div v-if="isUnflod"><i class="el-icon-arrow-up"></i></div>
            <div v-else><i class="el-icon-arrow-down"></i></div>
          </div>
          </div> -->
          <!-- 选择审批流程 -->
          <!-- <div class="basic-info-title">选择审批流程</div>
          <div class="basic-info-view">
src/views/sales/contractManage/DetailContractManage.vue
@@ -39,11 +39,11 @@
        <div class="tab-view">
          <el-tabs v-model="activeName" @tab-click="tabsClick">
            <el-tab-pane label="详情" name="first"></el-tab-pane>
            <el-tab-pane label="附件管理" name="annex">
              <!-- <template slot="label">
            <!-- <el-tab-pane label="附件管理" name="annex"> -->
            <!-- <template slot="label">
                <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div>
              </template> -->
            </el-tab-pane>
            <!-- </el-tab-pane> -->
          </el-tabs>
        </div>
        <div v-if="activeName === 'first'" class="detail">
src/views/sales/generatePlan/DetailGeneratePlan.vue
@@ -17,11 +17,11 @@
        <div class="tab-view">
          <el-tabs v-model="activeName" @tab-click="tabsClick">
            <el-tab-pane label="详情" name="first"></el-tab-pane>
            <el-tab-pane label="附件管理" name="annex">
              <!-- <template slot="label">
            <!-- <el-tab-pane label="附件管理" name="annex"> -->
            <!-- <template slot="label">
                <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div>
              </template> -->
            </el-tab-pane>
            <!-- </el-tab-pane> -->
          </el-tabs>
        </div>
        <div v-if="activeName === 'first'" class="detail">
src/views/sales/masterOrder/AddMasterOrderDialog.vue
@@ -27,14 +27,18 @@
                  <div class="custom-name">
                    <el-autocomplete
                      v-model="editConfig.infomation.client_name"
                      :fetch-suggestions="querySearchAsync"
                      :fetch-suggestions="
                        (queryString, callback) => {
                          querySearchAsync(queryString, callback, 'client')
                        }
                      "
                      value-key="name"
                      @select="handleSelectClient"
                      @select="handleSelectClient('client', $event)"
                    ></el-autocomplete>
                    <div class="common-select-btn" @click="selClientClick">
                    <div class="common-select-btn" @click="selClientClick('client')">
                      <i class="el-icon-circle-plus-outline" title="选择"></i>
                    </div>
                    <div class="common-select-btn" @click="clearupClient">
                    <div class="common-select-btn" @click="clearupClient('client')">
                      <i class="el-icon-edit-outline" title="清除"></i>
                    </div>
                  </div>
@@ -182,7 +186,8 @@
        editVisible: false,
        title: "",
        infomation: {}
      }
      },
      clientId: this.editCommonConfig.infomation.client_id
    }
  },
  created() {
@@ -207,37 +212,23 @@
          const params = this.saveParams()
          console.log(params)
          if (this.editConfig.title === "新建") {
            getAddMasterOrder(params)
              .then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message({
                    message: "添加成功",
                    type: "success"
                  })
                  this.$parent.getData()
                }
              })
              .catch((err) => {
                console.log(err)
              })
            getAddMasterOrder(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                this.$parent.getData()
              }
            })
          } else {
            getUpdateMasterOrder(params)
              .then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message({
                    message: "编辑成功",
                    type: "success"
                  })
                  this.$parent.getData()
                }
              })
              .catch((err) => {
                console.log(err)
              })
            getUpdateMasterOrder(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("编辑成功")
                this.$parent.getData()
              }
            })
          }
        } else {
          console.log("error submit")
@@ -249,10 +240,10 @@
      let data = this.editConfig.infomation
      let params = {
        id: this.editConfig.title === "新建" ? 0 : data.id,
        client_id: parseInt(data.client_id) || 0,
        client_id: this.clientId || 0,
        end_time: data.end_time || "",
        member_id: data.member_id || 0,
        money: parseFloat(data.money) || "0",
        money: data.money || 0,
        number: data.number || "",
        start_time: data.start_time || ""
      }
@@ -261,9 +252,12 @@
    handleClose() {
      this.editConfig.visible = false
    },
    // 选择客户相关方法
    querySearchAsync(queryString, cb) {
      var restaurants = this.clientList
    // 选择用户相关方法
    querySearchAsync(queryString, cb, value) {
      var restaurants = []
      if (value === "client") {
        restaurants = this.clientList
      }
      var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants
      cb(results)
    },
@@ -272,21 +266,31 @@
        return state.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
      }
    },
    handleSelectClient(item) {
      this.editConfig.infomation.client_id = item.id
    handleSelectClient(value, item) {
      if (value === "client") {
        this.clientId = item.id
      }
    },
    selClientClick() {
      this.editSelectClientConfig.editVisible = true
    selClientClick(value) {
      if (value === "client") {
        this.editSelectClientConfig.editVisible = true
      }
    },
    selClient(row) {
      console.log(row)
      this.editConfig.infomation.client_name = row.name
      this.editConfig.infomation.client_id = row.id
    selClient(row, value) {
      if (value === "client") {
        this.editConfig.infomation.client_name = row.name
        this.clientId = row.id
      }
    },
    // 清除已选择用户
    clearupClient() {
      this.editConfig.infomation.client_name = ""
      this.editConfig.infomation.client_id = 0
    clearupClient(value) {
      if (value === "client") {
        this.editConfig.infomation.client_name = ""
        this.clientId = 0
      } else if (value === "contact") {
        this.editConfig.infomation.contact_name = ""
        this.contactId = 0
      }
    },
    // 添加附件
    addAnnexClick() {},
src/views/sales/quotation/AddQuotationDialog.vue
@@ -203,6 +203,7 @@
              @addProductClick="addProductClick"
              @emptyProductClick="emptyProductClick"
              @recalculateProductClick="recalculateProductClick"
              @clearupProduct="clearupProduct"
            />
          </div>
          <!-- 选择审批流程 -->
@@ -327,8 +328,8 @@
      showSummary: {
        show: true,
        total: true,
        sumProp: ["Amount", "Unit", "other3"],
        mergeNumber: 3
        sumProp: ["Amount", "total"],
        mergeNumber: 2
      },
      editSelectClientConfig: {
        editVisible: false,
@@ -350,8 +351,7 @@
      saleChanceId: this.editCommonConfig.infomation.sale_chance_id,
      tableData: [],
      productId: 1,
      addProductArr: [],
      isProductName: false
      isNoProduct: true
    }
  },
  created() {
@@ -380,23 +380,19 @@
        }
      })
    },
    productNameValidate() {
      for (let i = 0; i < this.tableData.length; i++) {
        if (this.tableData[i].Name === "") {
          this.isProductName = true
          return
        } else {
          this.isProductName = false
        }
      }
    },
    // 保存
    saveClick(formName) {
      this.productNameValidate()
      this.$refs[formName].validate((valid) => {
        if (valid) {
          console.log(this.isProductName)
          if (this.isProductName) {
          for (let i = 0; i < this.tableData.length; i++) {
            if (this.tableData[i].name.length === 0) {
              this.isNoProduct = true
              break
            } else {
              this.isNoProduct = false
            }
          }
          if (this.isNoProduct) {
            this.$message.error("产品名称不能为空")
          } else {
            const params = this.saveParams()
@@ -514,86 +510,84 @@
    // 设置允许上传文件格式
    setFormatClick() {},
    setTableForm() {
      if (this.editConfig.title === "新建" || this.editConfig.infomation.products === null) {
      if (this.editConfig.title === "新建") {
        this.tableData = [
          {
            id: 1,
            Amount: 0,
            IsSale: true,
            MaterialMode: "",
            MinInventory: 0,
            Name: "",
            Number: "",
            PurchaseType: "",
            SalePrice: 0,
            Unit: ""
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
      }
      this.productTableList = {
        tableData: this.tableData,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "产品名称", prop: "Name", input: true, isRequird: true },
          { label: "产品编号", prop: "Number" },
          { label: "数量", prop: "Amount", input: true, isRequird: true },
          { label: "销售单价", prop: "Unit", input: true },
          { label: "价税合计", prop: "total", input: true },
          { label: "描述", prop: "other8" }
          { label: "#", prop: "productId", width: 40 },
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      console.log("aaaaaaaa")
      console.log(val, prop)
      this.productId = row.id
      this.productId = row.productId
      this.tableData.map((item) => {
        if (item.id === row.id) {
        if (item.productId === row.productId) {
          item[prop] = val
        }
      })
      console.log(this.tableData)
    },
    // 产品新增
    addProductClick() {
      this.productId++
      this.tableData.push({
        id: this.productId,
        Amount: 0,
        IsSale: true,
        MaterialMode: "",
        MinInventory: 0,
        Name: "",
        Number: "",
        PurchaseType: "",
        SalePrice: 0,
        Unit: ""
        productId: this.productId,
        id: 0,
        amount: 0,
        desc: "",
        name: "",
        number: "",
        price: 0,
        total: 0
      })
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          id: 1,
          Amount: 0,
          IsSale: true,
          MaterialMode: "",
          MinInventory: 0,
          Name: "",
          Number: "",
          PurchaseType: "",
          SalePrice: 0,
          Unit: ""
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          total: 0
        }
      ]
      this.productTableList.tableData = this.tableData
    },
    // 产品重算
    recalculateProductClick() {}
    recalculateProductClick() {},
    clearupProduct(data) {
      this.tableData = data
      this.productTableList.tableData = this.tableData
    }
  }
}
</script>
src/views/sales/quotation/DetailQuotation.vue
@@ -249,33 +249,13 @@
    },
    setTableForm() {
      this.productTableList = {
        tableData: [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
          }
        ],
        tableData: this.detailConfig.infomation.products,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "含税单价", prop: "other9", input: true },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" }
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    }
src/views/sales/quotation/index.vue
@@ -144,9 +144,9 @@
          { label: "有效期", prop: "validity_date", min: 100 }, // 修改时间
          // { label: "小计", prop: "subTotal" }, // 小计
          // { label: "合计", prop: "total" }, // 合计
          { label: "产品名称", prop: "productName", isProduct: true }, // 产品名称
          { label: "数量", prop: "number1" }, // 数量
          { label: "价税合计", prop: "priceTax" } // 价税合计
          { label: "产品名称", prop: "productName", isProductName: true },
          { label: "数量", prop: "productNumber", isProductAmount: true },
          { label: "价税合计", prop: "priceTax", isProductCommon: true }
        ]
      }
      this.searchOptions = []
src/views/sales/refundForm/AddRefundFormDialog.vue
@@ -192,7 +192,15 @@
            </div>
          </div>
          <div class="product-view">
            <CommonFormTableView :show-summary="showSummary" :product-table-list="productTableList" />
            <CommonFormTableView
              :show-summary="showSummary"
              :product-table-list="productTableList"
              @inputContent="inputContent"
              @addProductClick="addProductClick"
              @emptyProductClick="emptyProductClick"
              @recalculateProductClick="recalculateProductClick"
              @clearupProduct="clearupProduct"
            />
          </div>
          <!-- 选择审批流程 -->
          <!-- <div v-if="editConfig.title === '新建'" class="basic-info-title">选择审批流程</div>
@@ -305,7 +313,9 @@
        title: "",
        infomation: {}
      },
      clientId: this.editCommonConfig.infomation.client_id
      clientId: this.editCommonConfig.infomation.client_id,
      productId: 1,
      isNoProduct: true
    }
  },
  created() {
@@ -332,26 +342,38 @@
      this.$refs[formName].validate((valid) => {
        if (valid) {
          console.log(this.editConfig.infomation)
          const params = this.saveParams()
          console.log(params)
          if (this.editConfig.title === "新建") {
            getAddSalesRefund(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                this.$parent.getData()
              }
            })
          for (let i = 0; i < this.tableData.length; i++) {
            if (this.tableData[i].name.length === 0) {
              this.isNoProduct = true
              break
            } else {
              this.isNoProduct = false
            }
          }
          if (this.isNoProduct) {
            this.$message.error("产品名称不能为空")
          } else {
            getUpdateSalesRefund(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("编辑成功")
                this.$parent.getData()
              }
            })
            const params = this.saveParams()
            console.log(params)
            if (this.editConfig.title === "新建") {
              getAddSalesRefund(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("添加成功")
                  this.$parent.getData()
                }
              })
            } else {
              getUpdateSalesRefund(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("编辑成功")
                  this.$parent.getData()
                }
              })
            }
          }
        } else {
          console.log("error submit")
@@ -412,36 +434,83 @@
    // 设置允许上传文件格式
    setFormatClick() {},
    setTableForm() {
      this.productTableList = {
        tableData: [
      if (this.editConfig.title === "新建") {
        this.tableData = [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ],
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
      }
      this.productTableList = {
        tableData: this.tableData,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "含税单价", prop: "other9", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" }
          { label: "#", prop: "productId", width: 40 },
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      this.productId = row.productId
      this.tableData.map((item) => {
        if (item.productId === row.productId) {
          item[prop] = val
        }
      })
    },
    // 产品新增
    addProductClick() {
      this.productId++
      this.tableData.push({
        productId: this.productId,
        id: 0,
        amount: 0,
        desc: "",
        name: "",
        number: "",
        price: 0,
        total: 0
      })
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          total: 0
        }
      ]
      this.productTableList.tableData = this.tableData
    },
    // 产品重算
    recalculateProductClick() {},
    clearupProduct(data) {
      this.tableData = data
      this.productTableList.tableData = this.tableData
    }
  }
}
src/views/sales/refundForm/DetailRefundForm.vue
@@ -17,11 +17,11 @@
        <div class="tab-view">
          <el-tabs v-model="activeName" @tab-click="tabsClick">
            <el-tab-pane label="详情" name="first"></el-tab-pane>
            <el-tab-pane label="附件管理" name="annex">
              <!-- <template slot="label">
            <!-- <el-tab-pane label="附件管理" name="annex"> -->
            <!-- <template slot="label">
                <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div>
              </template> -->
            </el-tab-pane>
            <!-- </el-tab-pane> -->
          </el-tabs>
        </div>
        <div v-if="activeName === 'first'" class="detail">
@@ -205,33 +205,13 @@
    },
    setTableForm() {
      this.productTableList = {
        tableData: [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
          }
        ],
        tableData: this.detailConfig.infomation.products,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "含税单价", prop: "other9", input: true },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" }
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    }
src/views/sales/salesDetails/AddSalesDetailsDialog.vue
@@ -206,7 +206,11 @@
            <el-row>
              <el-col :span="24">
                <el-form-item label="备注" prop="remark">
                  <el-input type="textarea" :autosize="{ minRows: 2 }" v-model="editConfig.infomation.notes"></el-input>
                  <el-input
                    type="textarea"
                    :autosize="{ minRows: 2 }"
                    v-model="editConfig.infomation.remark"
                  ></el-input>
                </el-form-item>
              </el-col>
            </el-row>
@@ -257,6 +261,7 @@
              @addProductClick="addProductClick"
              @emptyProductClick="emptyProductClick"
              @recalculateProductClick="recalculateProductClick"
              @clearupProduct="clearupProduct"
            />
          </div>
          <!-- 选择审批流程 -->
@@ -376,7 +381,7 @@
      showSummary: {
        show: true,
        total: true,
        sumProp: ["other1", "other7"],
        sumProp: ["Amount", "total"],
        mergeNumber: 2
      },
      editSelectClientConfig: {
@@ -391,7 +396,8 @@
      },
      clientId: this.editCommonConfig.infomation.client_id,
      saleChanceId: this.editCommonConfig.infomation.saleChanceId,
      productId: 1
      productId: 1,
      isNoProduct: true
    }
  },
  created() {
@@ -423,26 +429,38 @@
      this.$refs[formName].validate((valid) => {
        if (valid) {
          console.log(this.editConfig.infomation)
          const params = this.saveParams()
          console.log(params)
          if (this.editConfig.title === "新建") {
            getAddSalesDetails(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                this.$parent.getData()
              }
            })
          for (let i = 0; i < this.tableData.length; i++) {
            if (this.tableData[i].name.length === 0) {
              this.isNoProduct = true
              break
            } else {
              this.isNoProduct = false
            }
          }
          if (this.isNoProduct) {
            this.$message.error("产品名称不能为空")
          } else {
            getUpdateSalesDetails(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("编辑成功")
                this.$parent.getData()
              }
            })
            const params = this.saveParams()
            console.log(params)
            if (this.editConfig.title === "新建") {
              getAddSalesDetails(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("添加成功")
                  this.$parent.getData()
                }
              })
            } else {
              getUpdateSalesDetails(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("编辑成功")
                  this.$parent.getData()
                }
              })
            }
          }
        } else {
          console.log("error submit")
@@ -461,17 +479,7 @@
        memberId: data.memberId || 0,
        number: data.number || "",
        phone: data.phone || "",
        products: [
          {
            amount: 0,
            desc: "",
            id: 0,
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ],
        products: this.tableData,
        remark: data.remark || "",
        saleChanceId: this.saleChanceId || 0,
        saleType: data.saleType || 0,
@@ -529,9 +537,9 @@
      }
    },
    selClient(row, value) {
      if (value === "contact") {
        this.editConfig.infomation.contact_name = row.name
        this.contactId = row.id
      if (value === "client") {
        this.editConfig.infomation.client_name = row.name
        this.clientId = row.id
      } else if (value === "chance") {
        this.editConfig.infomation.sale_chance_name = row.name
        this.saleChanceId = row.id
@@ -555,83 +563,81 @@
      if (this.editConfig.title === "新建") {
        this.tableData = [
          {
            id: 1,
            Amount: 0,
            IsSale: true,
            MaterialMode: "",
            MinInventory: 0,
            Name: "",
            Number: "",
            PurchaseType: "",
            SalePrice: 0,
            Unit: ""
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
      }
      this.productTableList = {
        tableData: this.tableData,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "产品名称", prop: "Name", input: true, isRequird: true },
          { label: "产品编号", prop: "Number" },
          { label: "数量", prop: "Amount", input: true, isRequird: true },
          { label: "销售单价", prop: "Unit", input: true },
          { label: "价税合计", prop: "total", input: true },
          { label: "描述", prop: "other8" }
          { label: "#", prop: "productId", width: 40 },
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      console.log("aaaaaaaa")
      console.log(val, prop)
      this.productId = row.id
      this.productId = row.productId
      this.tableData.map((item) => {
        if (item.id === row.id) {
        if (item.productId === row.productId) {
          item[prop] = val
        }
      })
      console.log(this.tableData)
    },
    // 产品新增
    addProductClick() {
      this.productId++
      this.tableData.push({
        id: this.productId,
        Amount: 0,
        IsSale: true,
        MaterialMode: "",
        MinInventory: 0,
        Name: "",
        Number: "",
        PurchaseType: "",
        SalePrice: 0,
        Unit: ""
        productId: this.productId,
        id: 0,
        amount: 0,
        desc: "",
        name: "",
        number: "",
        price: 0,
        total: 0
      })
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          id: 1,
          Amount: 0,
          IsSale: true,
          MaterialMode: "",
          MinInventory: 0,
          Name: "",
          Number: "",
          PurchaseType: "",
          SalePrice: 0,
          Unit: ""
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          total: 0
        }
      ]
      this.productTableList.tableData = this.tableData
    },
    // 产品重算
    recalculateProductClick() {}
    recalculateProductClick() {},
    clearupProduct(data) {
      this.tableData = data
      this.productTableList.tableData = this.tableData
    }
  }
}
</script>
src/views/sales/salesDetails/DetailSpecification.vue
@@ -411,33 +411,13 @@
    },
    setTableForm() {
      this.productTableList = {
        tableData: [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
          }
        ],
        tableData: this.detailConfig.infomation.products,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "含税单价", prop: "other9", input: true },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" }
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    }
src/views/sales/salesDetails/index.vue
@@ -160,11 +160,10 @@
          { label: "应收余额", prop: "amountReceivable", price: true },
          { label: "已开票金额", prop: "invoicedAmount", price: true },
          { label: "未开票金额", prop: "uninvoicedAmount", price: true },
          { label: "产品名称", prop: "productName" },
          { label: "数量", prop: "number1" },
          { label: "含税单价", prop: "taxUnitPrice", price: true },
          { label: "未出库数量", prop: "unOutoundNo" },
          { label: "价税合计", prop: "priceTax", price: true }
          { label: "产品名称", prop: "productName", isProductName: true },
          { label: "数量", prop: "productNumber", isProductAmount: true },
          { label: "销售单价", prop: "taxUnitPrice", isProductCommon: true },
          { label: "价税合计", prop: "priceTax", isProductCommon: true }
        ]
      }
      this.searchOptions = []
@@ -301,9 +300,15 @@
  }
}
::v-deep {
  .el-table .cell,
  .el-table th.el-table__cell > .cell {
    padding: 0 2px;
  .el-table .el-table__cell {
    padding: 0;
  }
  .el-table__header tr,
  .el-table__header th {
    height: 48px;
  }
  .el-table__footer-wrapper tbody td.el-table__cell {
    height: 48px;
  }
}
</style>
src/views/sales/salesOpportunity/AddSalesOpportunityDialog.vue
@@ -215,7 +215,14 @@
              </el-col>
              <el-col :span="12">
                <el-form-item label="预算绝对值" prop="budget">
                  <el-input v-model="editConfig.infomation.budget"></el-input>
                  <el-input-number
                    v-model="editConfig.infomation.budget"
                    placeholder="请输入"
                    :min="0"
                    :precision="2"
                    :controls="false"
                    style="width: 25%; margin-right: 5px"
                  ></el-input-number>
                </el-form-item>
              </el-col>
              <el-col :span="12">
@@ -653,9 +660,6 @@
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                // if (this.editConfig.title === "新建" && this.editConfig.infomation.client_name) {
                //   this.$parent.handleClose()
                // } else {
                this.$parent.getData()
                // }
              }
src/views/sales/salesReturn/AddSalesReturnDialog.vue
@@ -168,13 +168,21 @@
            <div style="margin-left: 400px">
              币种
              <el-select v-model="editConfig.infomation.currency" placeholder="请选择" size="mini" style="width: 63%">
                <el-option v-for="item in currencyOptions" :key="item.value" :label="item.label" :value="item.value">
                <el-option v-for="item in currencyOptions" :key="item.id" :label="item.name" :value="item.id">
                </el-option>
              </el-select>
            </div>
          </div>
          <div class="product-view">
            <CommonFormTableView :show-summary="showSummary" :product-table-list="productTableList" />
            <CommonFormTableView
              :show-summary="showSummary"
              :product-table-list="productTableList"
              @inputContent="inputContent"
              @addProductClick="addProductClick"
              @emptyProductClick="emptyProductClick"
              @recalculateProductClick="recalculateProductClick"
              @clearupProduct="clearupProduct"
            />
          </div>
        </div>
      </el-form>
@@ -235,16 +243,17 @@
      productTableList: {},
      showSummary: {
        show: true,
        total: false,
        refundable: true,
        sumProp: ["other1", "other2", "other3", "other4"],
        mergeNumber: 4
        total: true,
        sumProp: ["Amount", "total"],
        mergeNumber: 2
      },
      editSelectClientConfig: {
        editVisible: false,
        title: "",
        infomation: {}
      }
      },
      productId: 1,
      isNoProduct: true
    }
  },
  created() {
@@ -259,7 +268,6 @@
        .then((res) => {
          this.memberOptions = res.data.member
          this.repositoryOptions = res.data.repository
          // this.currencyOptions = res.data.currency
          this.statusOptions = res.data.salesReturnStatus
        })
        .catch((err) => {
@@ -282,30 +290,42 @@
      this.$refs[formName].validate((valid) => {
        if (valid) {
          console.log(this.editConfig.infomation)
          const params = this.saveParams()
          console.log(params)
          if (this.editConfig.title === "新建") {
            getAddSalesReturn(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                this.$parent.getData()
              }
            })
          for (let i = 0; i < this.tableData.length; i++) {
            if (this.tableData[i].name.length === 0) {
              this.isNoProduct = true
              break
            } else {
              this.isNoProduct = false
            }
          }
          if (this.isNoProduct) {
            this.$message.error("产品名称不能为空")
          } else {
            getUpdateSalesReturn(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("编辑成功")
                this.$message({
                  message: "编辑成功",
                  type: "success"
                })
                this.$parent.getData()
              }
            })
            const params = this.saveParams()
            console.log(params)
            if (this.editConfig.title === "新建") {
              getAddSalesReturn(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("添加成功")
                  this.$parent.getData()
                }
              })
            } else {
              getUpdateSalesReturn(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("编辑成功")
                  this.$message({
                    message: "编辑成功",
                    type: "success"
                  })
                  this.$parent.getData()
                }
              })
            }
          }
        } else {
          console.log("error submit")
@@ -375,26 +395,83 @@
    // 设置允许上传文件格式
    setFormatClick() {},
    setTableForm() {
      if (this.editConfig.title === "新建") {
        this.tableData = [
          {
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
      }
      this.productTableList = {
        tableData: [],
        tableData: this.tableData,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "含税单价", prop: "other9", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" }
          { label: "#", prop: "productId", width: 40 },
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      this.productId = row.productId
      this.tableData.map((item) => {
        if (item.productId === row.productId) {
          item[prop] = val
        }
      })
    },
    // 产品新增
    addProductClick() {
      this.productId++
      this.tableData.push({
        productId: this.productId,
        id: 0,
        amount: 0,
        desc: "",
        name: "",
        number: "",
        price: 0,
        total: 0
      })
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          total: 0
        }
      ]
      this.productTableList.tableData = this.tableData
    },
    // 产品重算
    recalculateProductClick() {},
    clearupProduct(data) {
      this.tableData = data
      this.productTableList.tableData = this.tableData
    }
  }
}
src/views/sales/salesReturn/DetailReturn.vue
@@ -256,33 +256,13 @@
    },
    setTableForm() {
      this.productTableList = {
        tableData: [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
          }
        ],
        tableData: this.detailConfig.infomation.products,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "含税单价", prop: "other9", input: true },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" }
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    }
src/views/sales/subOrder/AddSubOrderDialog.vue
@@ -126,70 +126,14 @@
          </div>
          <div class="product-view">
            <CommonFormTableView
              :show-summary="showSummary"
              :product-table-list="productTableList"
              @inputContent="inputContent"
              @addProductClick="addProductClick"
              @emptyProductClick="emptyProductClick"
              @recalculateProductClick="recalculateProductClick"
              @clearupProduct="clearupProduct"
            />
          </div>
          <!-- 合计 -->
          <div class="basic-info-view">
            <el-row>
              <el-col :span="7" :offset="17">
                <el-form-item prop="discount">
                  <template slot="label">
                    <span>整单折扣</span>
                    <el-select
                      v-model="discount"
                      placeholder="请选择"
                      size="mini"
                      style="width: 104px; margin-left: 3px"
                      disabled
                    >
                      <el-option
                        v-for="item in discountOptions"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select>
                  </template>
                  <el-input v-model="editConfig.infomation.discount" disabled></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="7" :offset="17">
                <el-form-item prop="discount">
                  <template slot="label">
                    <span>调整</span>
                    <el-select
                      v-model="adjust"
                      placeholder="请选择"
                      size="mini"
                      style="width: 74px; margin-left: 3px"
                      disabled
                    >
                      <el-option
                        v-for="item in adjustOptions"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select>
                  </template>
                  <el-input v-model="editConfig.infomation.discount" disabled></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="7" :offset="17">
                <el-form-item label="合计" prop="total">
                  <el-button type="text" v-model="editConfig.infomation.total" style="color: #555; font-size: 13px">{{
                    editConfig.infomation.total ? editConfig.infomation.total : "0.00"
                  }}</el-button>
                </el-form-item>
              </el-col>
            </el-row>
          </div>
        </div>
      </el-form>
@@ -266,9 +210,9 @@
      productTableList: {},
      showSummary: {
        show: true,
        total: false,
        sumProp: ["other1", "other7"],
        mergeNumber: 7
        total: true,
        sumProp: ["Amount", "total"],
        mergeNumber: 2
      },
      editSelectClientConfig: {
        editVisible: false,
@@ -319,26 +263,38 @@
      this.$refs[formName].validate((valid) => {
        if (valid) {
          console.log(this.editConfig.infomation)
          const params = this.saveParams()
          console.log(params)
          if (this.editConfig.title === "新建") {
            getAddSubOrder(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                this.$parent.getData()
              }
            })
          for (let i = 0; i < this.tableData.length; i++) {
            if (this.tableData[i].name.length === 0) {
              this.isNoProduct = true
              break
            } else {
              this.isNoProduct = false
            }
          }
          if (this.isNoProduct) {
            this.$message.error("产品名称不能为空")
          } else {
            getUpdateSubOrder(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("编辑成功")
                this.$parent.getData()
              }
            })
            const params = this.saveParams()
            console.log(params)
            if (this.editConfig.title === "新建") {
              getAddSubOrder(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("添加成功")
                  this.$parent.getData()
                }
              })
            } else {
              getUpdateSubOrder(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("编辑成功")
                  this.$parent.getData()
                }
              })
            }
          }
        } else {
          console.log("error submit")
@@ -369,11 +325,6 @@
      } else if (value === "master") {
        restaurants = this.masterOrderList
      }
      // else if (value === "chance") {
      //   restaurants = this.saleChancelist
      // } else {
      //   restaurants = this.saleLeadlist
      // }
      var results = queryString ? restaurants.filter(this.createStateFilter(queryString, value)) : restaurants
      cb(results)
    },
@@ -433,83 +384,81 @@
      if (this.editConfig.title === "新建") {
        this.tableData = [
          {
            id: 1,
            Amount: 0,
            IsSale: true,
            MaterialMode: "",
            MinInventory: 0,
            Name: "",
            Number: "",
            PurchaseType: "",
            SalePrice: 0,
            Unit: ""
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
      }
      this.productTableList = {
        tableData: this.tableData,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "产品名称", prop: "Name", input: true, isRequird: true },
          { label: "产品编号", prop: "Number" },
          { label: "数量", prop: "Amount", input: true, isRequird: true },
          { label: "销售单价", prop: "Unit", input: true },
          { label: "价税合计", prop: "total", input: true },
          { label: "描述", prop: "other8" }
          { label: "#", prop: "productId", width: 40 },
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      console.log("aaaaaaaa")
      console.log(val, prop)
      this.productId = row.id
      this.productId = row.productId
      this.tableData.map((item) => {
        if (item.id === row.id) {
        if (item.productId === row.productId) {
          item[prop] = val
        }
      })
      console.log(this.tableData)
    },
    // 产品新增
    addProductClick() {
      this.productId++
      this.tableData.push({
        id: this.productId,
        Amount: 0,
        IsSale: true,
        MaterialMode: "",
        MinInventory: 0,
        Name: "",
        Number: "",
        PurchaseType: "",
        SalePrice: 0,
        Unit: ""
        productId: this.productId,
        id: 0,
        amount: 0,
        desc: "",
        name: "",
        number: "",
        price: 0,
        total: 0
      })
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          id: 1,
          Amount: 0,
          IsSale: true,
          MaterialMode: "",
          MinInventory: 0,
          Name: "",
          Number: "",
          PurchaseType: "",
          SalePrice: 0,
          Unit: ""
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          total: 0
        }
      ]
      this.productTableList.tableData = this.tableData
    },
    // 产品重算
    recalculateProductClick() {}
    recalculateProductClick() {},
    clearupProduct(data) {
      this.tableData = data
      this.productTableList.tableData = this.tableData
    }
  }
}
</script>
src/views/sales/subOrder/DetailSubOrder.vue
@@ -202,33 +202,13 @@
    },
    setTableForm() {
      this.productTableList = {
        tableData: [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
          }
        ],
        tableData: this.detailConfig.infomation.products,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "含税单价", prop: "other9", input: true },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" }
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    }
src/views/service/clientServiceOrder/DetailClientServiceOrder.vue
@@ -17,7 +17,7 @@
        <div class="tab-view">
          <el-tabs v-model="activeName" @tab-click="tabsClick">
            <el-tab-pane label="详情" name="first"></el-tab-pane>
            <el-tab-pane label="附件管理" name="annex"></el-tab-pane>
            <!-- <el-tab-pane label="附件管理" name="annex"></el-tab-pane> -->
            <el-tab-pane label="服务回访单" name="followup">
              <!-- <template slot="label">
                <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div>
src/views/service/serviceContract/AddServiceContractDialog.vue
@@ -312,6 +312,7 @@
              @addProductClick="addProductClick"
              @emptyProductClick="emptyProductClick"
              @recalculateProductClick="recalculateProductClick"
              @clearupProduct="clearupProduct"
            />
          </div>
          <!-- 选择审批流程 -->
@@ -480,7 +481,8 @@
      contractId: this.editCommonConfig.infomation.salesDetailsId,
      quotationId: this.editCommonConfig.infomation.quotationId,
      tableData: [],
      productId: 1
      productId: 1,
      isNoProduct: true
    }
  },
  created() {
@@ -512,26 +514,38 @@
      this.$refs[formName].validate((valid) => {
        if (valid) {
          console.log(this.editConfig.infomation)
          const params = this.saveParams()
          console.log(params)
          if (this.editConfig.title === "新建") {
            getAddServiceContract(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("添加成功")
                this.$parent.getData()
              }
            })
          for (let i = 0; i < this.tableData.length; i++) {
            if (this.tableData[i].name.length === 0) {
              this.isNoProduct = true
              break
            } else {
              this.isNoProduct = false
            }
          }
          if (this.isNoProduct) {
            this.$message.error("产品名称不能为空")
          } else {
            getUpdateServiceContract(params).then((res) => {
              console.log(res)
              this.editConfig.visible = false
              if (res.code === 200) {
                this.$message.success("编辑成功")
                this.$parent.getData()
              }
            })
            const params = this.saveParams()
            console.log(params)
            if (this.editConfig.title === "新建") {
              getAddServiceContract(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("添加成功")
                  this.$parent.getData()
                }
              })
            } else {
              getUpdateServiceContract(params).then((res) => {
                console.log(res)
                this.editConfig.visible = false
                if (res.code === 200) {
                  this.$message.success("编辑成功")
                  this.$parent.getData()
                }
              })
            }
          }
        } else {
          console.log("error submit")
@@ -676,79 +690,71 @@
      if (this.editConfig.title === "新建") {
        this.tableData = [
          {
            id: 1,
            Amount: 0,
            IsSale: true,
            MaterialMode: "",
            MinInventory: 0,
            Name: "",
            Number: "",
            PurchaseType: "",
            SalePrice: 0,
            Unit: ""
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            total: 0
          }
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
      }
      this.productTableList = {
        tableData: this.tableData,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "产品名称", prop: "Name", input: true, isRequird: true },
          { label: "产品编号", prop: "Number" },
          { label: "服务开始日", prop: "other5", date: true, isRequird: true, min: 100 },
          { label: "服务到期日", prop: "other6", date: true, isRequird: true, min: 100 },
          { label: "数量", prop: "Amount", input: true, isRequird: true },
          { label: "销售单价", prop: "Unit", input: true },
          { label: "价税合计", prop: "total", input: true },
          { label: "描述", prop: "other8" }
          { label: "#", prop: "productId", width: 40 },
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      console.log("aaaaaaaa")
      console.log(val, prop)
      this.productId = row.id
      this.productId = row.productId
      this.tableData.map((item) => {
        if (item.id === row.id) {
        if (item.productId === row.productId) {
          item[prop] = val
        }
      })
      console.log(this.tableData)
    },
    // 产品新增
    addProductClick() {
      this.productId++
      this.tableData.push({
        id: this.productId,
        Amount: 0,
        IsSale: true,
        MaterialMode: "",
        MinInventory: 0,
        Name: "",
        Number: "",
        PurchaseType: "",
        SalePrice: 0,
        Unit: ""
        productId: this.productId,
        id: 0,
        amount: 0,
        desc: "",
        name: "",
        number: "",
        price: 0,
        total: 0
      })
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          id: 1,
          Amount: 0,
          IsSale: true,
          MaterialMode: "",
          MinInventory: 0,
          Name: "",
          Number: "",
          PurchaseType: "",
          SalePrice: 0,
          Unit: ""
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          total: 0
        }
      ]
      this.productTableList.tableData = this.tableData
src/views/service/serviceContract/DetailServiceContract.vue
@@ -328,33 +328,13 @@
    },
    setTableForm() {
      this.productTableList = {
        tableData: [
          {
            id: "1",
            productName: "上海有限公司",
            other0: "ZDYBD03-1",
            other1: "12",
            other2: "5.00",
            other4: "3.00",
            other3: "2.00"
          }
        ],
        tableData: this.detailConfig.infomation.products,
        tableColumn: [
          { label: "#", prop: "id", width: 40 },
          { label: "含税单价", prop: "other9", input: true },
          { label: "产品名称", prop: "productName", input: true, isRequird: true },
          { label: "产品编号", prop: "other0" },
          { label: "数量", prop: "other1", input: true, isRequird: true },
          { label: "折扣率(%)", prop: "other6", input: true },
          { label: "不含税单价", prop: "other7", input: true },
          { label: "折扣额", prop: "other2" },
          { label: "税(销售)", prop: "other7", input: true },
          { label: "实际含税单价", prop: "other3" },
          { label: "不含税金额", prop: "other4" },
          { label: "价税合计", prop: "other3", input: true },
          { label: "描述", prop: "other8" },
          { label: "源单类型", prop: "other5" },
          { label: "源单", prop: "other6" }
          { label: "产品名称", prop: "name", productName: true, isRequird: true },
          { label: "产品编号", prop: "number" },
          { label: "数量", prop: "amount", inputNumber: true, isRequird: true },
          { label: "销售单价", prop: "price", inputFloat: true },
          { label: "价税合计", prop: "total", inputFloat: true }
        ]
      }
    }
src/views/service/serviceFollowup/DetailServiceFollowup.vue
@@ -17,11 +17,11 @@
        <div class="tab-view">
          <el-tabs v-model="activeName" @tab-click="tabsClick">
            <el-tab-pane label="详情" name="first"></el-tab-pane>
            <el-tab-pane label="附件管理" name="annex">
              <!-- <template slot="label">
            <!-- <el-tab-pane label="附件管理" name="annex"> -->
            <!-- <template slot="label">
                <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div>
              </template> -->
            </el-tab-pane>
            <!-- </el-tab-pane> -->
          </el-tabs>
        </div>
        <div v-if="activeName === 'first'" class="detail">