cz 1 year ago
parent
commit
08136932e3

+ 1 - 1
src/components/PDF/contractPDFOne.vue

@@ -112,7 +112,7 @@
               v-if="item.fileList && item.fileList.length > 0"
             />
           </td>
-          <td style="width: 20%"><div v-html="item.productRemark"></div></td>
+          <td style="width: 20%">{{ item.productName }}</td>
           <td style="width: 15%">{{ item.productSpec }}</td>
           <td style="width: 12%">{{ item.packMethod }}</td>
           <td style="width: 12%">

+ 3 - 3
src/components/process/EHSD/Contract.vue

@@ -1718,7 +1718,7 @@ watch(
 
 onMounted(() => {
   formOption.disabled = judgeStatus();
-  if (route.query && route.query.processType) {
+  if (route.query && route.query.businessId && route.query.processType) {
     let businessId = route.query.businessId;
     proxy.post("/contract/detail", { id: businessId }).then((res) => {
       if (!res.fileList) {
@@ -1740,10 +1740,10 @@ onMounted(() => {
         .then((fileObj) => {
           if (fileObj[businessId] && fileObj[businessId].length > 0) {
             formData.data.fileList = fileObj[businessId]
-              .filter((x) => x.businessType === "0")
+              .filter((x) => x.businessType === "1")
               .map((x) => ({ raw: x, name: x.fileName, url: x.fileUrl }));
             formData.data.packageFileList = fileObj[businessId]
-              .filter((x) => x.businessType === "1")
+              .filter((x) => x.businessType === "2")
               .map((x) => ({ raw: x, name: x.fileName, url: x.fileUrl }));
           }
         });

+ 1914 - 0
src/components/process/EHSD/ContractChange.vue

@@ -0,0 +1,1914 @@
+<template>
+  <div style="width: 100%; padding: 0px 15px">
+    <byForm
+      :formConfig="formConfig"
+      :formOption="formOption"
+      v-model="formData.data"
+      :rules="rules"
+      ref="submit"
+    >
+      <template #seller>
+        <div style="width: 100%">
+          <el-form-item prop="sellCorporationId">
+            <el-select
+              v-model="formData.data.sellCorporationId"
+              style="width: 100%"
+              disabled
+            >
+              <el-option
+                v-for="item in corporationList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="8">
+              <el-form-item label="地址" prop="sellCountryName">
+                <el-input
+                  v-model="formData.data.sellCountryName"
+                  placeholder="请输入国家"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label=" " prop="sellProvinceName">
+                <el-input
+                  v-model="formData.data.sellProvinceName"
+                  placeholder="请输入省/州"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label=" " prop="sellCityName">
+                <el-input
+                  v-model="formData.data.sellCityName"
+                  placeholder="请输入城市"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="24">
+              <el-form-item prop="sellAddress">
+                <el-input v-model="formData.data.sellAddress" type="textarea">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="8">
+              <el-form-item label="联系人" prop="sellContactName">
+                <el-input
+                  v-model="formData.data.sellContactName"
+                  placeholder="请输入联系人"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="16">
+              <el-form-item label=" " prop="sellContactNumber">
+                <el-input
+                  v-model="formData.data.sellContactNumber"
+                  placeholder="请输入联系人电话"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </template>
+      <template #buyer>
+        <div style="width: 100%">
+          <div style="width: 100%">
+            <!-- <el-form-item prop="buyCorporationId">
+              <el-select
+                v-model="formData.data.buyCorporationId"
+                style="width: 100%"
+                @change="changeCustomer"
+              >
+                <el-option
+                  v-for="item in customerList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item> -->
+            <el-form-item prop="buyCorporationId">
+              <el-select
+                v-model="formData.data.buyCorporationId"
+                filterable
+                remote
+                reserve-keyword
+                placeholder="请输入关键字"
+                remote-show-suffix
+                :remote-method="remoteMethod"
+                :loading="loadingSearch"
+                @input="remoteMethod"
+                style="width: 100%"
+                @change="changeCustomer"
+                v-if="
+                  [30].includes(route.query.processType) ||
+                  !route.query.processType
+                "
+              >
+                <el-option
+                  v-for="item in customerList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+              <el-select
+                v-model="formData.data.buyCorporationName"
+                disabled
+                v-else
+              >
+              </el-select>
+            </el-form-item>
+            <el-row style="margin-top: 20px; width: 100%">
+              <el-col :span="6">
+                <el-form-item label="地址" prop="countryId">
+                  <el-select
+                    v-model="formData.data.countryId"
+                    placeholder="国家"
+                    filterable
+                    @change="(val) => getCityData(val, '20', true)"
+                  >
+                    <el-option
+                      v-for="item in countryData"
+                      :label="item.chineseName"
+                      :value="item.id"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label=" " prop="provinceName">
+                  <selectCity
+                    placeholder="省/洲"
+                    @change="(val) => getCityData(val, '30', true)"
+                    addressId="provinceId"
+                    addressName="provinceName"
+                    v-model="formData.data"
+                    :data="provinceData"
+                  >
+                  </selectCity>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label=" " prop="cityName">
+                  <selectCity
+                    placeholder="城市"
+                    addressId="cityId"
+                    addressName="cityName"
+                    v-model="formData.data"
+                    :data="cityData"
+                  >
+                  </selectCity>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label=" " prop="buyPostalCode">
+                  <el-input
+                    v-model="formData.data.buyPostalCode"
+                    placeholder="请输入邮编"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row style="margin-top: 20px; width: 100%">
+              <el-col :span="24">
+                <el-form-item prop="buyAddress">
+                  <el-input v-model="formData.data.buyAddress" type="textarea">
+                  </el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row style="margin-top: 20px; width: 100%">
+              <el-col :span="8">
+                <el-form-item label="联系人" prop="buyContactName">
+                  <el-autocomplete
+                    v-model="formData.data.buyContactName"
+                    :fetch-suggestions="querySearchPerson"
+                    clearable
+                    class="inline-input w-50"
+                    placeholder="请输入联系人"
+                    @select="handlePerson"
+                  >
+                  </el-autocomplete>
+                </el-form-item>
+              </el-col>
+              <el-col :span="16">
+                <el-form-item label=" " prop="buyContactNumber">
+                  <el-input
+                    v-model="formData.data.buyContactNumber"
+                    placeholder="请输入联系人电话"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+        </div>
+      </template>
+      <template #payment>
+        <div style="width: 100%">
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="6">
+              <el-form-item label="币种" prop="currency">
+                <el-select
+                  v-model="formData.data.currency"
+                  placeholder="请选择币种"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in accountCurrency"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="汇率" prop="rate">
+                <el-input-number
+                  onmousewheel="return false;"
+                  v-model="formData.data.rate"
+                  placeholder="请输入汇率"
+                  style="width: 100%"
+                  :precision="4"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="6">
+              <el-form-item label="付款方式" prop="paymentMethod">
+                <el-select
+                  v-model="formData.data.paymentMethod"
+                  placeholder="请选择付款方式"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in fundsPaymentMethod"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="预付比例 (%)" prop="advanceRatio">
+                <el-input-number
+                  onmousewheel="return false;"
+                  v-model="formData.data.advanceRatio"
+                  placeholder="请输入预付比例"
+                  style="width: 100%"
+                  :precision="2"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="18">
+              <el-form-item label="付款条件" prop="remark">
+                <el-input
+                  v-model="formData.data.remark"
+                  :rows="2"
+                  type="textarea"
+                  placeholder="请输入付款条件"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="9">
+              <el-form-item label="收款账号" prop="shroffAccountId">
+                <el-select
+                  v-model="formData.data.shroffAccountId"
+                  placeholder="请选择收款账号"
+                  style="width: 100%"
+                  @change="changeShroffAccount"
+                >
+                  <el-option
+                    v-for="item in accountList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="9">
+              <el-form-item label="  ">
+                <el-button type="primary" @click="changeActiveName" text>
+                  <span v-if="activeName == '1'">收起</span>
+                  <span v-else>展开</span>
+                </el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <div style="width: 100%; margin-top: 34px">
+            <el-collapse v-model="activeName" class="hideCollapse" accordion>
+              <el-collapse-item title="" name="1">
+                <el-row style="width: 100%">
+                  <el-col :span="9">
+                    <el-form-item
+                      label="Beneficiary Name"
+                      prop="beneficiaryName"
+                    >
+                      <el-input
+                        v-model="formData.data.beneficiaryName"
+                        placeholder="请输入Beneficiary Name"
+                      />
+                    </el-form-item>
+                    <div style="height: 20px"></div>
+                    <el-form-item
+                      label="Beneficiary Bank"
+                      prop="beneficiaryBank"
+                    >
+                      <el-input
+                        v-model="formData.data.beneficiaryBank"
+                        placeholder="请输入Beneficiary Bank"
+                      />
+                    </el-form-item>
+                    <div style="height: 20px"></div>
+                    <el-form-item
+                      label="Beneficiary Bank Address"
+                      prop="beneficiaryBankAddress"
+                    >
+                      <el-input
+                        v-model="formData.data.beneficiaryBankAddress"
+                        placeholder="请输入Beneficiary Bank Address"
+                      />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="9">
+                    <el-form-item
+                      label="Beneficiary Account Number"
+                      prop="beneficiaryAccountNumber"
+                    >
+                      <el-input
+                        v-model="formData.data.beneficiaryAccountNumber"
+                        placeholder="请输入Beneficiary Account Number"
+                      />
+                    </el-form-item>
+                    <div style="height: 20px"></div>
+                    <el-form-item label="Swift Code" prop="swiftCode">
+                      <el-input
+                        v-model="formData.data.swiftCode"
+                        placeholder="请输入Swift Code"
+                      />
+                    </el-form-item>
+                    <div style="height: 20px"></div>
+                    <el-form-item
+                      label="Beneficiary Address"
+                      prop="beneficiaryAddress"
+                    >
+                      <el-input
+                        v-model="formData.data.beneficiaryAddress"
+                        placeholder="请输入Beneficiary Address"
+                      />
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-collapse-item>
+            </el-collapse>
+          </div>
+        </div>
+      </template>
+      <template #delivery>
+        <div style="width: 100%">
+          <el-row style="margin-top: 20px; width: 100%">
+            <el-col :span="6">
+              <el-form-item label="报价有效期 (天)" prop="effective">
+                <el-input-number
+                  onmousewheel="return false;"
+                  v-model="formData.data.effective"
+                  placeholder="请输入有效期"
+                  style="width: 100%"
+                  :precision="0"
+                  :controls="false"
+                  :min="0"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="交货期限" prop="deliveryTime">
+                <el-date-picker
+                  v-model="formData.data.deliveryTime"
+                  type="date"
+                  placeholder="请选择交货期限"
+                  value-format="YYYY-MM-DD"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="运输方式" prop="transportMethod">
+                <el-select
+                  v-model="formData.data.transportMethod"
+                  placeholder="请选择运输方式"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in shippingMethod"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="运输说明" prop="transportRemark">
+                <el-input
+                  v-model="formData.data.transportRemark"
+                  placeholder="请输入运输说明"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </template>
+      <template #commodity>
+        <div style="width: 100%">
+          <el-button type="primary" @click="openProductCompany = true" plain
+            >标准产品库</el-button
+          >
+          <el-button type="primary" @click="clickCustomerProduct()" plain
+            >客户产品库</el-button
+          >
+          <el-table
+            :data="formData.data.contractProductList"
+            style="width: 100%; margin-top: 16px"
+          >
+            <el-table-column label="商品图片" width="80">
+              <template #default="{ row }">
+                <div v-if="row.fileUrl">
+                  <img
+                    :src="row.fileUrl"
+                    class="pic"
+                    @click="onPicture(row.fileUrl)"
+                  />
+                </div>
+                <div v-else></div>
+              </template>
+            </el-table-column>
+            <el-table-column label="商品名称" min-width="180">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProductList.' + $index + '.productName'"
+                    :rules="rules.productName"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-input
+                      v-model="row.productName"
+                      placeholder="请输入商品名称"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="尺寸 cm*cm*cm" width="140">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProductList.' + $index + '.productModel'"
+                    :rules="rules.productModel"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-input v-model="row.productModel" placeholder="请输入" />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="数量" width="130">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProductList.' + $index + '.quantity'"
+                    :rules="rules.quantity"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-input-number
+                      onmousewheel="return false;"
+                      v-model="row.quantity"
+                      placeholder="请输入"
+                      style="width: 100%"
+                      :precision="0"
+                      :controls="false"
+                      :min="0"
+                      @change="calculationAmount()"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="单价" width="140">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProductList.' + $index + '.price'"
+                    :rules="rules.price"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-input-number
+                      onmousewheel="return false;"
+                      v-model="row.price"
+                      placeholder="请输入"
+                      style="width: 100%"
+                      :precision="2"
+                      :controls="false"
+                      :min="0"
+                      @change="calculationAmount()"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="贸易方式" width="140">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProductList.' + $index + '.tradeMethods'"
+                    :rules="rules.tradeMethods"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-select
+                      v-model="row.tradeMethods"
+                      placeholder="请选择"
+                      style="width: 100%"
+                    >
+                      <el-option
+                        v-for="item in tradeMethods"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="包装方式" width="180">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProductList.' + $index + '.packMethod'"
+                    :rules="rules.packMethod"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-input v-model="row.packMethod" placeholder="请输入" />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="amount"
+              :label="'金额 ( ' + formData.data.currency + ' )'"
+              width="130"
+            />
+            <el-table-column
+              label="操作"
+              width="60"
+              align="center"
+              fixed="right"
+            >
+              <template #default="{ row, $index }">
+                <el-button
+                  type="primary"
+                  link
+                  @click="handleRemove($index, row)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </template>
+      <template #file>
+        <div style="width: 100%">
+          <el-upload
+            v-model:fileList="formData.data.fileList"
+            action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
+            :data="uploadData"
+            multiple
+            :before-upload="uploadFile"
+            :on-success="handleSuccess"
+            :on-preview="onPreviewFile"
+          >
+            <el-button type="primary" plain>选择</el-button>
+          </el-upload>
+        </div>
+      </template>
+      <template #indication>
+        <div style="width: 100%">
+          <el-upload
+            v-model:fileList="formData.data.packageFileList"
+            action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
+            :data="indicationUploadData"
+            multiple
+            :before-upload="indicationUploadFile"
+            :on-success="handleSuccess"
+            :on-preview="onPreviewFile"
+          >
+            <el-button type="primary" plain>选择</el-button>
+          </el-upload>
+        </div>
+      </template>
+      <template #otherCharge>
+        <div style="width: 100%">
+          <el-button type="primary" @click="clickAdd()">添加行</el-button>
+          <el-table
+            :data="formData.data.contractProjectList"
+            style="width: 100%; margin-top: 16px"
+          >
+            <el-table-column label="收费项目" width="220">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProjectList.' + $index + '.payName'"
+                    :rules="rules.payName"
+                    :inline-message="true"
+                  >
+                    <el-autocomplete
+                      v-model="row.payName"
+                      :fetch-suggestions="querySearch"
+                      clearable
+                      class="inline-input w-50"
+                      placeholder="请输入收费项目"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="备注">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProjectList.' + $index + '.remark'"
+                  >
+                    <el-input v-model="row.remark" placeholder="请输入备注" />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="'金额 ( ' + formData.data.currency + ' )'"
+              width="130"
+            >
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractProjectList.' + $index + '.amount'"
+                    :rules="rules.amount"
+                    :inline-message="true"
+                    class="shrinkPadding"
+                  >
+                    <el-input-number
+                      onmousewheel="return false;"
+                      v-model="row.amount"
+                      placeholder="请输入金额"
+                      style="width: 100%"
+                      :precision="2"
+                      :controls="false"
+                      :min="0"
+                      @change="totalAmount()"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="操作"
+              width="60"
+              align="center"
+              fixed="right"
+            >
+              <template #default="{ $index }">
+                <el-button type="primary" link @click="handleDelete($index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </template>
+      <template #offerMoney>
+        <div style="width: 100%; display: flex">
+          <div style="width: calc(100% - 190px)"></div>
+          <div style="width: 130px; padding: 0 12px">
+            <el-form-item
+              label="合同总金额"
+              prop="amount"
+              class="shrinkPadding"
+            >
+              <el-input
+                v-model="formData.data.amount"
+                placeholder="合同总金额"
+                disabled
+              />
+            </el-form-item>
+          </div>
+        </div>
+      </template>
+      <template #shipment>
+        <div style="width: 100%">
+          <el-table
+            :data="formData.data.contractShipmentList"
+            style="width: 100%; margin-top: 16px"
+          >
+            <el-table-column prop="productCode" label="商品编码" width="120" />
+            <el-table-column prop="productName" label="商品名称" />
+            <el-table-column label="出货日期" width="220">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractShipmentList.' + $index + '.shipmentTime'"
+                    :rules="rules.shipmentTime"
+                    :inline-message="true"
+                  >
+                    <el-date-picker
+                      v-model="row.shipmentTime"
+                      type="date"
+                      placeholder="请选择出货日期"
+                      value-format="YYYY-MM-DD"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="数量" width="160">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item
+                    :prop="'contractShipmentList.' + $index + '.quantity'"
+                    :inline-message="true"
+                  >
+                    <el-input-number
+                      onmousewheel="return false;"
+                      v-model="row.quantity"
+                      placeholder="请输入数量"
+                      style="width: 100%"
+                      :precision="0"
+                      :controls="false"
+                      :min="0"
+                      @change="calculationAmount()"
+                    />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              align="center"
+              label="操作"
+              width="120"
+              fixed="right"
+            >
+              <template #default="{ row, $index }">
+                <el-button type="primary" link @click="clickSplit(row)"
+                  >拆分</el-button
+                >
+                <el-button type="primary" link @click="clickDelete($index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </template>
+    </byForm>
+
+    <el-dialog
+      v-if="openProductCompany"
+      v-model="openProductCompany"
+      title="公司产品库"
+      width="90%"
+      append-to-body
+    >
+      <CompanyProduct
+        :selectStatus="true"
+        @selectProduct="selectProduct"
+      ></CompanyProduct>
+    </el-dialog>
+
+    <el-dialog
+      v-if="openProductCustomer"
+      v-model="openProductCustomer"
+      title="客户产品库"
+      width="90%"
+      append-to-body
+    >
+      <CustomerProduct
+        :selectStatus="true"
+        :buyCorporationId="formData.data.buyCorporationId"
+        @selectProduct="selectProduct"
+      ></CustomerProduct>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import byForm from "@/components/byForm/index";
+import CompanyProduct from "@/views/EHSD/productLibrary/companyProduct/index";
+import CustomerProduct from "@/views/EHSD/productLibrary/customerProduct/index";
+import { ElMessage } from "element-plus";
+import selectCity from "@/components/selectCity/index.vue";
+import { useRoute } from "vue-router";
+
+const route = useRoute();
+const { proxy } = getCurrentInstance();
+const innerMethod = ref([]);
+const outsideMethod = ref([]);
+const accountCurrency = ref([]);
+const fundsPaymentMethod = ref([]);
+const tradeMethods = ref([]);
+const shippingMethod = ref([]);
+const templateList = ref([]);
+const corporationList = ref([]);
+const customerList = ref([]);
+const accountList = ref([]);
+const countryData = ref([]);
+const provinceData = ref([]);
+const cityData = ref([]);
+const customerUserList = ref([]);
+const openProductCompany = ref(false);
+const openProductCustomer = ref(false);
+const activeName = ref("");
+const formData = reactive({
+  data: {
+    currency: "",
+    amount: undefined,
+    contractProductList: [],
+    contractProjectList: [],
+    fileList: [],
+    packageFileList: [],
+    contractShipmentList: [],
+  },
+});
+const submit = ref(null);
+const judgeStatus = () => {
+  if (route.query.processType == 20 || route.query.processType == 10) {
+    return true;
+  }
+  if (props.queryData.recordList && props.queryData.recordList.length > 0) {
+    let data = props.queryData.recordList.filter(
+      (item) => item.status === 2 && item.nodeType !== 1
+    );
+    if (data && data.length > 0) {
+      return true;
+    }
+  }
+  return false;
+};
+const formOption = reactive({
+  inline: true,
+  labelWidth: 100,
+  itemWidth: 100,
+  rules: [],
+  disabled: false,
+});
+const uploadData = ref({});
+const indicationUploadData = ref({});
+const formConfig = computed(() => {
+  return [
+    {
+      type: "title",
+      title: "合同模板",
+      label: "",
+    },
+    {
+      type: "select",
+      label: "选择合同模板",
+      prop: "contractTemplateId",
+      data: templateList.value,
+      fn: (val) => {
+        changeTemplate(val);
+      },
+    },
+    {
+      type: "slot",
+      slotName: "seller",
+      label: "卖方信息",
+      itemWidth: 50,
+    },
+    {
+      type: "slot",
+      slotName: "buyer",
+      label: "买方信息",
+      itemWidth: 50,
+    },
+    {
+      type: "slot",
+      slotName: "payment",
+      label: "付款信息",
+    },
+    {
+      type: "slot",
+      slotName: "delivery",
+      label: "交付信息",
+    },
+    {
+      type: "slot",
+      slotName: "commodity",
+      label: "商品信息",
+    },
+    {
+      type: "slot",
+      slotName: "file",
+      label: "交接单",
+    },
+    {
+      type: "slot",
+      slotName: "indication",
+      label: "包装指示",
+    },
+    {
+      type: "slot",
+      slotName: "otherCharge",
+      label: "其他收费项目",
+    },
+    {
+      type: "slot",
+      slotName: "offerMoney",
+    },
+    {
+      type: "slot",
+      slotName: "shipment",
+      label: "出货计划",
+    },
+  ];
+});
+const rules = ref({
+  contractTemplateId: [
+    { required: true, message: "请选择合同模板", trigger: "change" },
+  ],
+  buyCorporationId: [
+    { required: true, message: "请选择公司", trigger: "change" },
+  ],
+  countryId: [{ required: true, message: "请选择国家", trigger: "change" }],
+  sellAddress: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
+  buyAddress: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
+  buyContactName: [
+    { required: true, message: "请输入联系人", trigger: ["change", "blur"] },
+  ],
+  buyContactNumber: [
+    { required: true, message: "请输入联系电话", trigger: "blur" },
+  ],
+  productName: [{ required: true, message: "请输入商品名称", trigger: "blur" }],
+  productModel: [
+    { required: true, message: "请输入尺寸 cm*cm*cm", trigger: "blur" },
+  ],
+  quantity: [{ required: true, message: "请输入数量", trigger: "blur" }],
+  price: [{ required: true, message: "请输入单价", trigger: "blur" }],
+  packMethod: [{ required: true, message: "请输入包装方式", trigger: "blur" }],
+  amount: [{ required: true, message: "请输入金额", trigger: "blur" }],
+  payName: [
+    { required: true, message: "请输入收费项目", trigger: ["change", "blur"] },
+  ],
+  currency: [{ required: true, message: "请选择币种", trigger: "change" }],
+  effective: [{ required: true, message: "请输入报价有效期", trigger: "blur" }],
+  deliveryTime: [
+    { required: true, message: "请选择交货期限", trigger: "change" },
+  ],
+  paymentMethod: [
+    { required: true, message: "请选择付款方式", trigger: "change" },
+  ],
+  advanceRatio: [
+    { required: true, message: "请输入预付比例", trigger: "blur" },
+  ],
+  shroffAccountId: [
+    { required: true, message: "请选择收款账号", trigger: "change" },
+  ],
+  tradeMethods: [
+    { required: true, message: "请选择贸易方式", trigger: "change" },
+  ],
+  transportMethod: [
+    { required: true, message: "请选择运输方式", trigger: "change" },
+  ],
+  transportRemark: [
+    { required: true, message: "请输入运输说明", trigger: "blur" },
+  ],
+  remark: [{ required: true, message: "请输入付款条件", trigger: "blur" }],
+  rate: [{ required: true, message: "请输入汇率", trigger: "blur" }],
+});
+const getDict = () => {
+  proxy.post("/customer/selPage", { pageNum: 1, pageSize: 50 }).then((res) => {
+    customerList.value = res.rows.map((x) => ({
+      ...x,
+      label: x.name,
+      value: x.id,
+    }));
+  });
+  proxy
+    .getDictOne([
+      "inner_packaging_method_ehsd",
+      "outside_packaging_method_ehsd",
+      "account_currency",
+      "funds_payment_method",
+      "trade_mode",
+      "shipping_method",
+    ])
+    .then((res) => {
+      innerMethod.value = res["inner_packaging_method_ehsd"].map((x) => ({
+        label: x.dictValue,
+        value: x.dictKey,
+      }));
+      outsideMethod.value = res["outside_packaging_method_ehsd"].map((x) => ({
+        label: x.dictValue,
+        value: x.dictKey,
+      }));
+      accountCurrency.value = res["account_currency"].map((x) => ({
+        label: x.dictValue,
+        value: x.dictKey,
+      }));
+      fundsPaymentMethod.value = res["funds_payment_method"].map((x) => ({
+        label: x.dictValue,
+        value: x.dictKey,
+      }));
+      tradeMethods.value = res["trade_mode"].map((x) => ({
+        label: x.dictValue,
+        value: x.dictKey,
+      }));
+      shippingMethod.value = res["shipping_method"].map((x) => ({
+        label: x.dictValue,
+        value: x.dictKey,
+      }));
+    });
+  proxy
+    .post("/contractTemplate/page", { pageNum: 1, pageSize: 999 })
+    .then((res) => {
+      templateList.value = res.rows.map((item) => {
+        return {
+          ...item,
+          label: item.templateName,
+          value: item.id,
+        };
+      });
+    });
+  proxy.post("/corporation/page", { pageNum: 1, pageSize: 999 }).then((res) => {
+    corporationList.value = res.rows.map((item) => {
+      return {
+        ...item,
+        label: item.name,
+        value: item.id,
+      };
+    });
+  });
+
+  proxy
+    .post("/accountManagement/page", { pageNum: 1, pageSize: 999 })
+    .then((res) => {
+      accountList.value = res.rows.map((item) => {
+        return {
+          ...item,
+          label: item.alias,
+          value: item.id,
+        };
+      });
+    });
+};
+getDict();
+const changeTemplate = (val) => {
+  formData.data.sellCorporationId = "";
+  formData.data.sellContactName = "";
+  formData.data.sellContactNumber = "";
+  formData.data.sellCountryName = "";
+  formData.data.sellProvinceName = "";
+  formData.data.sellCityName = "";
+  formData.data.sellAddress = "";
+  if (val) {
+    proxy.post("/contractTemplate/detail", { id: val }).then((res) => {
+      formData.data.sellCorporationId = res.corporationId;
+      if (res.corporationId) {
+        proxy
+          .post("/corporation/detail", { id: res.corporationId })
+          .then((detailCorporation) => {
+            proxy
+              .post("/customizeArea/list", { parentId: "0" })
+              .then((resCountry) => {
+                let sellCountryData = resCountry.filter(
+                  (item) => item.id === detailCorporation.countryId
+                );
+                if (sellCountryData && sellCountryData.length > 0) {
+                  formData.data.sellCountryName =
+                    sellCountryData[0].chineseName;
+                } else {
+                  formData.data.sellCountryName = "";
+                }
+              });
+            if (detailCorporation.countryId) {
+              proxy
+                .post("/customizeArea/list", {
+                  parentId: detailCorporation.countryId,
+                })
+                .then((resProvince) => {
+                  let sellProvinceData = resProvince.filter(
+                    (item) => item.id === detailCorporation.provinceId
+                  );
+                  if (sellProvinceData && sellProvinceData.length > 0) {
+                    formData.data.sellProvinceName = sellProvinceData[0].name;
+                  } else {
+                    formData.data.sellProvinceName = "";
+                  }
+                });
+            } else {
+              formData.data.sellProvinceName = "";
+            }
+            if (detailCorporation.provinceId) {
+              proxy
+                .post("/customizeArea/list", {
+                  parentId: detailCorporation.provinceId,
+                })
+                .then((resCity) => {
+                  let sellCityData = resCity.filter(
+                    (item) => item.id === detailCorporation.cityId
+                  );
+                  if (sellCityData && sellCityData.length > 0) {
+                    formData.data.sellCityName = sellCityData[0].name;
+                  } else {
+                    formData.data.sellCityName = "";
+                  }
+                });
+            } else {
+              formData.data.sellCityName = "";
+            }
+            formData.data.sellAddress = detailCorporation.address;
+          });
+      }
+      formData.data.sellContactName = res.contactName;
+      formData.data.sellContactNumber = res.contactNumber;
+    });
+  }
+};
+const getCityData = (id, type, isChange) => {
+  proxy.post("/customizeArea/list", { parentId: id }).then((res) => {
+    if (type === "20") {
+      provinceData.value = res;
+      if (isChange) {
+        formData.data.provinceId = "";
+        formData.data.provinceName = "";
+        formData.data.cityId = "";
+        formData.data.cityName = "";
+      }
+    } else if (type === "30") {
+      cityData.value = res;
+      if (isChange) {
+        formData.data.cityId = "";
+        formData.data.cityName = "";
+      }
+    } else {
+      countryData.value = res;
+    }
+  });
+};
+getCityData("0");
+let auxiliaryData = ref([
+  {
+    label: "最近合同",
+    data: [],
+  },
+  {
+    label: "产品价格",
+    data: [],
+  },
+]);
+const emit = defineEmits(["auxiliaryChange"]);
+const getDecisionAids = () => {
+  let data = {
+    buyCorporationId: formData.data.buyCorporationId,
+    productIdList: [],
+  };
+  if (
+    formData.data.contractProductList &&
+    formData.data.contractProductList.length > 0
+  ) {
+    data.productIdList = formData.data.contractProductList.map(
+      (item) => item.productId
+    );
+  }
+  proxy.post("/contract/decisionAid", data).then((res) => {
+    if (res.lastContractList && res.lastContractList.length > 0) {
+      auxiliaryData.value[0].data = res.lastContractList.map((item) => {
+        return [
+          {
+            label: "合同编号",
+            value: item.code,
+            style: {
+              color: "#0084FF",
+            },
+            id: item.id,
+            num: 1,
+            // fn: () => {},
+          },
+          {
+            label: "下单日期",
+            value: item.createTime,
+            id: item.id,
+            num: 1,
+          },
+          {
+            label: "合同金额",
+            value: item.currency + item.amount,
+            id: item.id,
+            num: 1,
+          },
+        ];
+      });
+    } else {
+      auxiliaryData.value[0].data = [];
+    }
+    if (res.productPriceList && res.productPriceList.length > 0) {
+      auxiliaryData.value[1].data = res.productPriceList.map((item) => {
+        return [
+          {
+            label: "产品名称",
+            value: item.name,
+            id: item.id,
+            num: 1,
+          },
+          {
+            label: "最近价格",
+            value: item.lastPrice,
+            id: item.id,
+            num: 1,
+          },
+          {
+            label: "历史最高",
+            value: item.maxPrice,
+            id: item.id,
+            num: 1,
+          },
+          {
+            label: "历史最低",
+            value: item.minPrice,
+            id: item.id,
+            num: 1,
+          },
+        ];
+      });
+    } else {
+      auxiliaryData.value[1].data = [];
+    }
+    emit("auxiliaryChange", auxiliaryData.value);
+  });
+};
+
+const changeCustomer = (val) => {
+  formData.data.contractProductList = [];
+  formData.data.customerName = "";
+  formData.data.customerTel = "";
+  if (val) {
+    proxy.post("/customer/detail", { id: val }).then(
+      (res) => {
+        formData.data.buyCorporationName = res.name;
+        if (res.customerUserList && res.customerUserList.length > 0) {
+          formData.data.buyContactName = res.customerUserList[0].name;
+          if (res.customerUserList[0].contactJson) {
+            let contactJson = JSON.parse(res.customerUserList[0].contactJson);
+            if (contactJson && contactJson.length > 0) {
+              formData.data.buyContactNumber = contactJson[0].contactNo;
+            }
+          }
+          customerUserList.value = res.customerUserList.map((item) => {
+            return {
+              ...item,
+              value: item.name,
+            };
+          });
+        }
+        formData.data.countryId = res.countryId;
+        formData.data.provinceId = res.provinceId;
+        formData.data.cityId = res.cityId;
+        formData.data.buyPostalCode = res.zipCode;
+        formData.data.buyAddress = res.address;
+        getCityData(formData.data.countryId, "20");
+        if (formData.data.provinceId) {
+          getCityData(formData.data.provinceId, "30");
+        }
+      },
+      (err) => {
+        console.log(err);
+        formData.data.countryId = "";
+        formData.data.provinceId = "";
+        formData.data.cityId = "";
+        formData.data.buyPostalCode = "";
+        formData.data.buyAddress = "";
+      }
+    );
+  } else {
+    formData.data.countryId = "";
+    formData.data.provinceId = "";
+    formData.data.cityId = "";
+    formData.data.buyPostalCode = "";
+    formData.data.buyAddress = "";
+  }
+  getDecisionAids();
+};
+const createFilter = (queryString) => {
+  return (restaurant) => {
+    return (
+      restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
+    );
+  };
+};
+const querySearchPerson = (queryString, callback) => {
+  const results = queryString
+    ? customerUserList.value.filter(createFilter(queryString))
+    : customerUserList.value;
+  callback(results);
+};
+const handlePerson = (item) => {
+  formData.data.customerTel = item.phone;
+};
+
+const selectProduct = (goods) => {
+  if (goods && goods.id) {
+    let data = formData.data.contractProductList.filter(
+      (item) => item.productId === goods.id
+    );
+    if (data && data.length > 0) {
+      return ElMessage("该产品已添加");
+    }
+    let fileUrl = "";
+    if (goods.fileList && goods.fileList.length > 0) {
+      fileUrl = goods.fileList[0].fileUrl;
+    }
+    let packMethod = "";
+    if (goods.innerPackMethod) {
+      let innerPackMethod = goods.innerPackMethod.split(",");
+      innerPackMethod.map((item) => {
+        if (packMethod) {
+          packMethod =
+            packMethod + "," + proxy.dictValueLabel(item, innerMethod.value);
+        } else {
+          packMethod = proxy.dictValueLabel(item, innerMethod.value);
+        }
+      });
+    }
+    if (goods.outerPackMethod) {
+      let outerPackMethod = goods.outerPackMethod.split(",");
+      outerPackMethod.map((item) => {
+        if (packMethod) {
+          packMethod =
+            packMethod + "," + proxy.dictValueLabel(item, outsideMethod.value);
+        } else {
+          packMethod = proxy.dictValueLabel(item, outsideMethod.value);
+        }
+      });
+    }
+    if (
+      formData.data.contractProductList &&
+      formData.data.contractProductList.length > 0
+    ) {
+      formData.data.contractProductList.push({
+        fileUrl: fileUrl,
+        productId: goods.id,
+        productName: goods.name,
+        productModel:
+          goods.productLong + "*" + goods.productWide + "*" + goods.productHigh,
+        quantity: undefined,
+        price: undefined,
+        amount: "",
+        tradeMethods: "",
+        packMethod: packMethod,
+      });
+    } else {
+      formData.data.contractProductList = [
+        {
+          fileUrl: fileUrl,
+          productId: goods.id,
+          productName: goods.name,
+          productModel:
+            goods.productLong +
+            "*" +
+            goods.productWide +
+            "*" +
+            goods.productHigh,
+          quantity: undefined,
+          price: undefined,
+          amount: "",
+          tradeMethods: "",
+          packMethod: packMethod,
+        },
+      ];
+    }
+    formData.data.contractShipmentList.push({
+      productCode: goods.code,
+      productId: goods.id,
+      productName: goods.name,
+      shipmentTime: "",
+      quantity: undefined,
+    });
+    ElMessage({
+      message: "添加成功!",
+      type: "success",
+    });
+  } else {
+    return ElMessage("选择错误");
+  }
+  getDecisionAids();
+};
+const onPicture = (path) => {
+  window.open(path, "_blank");
+};
+const handleRemove = async (index, row) => {
+  formData.data.contractShipmentList =
+    formData.data.contractShipmentList.filter(
+      (item) => item.productId !== row.productId
+    );
+  await formData.data.contractProductList.splice(index, 1);
+  totalAmount();
+};
+const calculationAmount = () => {
+  nextTick(() => {
+    if (
+      formData.data.contractProductList &&
+      formData.data.contractProductList.length > 0
+    ) {
+      for (let i = 0; i < formData.data.contractProductList.length; i++) {
+        let money = 0;
+        if (
+          formData.data.contractProductList[i].quantity &&
+          formData.data.contractProductList[i].price
+        ) {
+          money = parseFloat(
+            Number(formData.data.contractProductList[i].quantity) *
+              Number(formData.data.contractProductList[i].price)
+          ).toFixed(2);
+        }
+        formData.data.contractProductList[i].amount = money;
+      }
+    }
+    nextTick(() => {
+      totalAmount();
+    });
+  });
+};
+const totalAmount = () => {
+  let money = 0;
+  if (
+    formData.data.contractProductList &&
+    formData.data.contractProductList.length > 0
+  ) {
+    for (let i = 0; i < formData.data.contractProductList.length; i++) {
+      if (formData.data.contractProductList[i].amount) {
+        money = parseFloat(
+          Number(money) + Number(formData.data.contractProductList[i].amount)
+        ).toFixed(2);
+      }
+    }
+  }
+  if (
+    formData.data.contractProjectList &&
+    formData.data.contractProjectList.length > 0
+  ) {
+    for (let i = 0; i < formData.data.contractProjectList.length; i++) {
+      if (formData.data.contractProjectList[i].amount) {
+        money = parseFloat(
+          Number(money) + Number(formData.data.contractProjectList[i].amount)
+        ).toFixed(2);
+      }
+    }
+  }
+  formData.data.amount = money;
+};
+const clickAdd = () => {
+  if (
+    formData.data.contractProjectList &&
+    formData.data.contractProjectList.length > 0
+  ) {
+    formData.data.contractProjectList.push({
+      payName: "",
+      amount: undefined,
+      remark: "",
+    });
+  } else {
+    formData.data.contractProjectList = [
+      { payName: "", amount: undefined, remark: "" },
+    ];
+  }
+};
+const handleDelete = async (index) => {
+  await formData.data.contractProjectList.splice(index, 1);
+  totalAmount();
+  getDecisionAids();
+};
+const querySearch = (queryString, callback) => {
+  proxy.post("/quotationPay/page", { payName: queryString }).then((res) => {
+    if (res.rows && res.rows.length > 0) {
+      res.rows = res.rows.map((item) => {
+        return {
+          ...item,
+          value: item.payName,
+        };
+      });
+      callback(res.rows);
+    } else {
+      callback([]);
+    }
+  });
+};
+const handleSubmit = async () => {
+  let status = await submit.value.handleSubmit(() => {});
+  if (status) {
+    if (
+      !(
+        formData.data.contractProductList &&
+        formData.data.contractProductList.length > 0
+      )
+    ) {
+      ElMessage("请添加至少一件商品");
+      return false;
+    }
+    if (formData.data.fileList && formData.data.fileList.length > 0) {
+      for (let i = 0; i < formData.data.fileList.length; i++) {
+        if (formData.data.fileList[i].raw.uploadState) {
+          ElMessage("文件上传中,请稍后提交");
+          return false;
+        }
+      }
+    }
+    if (
+      formData.data.packageFileList &&
+      formData.data.packageFileList.length > 0
+    ) {
+      for (let i = 0; i < formData.data.packageFileList.length; i++) {
+        if (formData.data.packageFileList[i].raw.uploadState) {
+          ElMessage("文件上传中,请稍后提交");
+          return false;
+        }
+      }
+    }
+    if (
+      formData.data.contractShipmentList &&
+      formData.data.contractShipmentList.length > 0
+    ) {
+      for (let i = 0; i < formData.data.contractProductList.length; i++) {
+        let data = formData.data.contractShipmentList.filter(
+          (item) =>
+            item.productId === formData.data.contractProductList[i].productId
+        );
+        if (data && data.length > 0) {
+          let quantity = 0;
+          for (let j = 0; j < data.length; j++) {
+            quantity = parseFloat(Number(quantity) + Number(data[j].quantity));
+          }
+          if (quantity > formData.data.contractProductList[i].quantity) {
+            ElMessage("出货数量不能大于商品数量");
+            return false;
+          }
+        }
+      }
+    }
+    return true;
+  } else {
+    setTimeout(() => {
+      const errorDiv = document.getElementsByClassName("is-error");
+      errorDiv[0].scrollIntoView();
+    }, 0);
+  }
+  return status;
+};
+
+// 接收父组件的传值
+const props = defineProps({
+  queryData: Object,
+});
+const clickCustomerProduct = () => {
+  if (!formData.data.buyCorporationId) {
+    return ElMessage("请先选择客户");
+  }
+  openProductCustomer.value = true;
+};
+
+const loadingSearch = ref(false);
+const remoteMethod = (keyword) => {
+  if (keyword && typeof keyword === "string") {
+    loadingSearch.value = true;
+    proxy.post("/customer/selPage", { keyword }).then((res) => {
+      customerList.value = res.rows.map((x) => ({
+        ...x,
+        label: x.name,
+        value: x.id,
+      }));
+      loadingSearch.value = false;
+    });
+  }
+  return;
+};
+
+const getFormData = () => {
+  return proxy.deepClone(formData.data);
+};
+// 向父组件暴露
+defineExpose({
+  getFormData,
+  handleSubmit,
+});
+const changeShroffAccount = (val) => {
+  if (val) {
+    let data = accountList.value.filter((item) => item.value === val);
+    if (data && data.length > 0) {
+      formData.data.beneficiaryName = data[0].beneficiaryName;
+      formData.data.beneficiaryBank = data[0].beneficiaryBank;
+      formData.data.beneficiaryBankAddress = data[0].beneficiaryBankAddress;
+      formData.data.beneficiaryAccountNumber = data[0].beneficiaryAccountNumber;
+      formData.data.swiftCode = data[0].swiftCode;
+      formData.data.beneficiaryAddress = data[0].beneficiaryAddress;
+    }
+  }
+};
+const changeActiveName = () => {
+  if (activeName.value) {
+    activeName.value = "";
+  } else {
+    activeName.value = "1";
+  }
+};
+const uploadFile = async (file) => {
+  const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
+  uploadData.value = res.uploadBody;
+  file.id = res.id;
+  file.fileName = res.fileName;
+  file.fileUrl = res.fileUrl;
+  file.uploadState = true;
+  return true;
+};
+const indicationUploadFile = async (file) => {
+  const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
+  indicationUploadData.value = res.uploadBody;
+  file.id = res.id;
+  file.fileName = res.fileName;
+  file.fileUrl = res.fileUrl;
+  file.uploadState = true;
+  return true;
+};
+const handleSuccess = (any, UploadFile) => {
+  UploadFile.raw.uploadState = false;
+};
+const onPreviewFile = (file) => {
+  window.open(file.raw.fileUrl, "_blank");
+};
+const clickSplit = (item) => {
+  formData.data.contractShipmentList.push({
+    productCode: item.code,
+    productId: item.productId,
+    productName: item.productName,
+    shipmentTime: "",
+    quantity: undefined,
+  });
+};
+const clickDelete = (index) => {
+  formData.data.contractShipmentList.splice(index, 1);
+};
+watch(
+  props.queryData,
+  () => {
+    formOption.disabled = judgeStatus();
+    return;
+    if (
+      props.queryData &&
+      ["10", "20", "30"].includes(route.query.processType)
+    ) {
+      for (var text in props.queryData) {
+        if (text === "fileList" || text === "packageFileList") {
+          if (props.queryData[text] && props.queryData[text].length > 0) {
+            formData.data[text] = props.queryData[text].map((item) => {
+              return {
+                raw: item,
+                name: item.fileName,
+                url: item.fileUrl,
+              };
+            });
+          }
+        } else {
+          formData.data[text] = props.queryData[text];
+        }
+      }
+      if (formData.data.countryId) {
+        getCityData(formData.data.countryId, "20");
+      }
+      if (formData.data.provinceId) {
+        getCityData(formData.data.provinceId, "30");
+      }
+      getDecisionAids();
+    }
+  },
+  {
+    deep: true,
+  }
+);
+
+onMounted(() => {
+  formOption.disabled = judgeStatus();
+  console.log(route.query, "qqda");
+  if (route.query && route.query.businessId && route.query.processType) {
+    let businessId = route.query.businessId;
+    proxy.post("/contract/detail", { id: businessId }).then((res) => {
+      if (!res.fileList) {
+        res.fileList = [];
+      }
+      if (!res.packageFileList) {
+        res.packageFileList = [];
+      }
+      res.countryId = res.buyCountryId;
+      res.provinceId = res.buyProvinceId;
+      res.cityId = res.buyCityId;
+      for (const key in res) {
+        formData.data[key] = res[key];
+      }
+      proxy
+        .post("/fileInfo/getList", {
+          businessIdList: [businessId],
+        })
+        .then((fileObj) => {
+          if (fileObj[businessId] && fileObj[businessId].length > 0) {
+            formData.data.fileList = fileObj[businessId]
+              .filter((x) => x.businessType === "1")
+              .map((x) => ({ raw: x, name: x.fileName, url: x.fileUrl }));
+            formData.data.packageFileList = fileObj[businessId]
+              .filter((x) => x.businessType === "2")
+              .map((x) => ({ raw: x, name: x.fileName, url: x.fileUrl }));
+          }
+        });
+      if (
+        formData.data.contractProductList &&
+        formData.data.contractProductList.length > 0
+      ) {
+        for (let i = 0; i < formData.data.contractProductList.length; i++) {
+          const e = formData.data.contractProductList[i];
+          if (e.ehsdJson) {
+            let obj = JSON.parse(e.ehsdJson);
+            e.packMethod = obj.packMethod;
+            e.tradeMethods = obj.tradeMethods;
+          }
+        }
+        let ids = formData.data.contractProductList.map((x) => x.productId);
+        proxy
+          .post("/fileInfo/getList", {
+            businessIdList: ids,
+          })
+          .then((fileObj) => {
+            for (let i = 0; i < formData.data.contractProductList.length; i++) {
+              const e = formData.data.contractProductList[i];
+              for (const key in fileObj) {
+                if (e.productId === key) {
+                  e.fileList = fileObj[key] || [];
+                  if (e.fileList && e.fileList.length > 0) {
+                    e.fileUrl = e.fileList[0].fileUrl;
+                  }
+                }
+              }
+            }
+          });
+      }
+      if (formData.data.countryId) {
+        getCityData(formData.data.countryId, "20");
+      }
+      if (formData.data.provinceId) {
+        getCityData(formData.data.provinceId, "30");
+      }
+    });
+  } else if (
+    route.query &&
+    route.query.businessId &&
+    !route.query.processType
+  ) {
+    let businessId = route.query.businessId;
+    proxy.post("/contract/detail", { id: businessId }).then((res) => {
+      if (!res.fileList) {
+        res.fileList = [];
+      }
+      if (!res.packageFileList) {
+        res.packageFileList = [];
+      }
+      res.countryId = res.buyCountryId;
+      res.provinceId = res.buyProvinceId;
+      res.cityId = res.buyCityId;
+      for (const key in res) {
+        formData.data[key] = res[key];
+      }
+      formData.data.oldContractId = formData.data.id;
+      delete formData.data.id;
+      delete formData.data.code;
+      proxy
+        .post("/fileInfo/getList", {
+          businessIdList: [businessId],
+        })
+        .then((fileObj) => {
+          if (fileObj[businessId] && fileObj[businessId].length > 0) {
+            formData.data.fileList = fileObj[businessId]
+              .filter((x) => x.businessType === "1")
+              .map((x) => ({ raw: x, name: x.fileName, url: x.fileUrl }));
+            formData.data.packageFileList = fileObj[businessId]
+              .filter((x) => x.businessType === "2")
+              .map((x) => ({ raw: x, name: x.fileName, url: x.fileUrl }));
+          }
+        });
+      if (
+        formData.data.contractProductList &&
+        formData.data.contractProductList.length > 0
+      ) {
+        for (let i = 0; i < formData.data.contractProductList.length; i++) {
+          const e = formData.data.contractProductList[i];
+          if (e.ehsdJson) {
+            let obj = JSON.parse(e.ehsdJson);
+            e.packMethod = obj.packMethod;
+            e.tradeMethods = obj.tradeMethods;
+          }
+        }
+        let ids = formData.data.contractProductList.map((x) => x.productId);
+        proxy
+          .post("/fileInfo/getList", {
+            businessIdList: ids,
+          })
+          .then((fileObj) => {
+            for (let i = 0; i < formData.data.contractProductList.length; i++) {
+              const e = formData.data.contractProductList[i];
+              for (const key in fileObj) {
+                if (e.productId === key) {
+                  e.fileList = fileObj[key] || [];
+                  if (e.fileList && e.fileList.length > 0) {
+                    e.fileUrl = e.fileList[0].fileUrl;
+                  }
+                }
+              }
+            }
+          });
+      }
+      // if (
+      //   formData.data.contractProjectList &&
+      //   formData.data.contractProjectList.length > 0
+      // ) {
+      //   formData.data.contractProjectList =
+      //     formData.data.contractProjectList.map((x) => {
+      //       delete x.id;
+      //       return x;
+      //     });
+      // }
+      // if (
+      //   formData.data.contractShipmentList &&
+      //   formData.data.contractShipmentList.length > 0
+      // ) {
+      //   formData.data.contractShipmentList =
+      //     formData.data.contractShipmentList.map((x) => {
+      //       delete x.id;
+      //       return x;
+      //     });
+      // }
+      if (formData.data.countryId) {
+        getCityData(formData.data.countryId, "20");
+      }
+      if (formData.data.provinceId) {
+        getCityData(formData.data.provinceId, "30");
+      }
+    });
+  }
+});
+</script>
+
+<style lang="scss" scoped>
+::v-deep(.el-input-number .el-input__inner) {
+  text-align: left;
+}
+.pic {
+  object-fit: contain;
+  width: 50px;
+  height: 50px;
+  cursor: pointer;
+  vertical-align: middle;
+}
+.shrinkPadding {
+  padding-right: 0 !important;
+}
+.hideCollapse {
+  margin-top: -62px;
+  border: 0 !important;
+}
+::v-deep(.el-collapse-item__arrow) {
+  display: none !important;
+}
+::v-deep(.el-collapse-item__wrap) {
+  border: 0 !important;
+}
+::v-deep(.el-collapse-item__header) {
+  border: 0 !important;
+}
+</style>

+ 4 - 2
src/views/EHSD/productLibrary/companyProduct/index.vue

@@ -229,7 +229,7 @@ const config = computed(() => {
         prop: "name",
       },
     },
- 
+
     {
       attrs: {
         label: "尺寸",
@@ -368,7 +368,7 @@ const formConfig = computed(() => {
       itemWidth: 100,
       disabled: false,
     },
-  
+
     {
       type: "slot",
       slotName: "productPic",
@@ -444,6 +444,7 @@ const formConfig = computed(() => {
       itemWidth: 50,
       multiple: true,
       data: innerMethon.value,
+      filterable: true,
       placeholder: "内包装方式",
       style: {
         width: "100%",
@@ -458,6 +459,7 @@ const formConfig = computed(() => {
       itemWidth: 50,
       multiple: true,
       data: outsideMethon.value,
+      filterable: true,
       placeholder: "外包装方式",
       style: {
         width: "100%",

+ 28 - 3
src/views/EHSD/saleContract/contractEHSD/index.vue

@@ -246,7 +246,7 @@ const config = computed(() => {
       attrs: {
         label: "合同号",
         slot: "code",
-        width: 180,
+        width: 140,
       },
     },
     {
@@ -263,7 +263,7 @@ const config = computed(() => {
       attrs: {
         label: "业务员",
         prop: "createUser",
-        width: 140,
+        width: 100,
       },
       render(type) {
         return proxy.dictValueLabel(type, userList.value);
@@ -280,7 +280,7 @@ const config = computed(() => {
       attrs: {
         label: "客户名称",
         slot: "buyCorporationName",
-        "min-width": 220,
+        "min-width": 140,
       },
     },
     // {
@@ -378,6 +378,19 @@ const config = computed(() => {
               clickHandoverSlip(row);
             },
           },
+          row.status == 30
+            ? {
+                attrs: {
+                  label: "变更",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  clickAlteration(row);
+                },
+              }
+            : {},
           {
             attrs: {
               label: "打印",
@@ -767,6 +780,18 @@ const printObj = ref({
     "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css",
   extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
 });
+
+const clickAlteration = (row) => {
+  proxy.$router.push({
+    path: "/platform_manage/process/processApproval",
+    query: {
+      flowKey: "contract_update_flow",
+      flowName: "销售合同变更流程",
+      random: proxy.random(),
+      businessId: row.id,
+    },
+  });
+};
 </script>
 
 <style lang="scss" scoped>

+ 18 - 7
src/views/process/processApproval/index.vue

@@ -24,12 +24,20 @@
         <template v-else-if="flowForm.flowKey == 'contract_flow'">
           <ContractEHSD
             ref="makeDom"
-            v-if="flowForm.tenantType === 'EHSD'"
             :queryData="queryData.data"
             @auxiliaryChange="(e) => getAuxiliaryData(e)"
           ></ContractEHSD>
         </template>
 
+        <!-- 销售合同变更 -->
+        <template v-else-if="flowForm.flowKey == 'contract_update_flow'">
+          <ContractChangeEHSD
+            ref="makeDom"
+            :queryData="queryData.data"
+            @auxiliaryChange="(e) => getAuxiliaryData(e)"
+          ></ContractChangeEHSD>
+        </template>
+
         <!-- 申购 -->
         <SendSubscribe
           ref="makeDom"
@@ -212,6 +220,8 @@ import auxiliary from "./auxiliary";
 import PriceSheetEHSD from "@/components/process/EHSD/PriceSheet";
 // 销售合同-EHSD
 import ContractEHSD from "@/components/process/EHSD/Contract";
+// 销售合同变更-EHSD
+import ContractChangeEHSD from "@/components/process/EHSD/ContractChange";
 // 样品单-EHSD
 import SampleEHSD from "@/components/process/EHSD/Sample";
 // 采购交接单-EHSD
@@ -483,12 +493,13 @@ const skipPage = () => {
           path: "/ehsd/saleContract/quotation",
         });
       }
-    } else if (flowForm.flowKey == "contract_flow") {
-      if (flowForm.tenantType === "EHSD") {
-        router.replace({
-          path: "/ehsd/saleContract/contract",
-        });
-      }
+    } else if (
+      flowForm.flowKey == "contract_flow" ||
+      flowForm.flowKey == "contract_update_flow"
+    ) {
+      router.replace({
+        path: "/ehsd/saleContract/contract",
+      });
     } else if (flowForm.flowKey == "sample_flow") {
       router.replace({
         path: "/ehsd/saleContract/sample",