cz 1 рік тому
батько
коміт
0b088ea3eb
46 змінених файлів з 927 додано та 231 видалено
  1. 2 2
      src/components/contractCom/productContract.vue
  2. 2 2
      src/components/contractCom/selectContract.vue
  3. 2 2
      src/components/contractCom/selectSample.vue
  4. 1 1
      src/components/detailCom/document/index.vue
  5. 7 4
      src/components/headerBar/header-bar.vue
  6. 1 1
      src/components/process/SF/Purchase.vue
  7. 1 1
      src/components/process/SF/PurchaseChange.vue
  8. 3 3
      src/components/process/SendFunds.vue
  9. 2 2
      src/components/process/SendSubscribe.vue
  10. 1 1
      src/components/product/SelectAllGood.vue
  11. 2 2
      src/components/product/SelectProduct.vue
  12. 3 3
      src/views/EHSD/procurement/purchasedEHSD/index.vue
  13. 2 2
      src/views/EHSD/procurement/purchasedEHSD/selectPurchased.vue
  14. 3 3
      src/views/EHSD/productLibrary/companyProduct/index.vue
  15. 34 29
      src/views/EHSD/saleContract/contractEHSD/index.vue
  16. 1 1
      src/views/EHSD/saleContract/priceSheetEHSD/index.vue
  17. 622 65
      src/views/EHSD/saleContract/priceSheetEstimate/index.vue
  18. 2 2
      src/views/EHSD/saleContract/sampleEHSD/index.vue
  19. 103 21
      src/views/MES/processScheduling/index.vue
  20. 40 3
      src/views/MES/productionOrder/index.vue
  21. 31 11
      src/views/MES/productionTask/index.vue
  22. 4 0
      src/views/MES/productionWorkOrder/index.vue
  23. 1 1
      src/views/customer/portrait/com/SalesDetails.vue
  24. 1 1
      src/views/finance/fundManage/account/index.vue
  25. 2 2
      src/views/finance/fundManage/accountPayment/index.vue
  26. 1 1
      src/views/finance/fundManage/accountStatement/index.vue
  27. 1 1
      src/views/finance/fundManage/flow/index.vue
  28. 2 2
      src/views/finance/fundManage/funds/index.vue
  29. 2 2
      src/views/finance/fundManage/offsetRecord/index.vue
  30. 4 4
      src/views/iot/base/equipment/index.vue
  31. 1 0
      src/views/product/material/index.vue
  32. 2 2
      src/views/purchaseManage/purchaseManage/handoverSlip/index.vue
  33. 2 2
      src/views/purchaseManage/purchaseManage/handoverSlipOne/index.vue
  34. 2 2
      src/views/purchaseManage/purchaseManage/purchase/index.vue
  35. 2 2
      src/views/purchaseManage/purchaseManage/subscribe/index.vue
  36. 4 4
      src/views/purchaseManage/supplier/supplier/index.vue
  37. 8 1
      src/views/purchaseSales/outAndInWarehouse/inventoryInquiry/index.vue
  38. 2 2
      src/views/purchaseSales/outAndInWarehouse/snapshot/index.vue
  39. 11 31
      src/views/purchaseSales/outAndInWarehouse/waitingForDelivery/index.vue
  40. 3 3
      src/views/purchaseSales/warehouseConfig/warehouse/index.vue
  41. 1 1
      src/views/salesMange/afterSales/SelectContractProduct.vue
  42. 1 1
      src/views/salesMange/saleContract/contract/index.vue
  43. 1 1
      src/views/salesMange/saleContract/contractSelect/index.vue
  44. 2 2
      src/views/salesMange/saleContract/priceSheet/index.vue
  45. 1 1
      src/views/salesMange/saleContract/serviceContract/index.vue
  46. 1 1
      src/views/salesMange/shipmentMange/document/index.vue

+ 2 - 2
src/components/contractCom/productContract.vue

@@ -150,7 +150,7 @@ const selectConfig = computed(() => {
       data: status.value,
     },
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "sellCorporationId",
       data: corporationList.value,
     },
@@ -167,7 +167,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 2 - 2
src/components/contractCom/selectContract.vue

@@ -145,7 +145,7 @@ const selectConfig = computed(() => {
       data: status.value,
     },
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "sellCorporationId",
       data: corporationList.value,
     },
@@ -162,7 +162,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 2 - 2
src/components/contractCom/selectSample.vue

@@ -168,7 +168,7 @@ const selectConfig = computed(() => {
       data: status.value,
     },
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "sellCorporationId",
       data: corporationList.value,
     },
@@ -191,7 +191,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 1 - 1
src/components/detailCom/document/index.vue

@@ -1319,7 +1319,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationName",
         "min-width": 260,
       },

+ 7 - 4
src/components/headerBar/header-bar.vue

@@ -343,7 +343,7 @@
         </div>
         <div class="notice">
           <div class="item" v-for="(item,index) in noticeData" :key="item.id">
-            <svg-icon :icon-class="item.type==1?'huochuan1':'huoche1'" className="icon" />
+            <svg-icon :icon-class="item.type==1?'huochuan1':'huoche1'" :className="item.type==1?'icon1':'icon'" />
             <div class="text">
               {{item.type==1?item.shipmentTime:item.arrivalTime}}单号为
               &nbsp;<span class="code" @click="openDetails(item)">{{item.code}}</span>&nbsp;
@@ -907,9 +907,12 @@ const showSearchStyle = (name) => {
       background: #616161;
     }
     .icon {
-      // font-size: 20px;
-      width: 40px;
-      height: 20px;
+      width: 50px;
+      height: 50px;
+    }
+    .icon1 {
+      width: 42px;
+      height: 50px;
     }
     .text {
       margin-left: 10px;

+ 1 - 1
src/components/process/SF/Purchase.vue

@@ -997,7 +997,7 @@ const getAllData = (businessId) => {
       res.provinceId = res.sellProvinceId;
       res.cityId = res.sellCityId;
       if (res.grossProfitInfoList && res.grossProfitInfoList.length > 0) {
-        $bus.emit("getGrossData", res.grossProfitInfoList);
+        // $bus.emit("getGrossData", res.grossProfitInfoList);
       }
       for (let key in res) {
         if (!["ehsdPurchaseProductList", "purchaseArrivalList"].includes(key)) {

+ 1 - 1
src/components/process/SF/PurchaseChange.vue

@@ -997,7 +997,7 @@ const getAllData = (businessId) => {
       res.provinceId = res.sellProvinceId;
       res.cityId = res.sellCityId;
       if (res.grossProfitInfoList && res.grossProfitInfoList.length > 0) {
-        $bus.emit("getGrossData", res.grossProfitInfoList);
+        // $bus.emit("getGrossData", res.grossProfitInfoList);
       }
       for (let key in res) {
         if (!["ehsdPurchaseProductList", "purchaseArrivalList"].includes(key)) {

+ 3 - 3
src/components/process/SendFunds.vue

@@ -9,7 +9,7 @@
       </div>
       <el-row :gutter="20">
         <el-col :span="6">
-          <el-form-item label="归属公司" prop="corporationId">
+          <el-form-item label="业务公司" prop="corporationId">
             <el-select v-model="formData.data.corporationId" placeholder="请选择" filterable style="width: 100%" @change="changeType">
               <el-option v-for="item in companyData" :label="item.name" :value="item.id">
               </el-option>
@@ -791,7 +791,7 @@ const formData = reactive({
 });
 let rules = ref({
   corporationId: [
-    { required: true, message: "请选择归属公司", trigger: "change" },
+    { required: true, message: "请选择业务公司", trigger: "change" },
   ],
   departmentId: [
     { required: true, message: "请选择归属部门", trigger: "change" },
@@ -947,7 +947,7 @@ const advanceList = ref([]);
 const contractList = ref([]);
 const bankList = ref([]);
 const getDictData = () => {
-  // 获取归属公司数据
+  // 获取业务公司数据
   proxy
     .post("/corporation/page", { pageNum: 1, pageSize: 9999 })
     .then((res) => {

+ 2 - 2
src/components/process/SendSubscribe.vue

@@ -7,7 +7,7 @@
       </div>
       <el-row :gutter="10">
         <el-col :span="6">
-          <el-form-item label="归属公司" prop="corporationId">
+          <el-form-item label="业务公司" prop="corporationId">
             <el-select v-model="formData.data.corporationId" placeholder="请选择" filterable style="width: 100%">
               <el-option v-for="item in companyData" :label="item.name" :value="item.id">
               </el-option>
@@ -105,7 +105,7 @@ let formData = reactive({
 });
 let rules = ref({
   corporationId: [
-    { required: true, message: "请选择归属公司", trigger: "change" },
+    { required: true, message: "请选择业务公司", trigger: "change" },
   ],
   deptName: [{ required: true, message: "请输入申购部门", trigger: "blur" }],
   subcribeName: [

+ 1 - 1
src/components/product/SelectAllGood.vue

@@ -94,7 +94,7 @@ const companyData = ref([]);
 const selectConfig = computed(() => {
   return [
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "companyId",
       data: companyData.value,
       isShowAll: false,

+ 2 - 2
src/components/product/SelectProduct.vue

@@ -183,7 +183,7 @@ let rules = ref({
 
 const selectConfig = computed(() => [
   // {
-  //   label: "归属公司",
+  //   label: "业务公司",
   //   prop: "companyId",
   //   data: companyData.value,
   // },
@@ -200,7 +200,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 150,
       },

+ 3 - 3
src/views/EHSD/procurement/purchasedEHSD/index.vue

@@ -164,7 +164,7 @@ const companyData = ref([]);
 const selectConfig = computed(() => {
   return [
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "companyId",
       data: companyData.value,
     },
@@ -184,7 +184,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 130,
       },
@@ -265,7 +265,7 @@ const config = computed(() => {
       renderHTML(row) {
         return proxy.isCurrentCompanyData(row.companyId)
           ? [
-              row.status == 30
+              row.status == 30 && row.arrivalStatus == 0
                 ? {
                     attrs: {
                       label: "变更",

+ 2 - 2
src/views/EHSD/procurement/purchasedEHSD/selectPurchased.vue

@@ -119,7 +119,7 @@ const companyData = ref([]);
 const selectConfig = computed(() => {
   return [
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "companyId",
       data: companyData.value,
     },
@@ -139,7 +139,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 130,
       },

+ 3 - 3
src/views/EHSD/productLibrary/companyProduct/index.vue

@@ -297,7 +297,7 @@ const props = defineProps({
 });
 const selectConfig = computed(() => [
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "companyId",
     data: companyData.value,
   },
@@ -314,7 +314,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 150,
       },
@@ -499,7 +499,7 @@ const formConfig = computed(() => {
     {
       type: "treeSelect",
       prop: "companyId",
-      label: "归属公司",
+      label: "业务公司",
       data: treeDataOne.value,
       propsTreeLabel: "deptName",
       propsTreeValue: "deptId",

+ 34 - 29
src/views/EHSD/saleContract/contractEHSD/index.vue

@@ -323,6 +323,10 @@ const produceStatusData = ref([
     value: "2",
   },
   {
+    label: "出库中",
+    value: "5",
+  },
+  {
     label: "已出库",
     value: "10",
   },
@@ -739,33 +743,33 @@ const config = computed(() => {
                     },
                   }
                 : {},
-              row.status == 30 &&
-              row.outboundStatus == 0 &&
-              row.produceStatus == 2
-                ? {
-                    attrs: {
-                      label: "销售出库",
-                      type: "primary",
-                      text: true,
-                    },
-                    el: "button",
-                    click() {
-                      proxy
-                        .msgConfirm()
-                        .then((res) => {
-                          proxy
-                            .post("/contract/saleOutbound", {
-                              id: row.id,
-                            })
-                            .then((res) => {
-                              proxy.msgTip("操作成功", 1);
-                              getList();
-                            });
-                        })
-                        .catch((err) => {});
-                    },
-                  }
-                : {},
+              // row.status == 30 &&
+              // row.outboundStatus == 0 &&
+              // row.produceStatus == 2
+              //   ? {
+              //       attrs: {
+              //         label: "销售出库",
+              //         type: "primary",
+              //         text: true,
+              //       },
+              //       el: "button",
+              //       click() {
+              //         proxy
+              //           .msgConfirm()
+              //           .then((res) => {
+              //             proxy
+              //               .post("/contract/saleOutbound", {
+              //                 id: row.id,
+              //               })
+              //               .then((res) => {
+              //                 proxy.msgTip("操作成功", 1);
+              //                 getList();
+              //               });
+              //           })
+              //           .catch((err) => {});
+              //       },
+              //     }
+              //   : {},
               row.status == 30 && row.produceStatus != 10
                 ? {
                     attrs: {
@@ -796,8 +800,9 @@ const config = computed(() => {
               // row.orderDistributeStatus == 1
               //   ? {}
               //   :
-              row.status == 10 ||
-              (row.status == 30 && Number(row.sumClaimMoney) == 0)
+              (row.status == 10 ||
+                (row.status == 30 && Number(row.sumClaimMoney) == 0)) &&
+              (row.produceStatus == 0 || row.produceStatus == null)
                 ? {
                     attrs: {
                       label: "作废",

+ 1 - 1
src/views/EHSD/saleContract/priceSheetEHSD/index.vue

@@ -396,7 +396,7 @@
     </el-dialog>
 
     <el-dialog v-if="openProductCompany" v-model="openProductCompany" title="产品库" width="90%" append-to-body>
-      <SelectProduct @selectProduct="selectProduct" :companyId="companyId" :isRawMaterial="'1'"></SelectProduct>
+      <SelectProduct @selectProduct="selectProduct" :companyId="companyId" :isRawMaterial="'1'" :disablePerm="'1'"></SelectProduct>
       <template #footer>
         <el-button @click="openProductCompany = false" size="defualt" v-debounce>关 闭</el-button>
       </template>

+ 622 - 65
src/views/EHSD/saleContract/priceSheetEstimate/index.vue

@@ -54,9 +54,260 @@
 
     </byTable>
 
-    <el-dialog v-if="openAddDialog" v-model="openAddDialog" title="报价评估" width="90%" append-to-body>
-      <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="formDom">
-        <template #chart>
+    <el-dialog v-if="openAddDialog" v-model="openAddDialog" title="报价评估" width="95%" append-to-body>
+      <div style="height:calc(100vh - 215px)" class="box">
+        <div class="left">
+          <el-card style="width:100%;margin-bottom:15px" v-for="(item,index) in quotationProductList" :key="index">
+            <div style="text-align:right">
+              <el-button plain type="primary" @click="handleReportPrice(item)">报价</el-button>
+            </div>
+            <el-table :data="[item]" style="width: 100%;">
+              <el-table-column type="expand" width="50" align="center">
+                <template #default="scope">
+                  <div>
+                    <div style="margin-bottom:10px;">
+                      <TitleInfo content='BOM单:'></TitleInfo>
+                    </div>
+                    <el-table :data="scope.row.quotationProductBomList" style="width: 100%;" border class="bom-table">
+                      <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 prop="productCode" label="物料编码" width="190" />
+                      <el-table-column prop="productName" label="物料名称" min-width="200" />
+                      <el-table-column label="尺寸 (cm)" width="150">
+                        <template #default="{ row, $index }">
+                          <div style="width: 100%">
+                            {{row.productLength}} * {{row.productWidth}} * {{row.productHeight}}
+                          </div>
+                        </template>
+                      </el-table-column>
+                      <!-- <el-table-column prop="quantity" label="数量" width="80">
+                      </el-table-column>
+                      <el-table-column prop="allQuantity" label="总量" width="80" />
+                      <el-table-column label="单价" width="110">
+                        <template #default="{ row, $index }">
+                          <div style="width: 100%">
+                            <el-form-item :prop="'quotationProductList.' + scope.$index + '.quotationProductBomList.' + $index + '.price'"
+                                          :rules="rules.price" :inline-message="true" class="margin-b-0 wid100">
+                              <el-input-number onmousewheel="return false;" v-model="row.price" placeholder="请输入" style="width: 100%" :precision="2"
+                                               :controls="false" :min="0" @change="totalAmount()" />
+                            </el-form-item>
+                          </div>
+                        </template>
+                      </el-table-column>
+                      <el-table-column prop="amount" label="小计" width="110">
+                        <template #default="{ row, $index }">
+                          <div style="width: 100%">
+                            ¥ {{row.amount}}
+                          </div>
+                        </template>
+                      </el-table-column> -->
+                      <el-table-column label="备注" width="180" prop="remark">
+                      </el-table-column>
+                    </el-table>
+                  </div>
+                </template>
+              </el-table-column>
+              <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 prop="productCode" label="商品编码" width="190" />
+              <el-table-column prop="productName" label="商品名称" min-width="200" />
+              <el-table-column label="尺寸 (cm)" width="150">
+                <template #default="{ row, $index }">
+                  <div style="width: 100%">
+                    {{row.productLength}} * {{row.productWidth}} * {{row.productHeight}}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="productColor" label="颜色" width="100" />
+              <el-table-column label="数量" width="120" prop="quantity">
+              </el-table-column>
+              <el-table-column label="单价" width="120" prop="price" fixed="right">
+                <template #default="{ row, $index }">
+                  <div style="width: 100%;">
+                    <span :style="{
+                      color:row.price?'red':''
+                    }">¥{{row.price}}</span>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="amount" label="小计" width="120" fixed="right">
+                <template #default="{ row, $index }">
+                  <div style="width: 100%">
+                    <span :style="{
+                      color:row.price?'red':''
+                    }">¥{{row.amount}}</span>
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-card>
+        </div>
+        <div class="right">
+          <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="formDom"
+                  v-if="formData.data.quotationProductId" v-loading="submitLoading">
+            <template #quotationDetail>
+              <div style="width:100%">
+                <div style="text-align:center">
+                  正在对 <span style="color:red">{{formData.data.productCode}},{{formData.data.productName}}({{formData.data.quantity}})</span> 进行报价
+                </div>
+                <table class="table" border>
+                  <thead>
+                    <tr>
+                      <th style="width:10%">
+                        类型
+                      </th>
+                      <th style="width:20%">
+                        编码
+                      </th>
+                      <th style="width:20%">
+                        名称
+                      </th>
+                      <th style="width:16%" class="align-right">
+                        模具
+                      </th>
+                      <th style="width:8%" class="align-right">
+                        数量/件
+                      </th>
+                      <th style="width:8%" class="align-right">
+                        单价
+                      </th>
+                      <th style="width:8%" class="align-right">
+                        总量
+                      </th>
+                      <th style="width:10%" class="align-right">
+                        总价
+                      </th>
+                    </tr>
+                  </thead>
+                  <tbody>
+                    <template v-for="(row,index) in  formData.data.quotationEstimateList" :key="index">
+                      <tr v-if="row.type==1">
+                        <td>原材料</td>
+                        <td>{{row.code}}</td>
+                        <td>{{row.name}}</td>
+                        <td class="align-right">
+                          <el-form-item label-width="0px" class="margin-b-0" :prop="'quotationEstimateList.' + index + '.moldId'"
+                                        :rules="rules.moldId" :inline-message="true">
+                            <el-select v-model="row.moldId" filterable placeholder="请选择模具" style="width: 100%" @change="changeTotalAmount()">
+                              <el-option v-for="item in moldData" :key="item.id" :label="item.moldName" :value="item.id" />
+                            </el-select>
+                          </el-form-item>
+                        </td>
+                        <td class="align-right">-</td>
+                        <td class="align-right">
+                          <el-form-item label-width="0px" class="margin-b-0" :prop="'quotationEstimateList.' + index + '.price'" :rules="rules.price"
+                                        :inline-message="true">
+                            <el-input-number onmousewheel="return false;" v-model="row.price" placeholder="单价" style="width: 100%" :precision="2"
+                                             :controls="false" :min="0" @change="changeTotalAmount()" />
+                          </el-form-item>
+                        </td>
+                        <td class="align-right">
+                          <el-form-item label-width="0px" class="margin-b-0" :prop="'quotationEstimateList.' + index + '.totalQuantity'"
+                                        :rules="rules.totalQuantity" :inline-message="true">
+                            <el-input-number onmousewheel="return false;" v-model="row.totalQuantity" placeholder="总量" style="width: 100%"
+                                             :precision="0" :controls="false" :min="1" @change="changeTotalAmount()" />
+                          </el-form-item>
+                        </td>
+                        <td class="align-right">{{row.amount}}</td>
+                      </tr>
+                    </template>
+
+                    <template v-for="(row,index) in  formData.data.quotationEstimateList" :key="index">
+                      <tr v-if="row.type == 2">
+                        <td :rowspan="getRowSpan(2)" v-if="row.show">
+                          <el-button text type="primary" @click="openSelectMaterial=true">选择</el-button>
+                          <div>包材辅材</div>
+                        </td>
+                        <td>
+                          {{row.code}}
+                        </td>
+                        <td>
+                          {{row.name}}
+                        </td>
+                        <td class="align-right">
+                          -
+                        </td>
+                        <td class="align-right">
+                          <el-form-item label-width="0px" class="margin-b-0" :prop="'quotationEstimateList.' + index + '.quantity'"
+                                        :rules="rules.quantity" :inline-message="true">
+                            <el-input-number onmousewheel="return false;" v-model="row.quantity" placeholder="数量" style="width: 100%" :precision="0"
+                                             :controls="false" :min="1" @change="changeTotalAmount()" />
+                          </el-form-item>
+                        </td>
+                        <td class="align-right">
+                          <el-form-item label-width="0px" class="margin-b-0" :prop="'quotationEstimateList.' + index + '.price'" :rules="rules.price"
+                                        :inline-message="true">
+                            <el-input-number onmousewheel="return false;" v-model="row.price" placeholder="单价" style="width: 100%" :precision="2"
+                                             :controls="false" :min="0" @change="changeTotalAmount()" />
+                          </el-form-item>
+                        </td>
+                        <td class="align-right">
+                          {{row.totalQuantity}}
+                        </td>
+                        <td class="align-right">
+                          {{row.amount}}
+                        </td>
+                      </tr>
+                    </template>
+
+                    <template v-for="(row,index) in  formData.data.quotationEstimateList" :key="index">
+                      <tr v-if="row.type == 3">
+                        <td :rowspan="getRowSpan(3)" v-if="row.show">
+                          工序
+                        </td>
+                        <td>
+                          {{row.code}}
+                        </td>
+                        <td>
+                          {{row.name}}
+                        </td>
+                        <td class="align-right">
+                          -
+                        </td>
+                        <td class="align-right">
+                          {{row.quantity}}
+                        </td>
+                        <td class="align-right">
+                          <el-form-item label-width="0px" class="margin-b-0" :prop="'quotationEstimateList.' + index + '.price'" :rules="rules.price"
+                                        :inline-message="true">
+                            <el-input-number onmousewheel="return false;" v-model="row.price" placeholder="单价" style="width: 100%" :precision="2"
+                                             :controls="false" :min="0" @change="changeTotalAmount()" />
+                          </el-form-item>
+                        </td>
+                        <td class="align-right">
+                          {{row.totalQuantity}}
+                        </td>
+                        <td class="align-right">
+                          {{row.amount}}
+                        </td>
+                      </tr>
+                    </template>
+
+                    <tr>
+                      <td colspan="7">
+                        合计
+                      </td>
+                      <td class="align-right">
+                        {{formData.data.totalAmount}}
+                      </td>
+                    </tr>
+                  </tbody>
+                </table>
+              </div>
+            </template>
+            <!-- <template #chart>
           <div style="width:100%;padding-left:25px">
             <div ref="chartDom" style="height:300px"></div>
           </div>
@@ -89,15 +340,7 @@
                         </template>
                       </el-table-column>
                       <el-table-column prop="quantity" label="数量" width="80">
-                        <!-- <template #default="{ row, $index }">
-                          <div style="width: 100%">
-                            <el-form-item :prop="'quotationProductList.' + scope.$index + '.quotationProductBomList.' + $index + '.quantity'"
-                                          :rules="rules.quantity" :inline-message="true" class="margin-b-0 wid100">
-                              <el-input-number onmousewheel="return false;" v-model="row.quantity" placeholder="请输入" style="width: 100%"
-                                               :precision="0" :controls="false" :min="1" @change="changeQuantity()" />
-                            </el-form-item>
-                          </div>
-                        </template> -->
+                       
                       </el-table-column>
                       <el-table-column prop="allQuantity" label="总量" width="80" />
                       <el-table-column label="单价" width="110">
@@ -160,12 +403,28 @@
               </el-table-column>
             </el-table>
           </div>
-        </template>
-      </byForm>
-      <template #footer v-if="!isDetail">
+        </template> -->
+          </byForm>
+          <div style="text-align:center" class="btn" v-if="!isDetail && formData.data.quotationProductId">
+            <el-button @click="openAddDialog = false" size="default" v-debounce>关 闭</el-button>
+            <!-- <el-button type="primary" @click="handleSubmit(1)" size="default" v-debounce>暂 存</el-button> -->
+            <el-button type="primary" @click="handleSubmit(2)" size="default" v-debounce>提 交</el-button>
+          </div>
+
+        </div>
+      </div>
+
+      <!-- <template #footer v-if="!isDetail">
         <el-button @click="openAddDialog = false" size="default" v-debounce>关 闭</el-button>
         <el-button type="primary" @click="handleSubmit(1)" size="default" v-debounce>暂 存</el-button>
         <el-button type="primary" @click="handleSubmit(2)" size="default" v-debounce>提 交</el-button>
+      </template> -->
+    </el-dialog>
+
+    <el-dialog :title="'物料选择'" v-model="openSelectMaterial" width="90%" destroy-on-close>
+      <SelectMaterial :isNeRawMaterial="'1'" @selectMaterial="selectMaterial"></SelectMaterial>
+      <template #footer>
+        <el-button @click="openSelectMaterial = false" size="defualt" v-debounce>关 闭</el-button>
       </template>
     </el-dialog>
   </div>
@@ -176,6 +435,7 @@ import byTable from "@/components/byTable/index";
 import byForm from "@/components/byForm/index";
 import { ref } from "vue";
 import * as echarts from "echarts";
+import SelectMaterial from "@/components/product/SelectMaterial.vue";
 
 const { proxy } = getCurrentInstance();
 const sourceList = ref({
@@ -318,7 +578,7 @@ const config = computed(() => {
                 },
                 el: "button",
                 click() {
-                  getDtl(row);
+                  getDtlOne(row);
                 },
               }
             : {},
@@ -365,55 +625,63 @@ const chartData = ref([]);
 const isShowChart = ref(false);
 const formConfig = computed(() => {
   return [
-    {
-      type: "title1",
-      title: "报价趋势",
-      isShow: isShowChart.value,
-    },
-    {
-      type: "slot",
-      slotName: "chart",
-      isShow: isShowChart.value,
-    },
-    {
-      type: "title1",
-      title: "退回原因",
-      isShow: isShowBackRemark.value,
-    },
-    {
-      type: "input",
-      itemType: "textarea",
-      rows: 10,
-      prop: "backRemark",
-      label: "退回原因",
-      itemWidth: 100,
-      disabled: true,
-      isShow: isShowBackRemark.value,
-    },
-    {
-      type: "title1",
-      title: "商品信息",
-    },
+    // {
+    //   type: "title1",
+    //   title: "报价趋势",
+    //   isShow: isShowChart.value,
+    // },
+    // {
+    //   type: "slot",
+    //   slotName: "chart",
+    //   isShow: isShowChart.value,
+    // },
+    // {
+    //   type: "title1",
+    //   title: "退回原因",
+    //   isShow: isShowBackRemark.value,
+    // },
+    // {
+    //   type: "input",
+    //   itemType: "textarea",
+    //   rows: 10,
+    //   prop: "backRemark",
+    //   label: "退回原因",
+    //   itemWidth: 100,
+    //   disabled: true,
+    //   isShow: isShowBackRemark.value,
+    // },
+    // {
+    //   type: "title1",
+    //   title: "商品信息",
+    // },
+    // {
+    //   type: "slot",
+    //   slotName: "commodity",
+    //   label: "",
+    // },
+    // {
+    //   type: "title1",
+    //   title: "报价总金额",
+    // },
+    // {
+    //   type: "input",
+    //   prop: "amount",
+    //   label: "报价总金额",
+    //   itemWidth: 25,
+    //   disabled: true,
+    // },
     {
       type: "slot",
-      slotName: "commodity",
+      slotName: "quotationDetail",
       label: "",
     },
-    {
-      type: "title1",
-      title: "报价总金额",
-    },
-    {
-      type: "input",
-      prop: "amount",
-      label: "报价总金额",
-      itemWidth: 25,
-      disabled: true,
-    },
   ];
 });
 const rules = ref({
-  price: [{ required: true, message: "请输入单价", trigger: "blur" }],
+  price: [{ required: true, message: "单价", trigger: "blur" }],
+  moldId: [{ required: true, message: "请选择模具", trigger: "change" }],
+  quantity: [{ required: true, message: "数量", trigger: "blur" }],
+  totalQuantity: [{ required: true, message: "总量", trigger: "blur" }],
 });
 const isDetail = ref(false);
 const chartOption = reactive({
@@ -563,6 +831,109 @@ const getDtl = (row, flag = false) => {
   });
 };
 
+const getFileDataOne = () => {
+  let ids = [];
+  quotationProductList.value.map((x) => {
+    // ids.push(x.productId);
+    x.quotationProductBomList.map((y) => {
+      ids.push(y.materialId);
+    });
+  });
+  ids = Array.from(new Set(ids));
+  proxy
+    .post("/fileInfo/getList", {
+      businessIdList: ids,
+    })
+    .then((fileObj) => {
+      quotationProductList.value.map((x) => {
+        // x.fileList = fileObj[x.productId] || [];
+        // if (x.fileList && x.fileList.length > 0) {
+        //   x.fileUrl = x.fileList[0].fileUrl;
+        // }
+        x.quotationProductBomList.map((y) => {
+          y.fileList = fileObj[y.materialId] || [];
+          if (y.fileList && y.fileList.length > 0) {
+            y.fileUrl = y.fileList[0].fileUrl;
+          }
+        });
+      });
+    });
+};
+const quotationProductList = ref([]);
+const allData = ref({});
+const getDtlOne = (row, flag = false) => {
+  formOption.disabled = flag;
+  isDetail.value = flag;
+  openAddDialog.value = true;
+  proxy.post("/saleQuotation/detail", { id: row.id }).then((res) => {
+    allData.value = res;
+    formData.data = {
+      quotationProductId: "",
+    };
+    // // 是否显示退回原因
+    // if (res.backRemark) {
+    //   isShowBackRemark.value = true;
+    // } else {
+    //   isShowBackRemark.value = false;
+    // }
+    // 城市数据回显
+    // if (formData.data.buyCountryId) {
+    //   getCityData(formData.data.buyCountryId, "20");
+    // }
+    // if (formData.data.buyProvinceId) {
+    //   getCityData(formData.data.buyProvinceId, "30");
+    // }
+    // 价格计算
+    quotationProductList.value = res.quotationProductList.map((x) => ({
+      ...x,
+      amount: parseFloat(x.quantity * x.price).toFixed(2),
+    }));
+    if (quotationProductList.value && quotationProductList.value.length > 0) {
+      handleReportPrice(quotationProductList.value[0]);
+    }
+    // changeQuantity();
+    // 文件数据回显
+    getFileDataOne();
+    let productIds = quotationProductList.value.map((x) => x.productId);
+    proxy.getFileData({
+      businessIdList: productIds,
+      data: quotationProductList.value,
+      att: "productId",
+      businessType: "0",
+      fileAtt: "productFile",
+      filePathAtt: "fileUrl",
+    });
+    //折线图
+    // if (res.quotationTrendList && res.quotationTrendList.length >= 2) {
+    //   isShowChart.value = true;
+    //   nextTick(() => {
+    //     myChart = echarts.init(chartDom.value);
+    //     window.addEventListener("resize", () => {
+    //       myChart.resize();
+    //     });
+    //     chartData.value = res.quotationTrendList;
+    //     chartOption.data.xAxis.data = chartData.value.map((item) => {
+    //       return item.createTime.slice(0, 10);
+    //     });
+    //     chartOption.data.series[0].data = chartData.value.map((item, index) => {
+    //       if (item.code == row.code) {
+    //         return {
+    //           value: item.amount || 0,
+    //           itemStyle: { color: "red" },
+    //         };
+    //       } else {
+    //         return item.amount || 0;
+    //       }
+    //     });
+    //     myChart.setOption(chartOption.data);
+    //     myChart.resize();
+    //   });
+    // } else {
+    //   isShowChart.value = false;
+    // }
+  });
+};
+
 const changeQuantity = () => {
   if (
     formData.data.quotationProductList &&
@@ -621,30 +992,170 @@ const totalAmount = () => {
   formData.data.amount = parseFloat(money).toFixed(2);
 };
 
+// const handleSubmit = (type) => {
+//   formDom.value.handleSubmit(() => {
+//     if (
+//       formData.data.quotationProductList &&
+//       formData.data.quotationProductList.length > 0
+//     ) {
+//       submitLoading.value = true;
+//       formData.data.quotationStatus = type;
+//       proxy.post("/saleQuotation/edit", formData.data).then(
+//         (res) => {
+//           proxy.msgTip("操作成功", 1);
+//           openAddDialog.value = false;
+//           submitLoading.value = false;
+//           getList();
+//         },
+//         (err) => {
+//           submitLoading.value = false;
+//         }
+//       );
+//     } else {
+//       return proxy.msgTip("请添加至少一件商品", 2);
+//     }
+//   });
+// };
+
 const handleSubmit = (type) => {
   formDom.value.handleSubmit(() => {
     if (
-      formData.data.quotationProductList &&
-      formData.data.quotationProductList.length > 0
+      formData.data.quotationEstimateList &&
+      formData.data.quotationEstimateList.length > 0
     ) {
       submitLoading.value = true;
-      formData.data.quotationStatus = type;
-      proxy.post("/saleQuotation/edit", formData.data).then(
+      proxy.post("/quotationEstimate/addOrEdit", formData.data).then(
         (res) => {
           proxy.msgTip("操作成功", 1);
-          openAddDialog.value = false;
+          // openAddDialog.value = false;
           submitLoading.value = false;
-          getList();
+          // getList();
+          getDtlOne(allData.value, false);
         },
         (err) => {
           submitLoading.value = false;
         }
       );
     } else {
-      return proxy.msgTip("请添加至少一件商品", 2);
+      return proxy.msgTip("无报价明细", 2);
     }
   });
 };
+
+const moldData = ref([]);
+const getDict = () => {
+  proxy
+    .post("/moldInfo/page", {
+      pageNum: 1,
+      pageSize: 9999,
+    })
+    .then((res) => {
+      moldData.value = res.rows;
+    });
+};
+getDict();
+
+const handleReportPrice = (item) => {
+  submitLoading.value = true;
+  formData.data = {
+    quotationProductId: item.id,
+    productCode: item.productCode,
+    productName: item.productName,
+    quantity: item.quantity,
+  };
+  proxy
+    .post("/quotationEstimate/detail", {
+      quotationProductId: formData.data.quotationProductId,
+    })
+    .then((res) => {
+      let type1Status = true;
+      let type2Status = true;
+      let type3Status = true;
+      if (res && res.length > 0) {
+        for (let i = 0; i < res.length; i++) {
+          const ele = res[i];
+          if (ele.type == 1 && type1Status) {
+            ele.show = true;
+            type1Status = false;
+          } else if (ele.type == 2 && type2Status) {
+            ele.show = true;
+            type2Status = false;
+          } else if (ele.type == 3 && type3Status) {
+            ele.show = true;
+            type3Status = false;
+          } else {
+            ele.show = false;
+          }
+        }
+        formData.data.quotationEstimateList = res;
+      }
+      submitLoading.value = false;
+      changeTotalAmount();
+    });
+};
+const openSelectMaterial = ref(false);
+const selectMaterial = (goods) => {
+  let flag = formData.data.quotationEstimateList.some(
+    (x) => x.materialId == goods.id
+  );
+  if (!flag) {
+    formData.data.quotationEstimateList.push({
+      materialId: goods.id,
+      name: goods.name,
+      code: goods.customCode,
+      quantity: 1,
+      price: null,
+      totalQuantity: null,
+      amount: "",
+      type: 2,
+    });
+    proxy.msgTip("选择成功");
+  } else {
+    proxy.msgTip("该物料已选择", 2);
+  }
+};
+
+const getRowSpan = (type) => {
+  if (
+    formData.data.quotationEstimateList &&
+    formData.data.quotationEstimateList.length > 0
+  ) {
+    return formData.data.quotationEstimateList.filter((x) => x.type == type)
+      .length;
+  }
+};
+
+const changeTotalAmount = () => {
+  let money = 0;
+  for (let i = 0; i < formData.data.quotationEstimateList.length; i++) {
+    const ele = formData.data.quotationEstimateList[i];
+    let amount = 0;
+    if (ele.type == 1 && ele.moldId) {
+      let mold = moldData.value.find((x) => x.id == ele.moldId);
+      if (mold) {
+        amount = parseFloat(
+          mold.moldLength *
+            mold.moldWidth *
+            Number(ele.price) *
+            Number(ele.totalQuantity)
+        ).toFixed(2);
+      }
+    } else if (ele.type == 2) {
+      ele.totalQuantity = ele.quantity * formData.data.quantity;
+      amount = parseFloat(
+        Number(ele.price) * Number(ele.totalQuantity)
+      ).toFixed(2);
+    } else if (ele.type == 3) {
+      ele.totalQuantity = formData.data.quantity;
+      amount = parseFloat(
+        Number(ele.price) * Number(ele.totalQuantity)
+      ).toFixed(2);
+    }
+    ele.amount = amount;
+    money += Number(parseFloat(amount).toFixed(2));
+  }
+  formData.data.totalAmount = parseFloat(money).toFixed(2);
+};
 </script>
 
 <style lang="scss" scoped>
@@ -659,4 +1170,50 @@ const handleSubmit = (type) => {
 :deep(.bom-table .el-table__body-wrapper .el-table__body .el-table__row) {
   background: #f4f4f5 !important;
 }
+.box {
+  width: 100%;
+  display: flex;
+  .left {
+    width: 40%;
+    height: 100%;
+    overflow: auto;
+    border-right: 1px solid #eee;
+    padding: 4px 15px 4px 4px;
+  }
+  .right {
+    width: 60%;
+    height: 100%;
+    overflow: auto;
+    position: relative;
+    padding: 4px 15px;
+    .btn {
+      // position: absolute;
+      // bottom: 20px;
+      // height: 32px;
+      // left: 50%;
+      // transform: translateX(-50%);
+      height: 32px;
+      text-align: center;
+    }
+    .table {
+      border-collapse: collapse;
+      border-spacing: 0;
+      width: 100%;
+      td,
+      th {
+        text-align: left;
+        padding: 5px;
+        font-size: 12px;
+        // padding: 5px 10px;
+      }
+      .align-right {
+        text-align: right;
+      }
+    }
+  }
+}
+
+::v-deep(.el-input-number .el-input__inner) {
+  text-align: right;
+}
 </style>

+ 2 - 2
src/views/EHSD/saleContract/sampleEHSD/index.vue

@@ -224,7 +224,7 @@ const selectConfig = computed(() => {
       data: status.value,
     },
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "sellCorporationId",
       data: corporationList.value,
     },
@@ -247,7 +247,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 103 - 21
src/views/MES/processScheduling/index.vue

@@ -65,14 +65,18 @@
           <template v-for="(slotItem, index) in processesData" v-slot:[slotItem.id]="{ item }" :key="slotItem.id">
             <div style="width:100%">
               <span v-if="isShowCotent(slotItem,item)" style="font-size:12px">
-                <div style="text-align:center"><el-button type="primary" @click="openModal(item,slotItem)" text>排程</el-button></div>
-
                 <div :style="{
-                  color:isFindCotentData(slotItem,item).schedulingCount>=item.quantity?'#70cd31':''
-                }">
-                  <div v-for="record in isFindCotentData(slotItem,item).schedulingList" :key="record.id"
-                       style="line-height:22px;display:flex;justify-content:space-between">
-                    <span v-if="record.schedulingDate">{{record.schedulingDate.slice(5,10)}}</span> <span>{{record.quantity}}</span>
+                  background:isFindCotentData(slotItem,item).schedulingCount>=item.quantity?'#c6f7a5':''
+                }" style="min-height:80px">
+                  <div @click="openModal(item,slotItem,'add')" v-if="isCurrentCompanyData(item.companyId)" class="btn">
+                    排程
+                  </div>
+                  <div style="padding:0 8px">
+                    <div v-for="record in isFindCotentData(slotItem,item).schedulingList" :key="record.id"
+                         style="line-height:22px;display:flex;justify-content:space-between">
+                      <span v-if="record.schedulingDate">{{record.schedulingDate.slice(5,10)}}</span> <span style="cursor:pointer"
+                            @click="openModal(item,slotItem,'edit',record)">{{record.quantity}}</span>
+                    </div>
                   </div>
                 </div>
               </span>
@@ -106,12 +110,15 @@
                   </div>
                   <div style="width:100%">
                     <div v-for="process in processesData" :key="process.id">
-                      <div style="display:flex;justify-content:space-between;align-items:center;margin:3px 0;height:22px">
+                      <div style="display:flex;justify-content:space-between;align-items:center;margin:3px 0;height:22px"
+                           v-if="isShowDayData(data.day,process)" :class="{'bk-class':isShowDayData(data.day,process).quantity>process.capacity}">
                         <span> {{process.name}}</span>
-                        <span v-if="isShowDayData(data.day,process)" class="tag-active" style="display:inline-block;min-width:45px;text-align:right;">
+                        <span style="display:inline-block;min-width:45px;text-align:right;">
                           {{isShowDayData(data.day,process).quantity}}
                         </span>
-                        <!-- {{item.quantity}} -->
+                      </div>
+                      <div style="display:flex;justify-content:space-between;align-items:center;margin:3px 0;height:22px" v-else>
+                        <span> {{process.name}}</span>
                       </div>
                     </div>
                   </div>
@@ -127,6 +134,7 @@
       </byForm>
       <template #footer>
         <el-button @click="dialogVisible = false" size="defualt">取 消</el-button>
+        <el-button type="danger" @click="deleteRecord()" v-if="isShowDeteleBtn" size="defualt">删 除</el-button>
         <el-button type="primary" @click="submitForm()" size="defualt">提 交</el-button>
       </template>
     </el-dialog>
@@ -182,6 +190,10 @@ const statusData = ref([
     value: "2",
   },
   {
+    label: "出库中",
+    value: "5",
+  },
+  {
     label: "已出库",
     value: "10",
   },
@@ -438,6 +450,27 @@ const formDom = ref(null);
 const formConfig = computed(() => {
   return [
     {
+      type: "input",
+      prop: "processesName",
+      label: "工序名称",
+      itemWidth: 100,
+      disabled: true,
+    },
+    {
+      type: "input",
+      prop: "allQuantity",
+      label: "总生产件数",
+      itemWidth: 100,
+      disabled: true,
+    },
+    {
+      type: "input",
+      prop: "waitQuantity",
+      label: "未排程件数",
+      itemWidth: 100,
+      disabled: true,
+    },
+    {
       type: "date",
       prop: "schedulingDate",
       itemType: "date",
@@ -537,20 +570,54 @@ const getList = async (req) => {
     });
 };
 
-const openModal = (item, sonItem) => {
+const isShowDeteleBtn = ref(false);
+const openModal = (item, sonItem, type, record = {}) => {
+  let schedulingCount = 0;
+  let current = item.productionTaskProgressList.find(
+    (x) => x.processesId == sonItem.id
+  );
+  if (current) {
+    schedulingCount = current.schedulingCount;
+  }
+  isShowDeteleBtn.value = false;
+  modalType.value = type;
   formData.data = {
     taskId: item.id,
+    allQuantity: item.quantity,
+    waitQuantity: parseFloat(item.quantity - schedulingCount) + "",
     processesId: sonItem.id,
-    schedulingDate: "",
-    quantity: null,
+    processesName: sonItem.name,
+    schedulingDate: record.schedulingDate || "",
+    quantity: record.quantity || null,
   };
+  if (type == "edit" && record && record.id) {
+    formData.data.id = record.id;
+    isShowDeteleBtn.value = true;
+  }
   dialogVisible.value = true;
 };
 
+const deleteRecord = () => {
+  proxy
+    .msgConfirm()
+    .then((res) => {
+      proxy
+        .post("/productionScheduling/delete", {
+          id: formData.data.id,
+        })
+        .then((res) => {
+          proxy.msgTip("操作成功", 1);
+          getList();
+          dialogVisible.value = false;
+        });
+    })
+    .catch((err) => {});
+};
+
 const submitForm = () => {
   formDom.value.handleSubmit((valid) => {
     submitLoading.value = true;
-    proxy.post("/productionScheduling/add", formData.data).then(
+    proxy.post("/productionScheduling/" + modalType.value, formData.data).then(
       (res) => {
         proxy.msgTip("操作成功", 1);
         dialogVisible.value = false;
@@ -565,13 +632,6 @@ const submitForm = () => {
   });
 };
 
-const getDtl = (row) => {
-  modalType.value = "edit";
-  proxy.post("/shopInfo/detail", { id: row.id }).then((res) => {
-    formData.data = res;
-    dialogVisible.value = true;
-  });
-};
 const processesData = ref([]);
 const getProcesses = () => {
   proxy
@@ -958,4 +1018,26 @@ const isShowDayData = (day, process) => {
   overflow-y: hidden;
   padding: 4px;
 }
+
+::v-deep(.el-table-fixed-column--right) {
+  vertical-align: top !important;
+  padding: 0px !important;
+  .cell {
+    padding: 0px !important;
+  }
+}
+
+.btn {
+  line-height: 18px;
+  cursor: pointer;
+  background: #b1c8df;
+  color: #fff;
+  // border-radius: 100px;
+}
+.bk-class {
+  background: red;
+  color: #fff;
+  border-radius: 2px;
+  // padding: 4px;
+}
 </style>

+ 40 - 3
src/views/MES/productionOrder/index.vue

@@ -18,6 +18,13 @@
           </div>
         </template>
 
+        <template #produceStatus="{ item }">
+          <div style="width: 100%">
+            <span :class="item.produceStatus==10?'tag-active':''">
+              {{ dictValueLabel(item.produceStatus, statusData) }}</span>
+          </div>
+        </template>
+
         <template #prodTag="{ item }">
           <div style="width: 100%">
             <el-popover placement="top-start" :width="300" trigger="hover">
@@ -298,6 +305,10 @@ const statusData = ref([
     value: "2",
   },
   {
+    label: "出库中",
+    value: "5",
+  },
+  {
     label: "已出库",
     value: "10",
   },
@@ -377,11 +388,12 @@ const config = computed(() => {
       attrs: {
         label: "生产状态",
         prop: "produceStatus",
+        slot: "produceStatus",
         width: 120,
       },
-      render(val) {
-        return proxy.dictValueLabel(val, statusData.value);
-      },
+      // render(val) {
+      //   return proxy.dictValueLabel(val, statusData.value);
+      // },
     },
     {
       attrs: {
@@ -469,6 +481,31 @@ const config = computed(() => {
                 },
               }
             : {},
+          row.produceStatus == 2 && proxy.isCurrentCompanyData(row.companyId)
+            ? {
+                attrs: {
+                  label: "销售出库",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  proxy
+                    .msgConfirm()
+                    .then((res) => {
+                      proxy
+                        .post("/contract/saleOutbound", {
+                          id: row.contractId,
+                        })
+                        .then((res) => {
+                          proxy.msgTip("操作成功", 1);
+                          getList();
+                        });
+                    })
+                    .catch((err) => {});
+                },
+              }
+            : {},
         ];
       },
     },

+ 31 - 11
src/views/MES/productionTask/index.vue

@@ -47,6 +47,13 @@
         </div>
       </template>
 
+      <template #progress="{item}">
+        <div style="width: 100%">
+          <el-progress type="circle" :percentage="(Number(item.finishQuantity) / Number(item.quantity))*100" width="60"
+                       :status="(Number(item.finishQuantity) / Number(item.quantity))*100 == 100 ? 'success' : ''" />
+        </div>
+      </template>
+
       <template #prodTag="{ item }">
         <div style="width: 100%">
           <el-popover placement="top-start" :width="300" trigger="hover">
@@ -362,6 +369,10 @@ const statusData = ref([
     value: "2",
   },
   {
+    label: "出库中",
+    value: "5",
+  },
+  {
     label: "已出库",
     value: "10",
   },
@@ -439,17 +450,19 @@ const config = ref([
             printQrCode(row);
           },
         },
-        {
-          attrs: {
-            label: "备注",
-            type: "primary",
-            text: true,
-          },
-          el: "button",
-          click() {
-            openRemark(row);
-          },
-        },
+        proxy.isCurrentCompanyData(row.companyId)
+          ? {
+              attrs: {
+                label: "备注",
+                type: "primary",
+                text: true,
+              },
+              el: "button",
+              click() {
+                openRemark(row);
+              },
+            }
+          : {},
       ];
     },
   },
@@ -527,6 +540,13 @@ const config = ref([
   },
   {
     attrs: {
+      label: "完成进度",
+      slot: "progress",
+      width: 90,
+    },
+  },
+  {
+    attrs: {
       label: "已完成",
       prop: "finishQuantity",
       width: 100,

+ 4 - 0
src/views/MES/productionWorkOrder/index.vue

@@ -98,6 +98,10 @@ const statusData = ref([
     value: "2",
   },
   {
+    label: "出库中",
+    value: "5",
+  },
+  {
     label: "已出库",
     value: "10",
   },

+ 1 - 1
src/views/customer/portrait/com/SalesDetails.vue

@@ -90,7 +90,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationName",
         "min-width": 160,
       },

+ 1 - 1
src/views/finance/fundManage/account/index.vue

@@ -338,7 +338,7 @@ const rules = ref({
   currency: [{ required: true, message: "请选择币种", trigger: "change" }],
   remainder: [{ required: true, message: "请输入账户余额", trigger: "blur" }],
   corporationId: [
-    { required: true, message: "请选择归属公司", trigger: "change" },
+    { required: true, message: "请选择业务公司", trigger: "change" },
   ],
 });
 const formData = reactive({

+ 2 - 2
src/views/finance/fundManage/accountPayment/index.vue

@@ -207,7 +207,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
         width: 160,
       },
@@ -702,7 +702,7 @@ const formSearchConfig = computed(() => {
     {
       type: "select",
       prop: "corporationId",
-      label: "归属公司",
+      label: "业务公司",
       data: companyData.value,
       clearable: true,
     },

+ 1 - 1
src/views/finance/fundManage/accountStatement/index.vue

@@ -289,7 +289,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
         width: 160,
       },

+ 1 - 1
src/views/finance/fundManage/flow/index.vue

@@ -354,7 +354,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
         width: 170,
       },

+ 2 - 2
src/views/finance/fundManage/funds/index.vue

@@ -202,7 +202,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
         width: 180,
       },
@@ -472,7 +472,7 @@ const formSearchConfig = computed(() => {
     {
       type: "select",
       prop: "corporationId",
-      label: "归属公司",
+      label: "业务公司",
       data: companyData.value,
       clearable: true,
       filterable: true,

+ 2 - 2
src/views/finance/fundManage/offsetRecord/index.vue

@@ -49,7 +49,7 @@ const loading = ref(false);
 const selectConfig = computed(() => {
   return [
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "corporationId",
       data: corporationList.value,
     },
@@ -64,7 +64,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
         "min-width": 220,
       },

+ 4 - 4
src/views/iot/base/equipment/index.vue

@@ -52,7 +52,7 @@ const dialogVisible = ref(false);
 const roomDialogVisible = ref(false);
 const modalType = ref("add");
 const rules = ref({
-  companyId: [{ required: true, message: "请选择归属公司", trigger: "change" }],
+  companyId: [{ required: true, message: "请选择业务公司", trigger: "change" }],
   deviceCode: [
     { required: true, message: "请输入设备编码", trigger: ["blur"] },
   ],
@@ -62,7 +62,7 @@ const rules = ref({
 });
 const selectConfig = computed(() => [
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "companyId",
     data: companyData.value,
   },
@@ -71,7 +71,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 110,
       },
@@ -192,7 +192,7 @@ const formConfig = computed(() => [
   // {
   //   type: "treeSelect",
   //   prop: "companyId",
-  //   label: "归属公司",
+  //   label: "业务公司",
   //   data: treeData.value,
   //   propsTreeLabel: "deptName",
   //   propsTreeValue: "deptId",

+ 1 - 0
src/views/product/material/index.vue

@@ -193,6 +193,7 @@ const rules = ref({
   length: [{ required: true, message: "请输入长 (cm)", trigger: "blur" }],
   width: [{ required: true, message: "请输入宽 (cm)", trigger: "blur" }],
   height: [{ required: true, message: "请输入高 (cm)", trigger: "blur" }],
+  price: [{ required: true, message: "请输入销售价", trigger: "blur" }],
 });
 
 const selectConfig = computed(() => []);

+ 2 - 2
src/views/purchaseManage/purchaseManage/handoverSlip/index.vue

@@ -155,7 +155,7 @@ const isReceivedArr = ref([
 const corporationArr = ref([]);
 const selectConfig = computed(() => [
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "corporationId",
     data: corporationArr.value,
   },
@@ -175,7 +175,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
       },
     },

+ 2 - 2
src/views/purchaseManage/purchaseManage/handoverSlipOne/index.vue

@@ -76,7 +76,7 @@ const purchaseStatus = ref([
 const corporationArr = ref([]);
 const selectConfig = computed(() => [
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "corporationId",
     data: corporationArr.value,
   },
@@ -96,7 +96,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "corporationName",
       },
     },

+ 2 - 2
src/views/purchaseManage/purchaseManage/purchase/index.vue

@@ -193,7 +193,7 @@ const selectConfig = computed(() => [
     ],
   },
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "companyId",
     data: companyData.value,
   },
@@ -211,7 +211,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 130,
       },

+ 2 - 2
src/views/purchaseManage/purchaseManage/subscribe/index.vue

@@ -159,7 +159,7 @@ const selectConfig = computed(() => [
     data: statusData.value,
   },
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "companyId",
     data: companyData.value,
   },
@@ -168,7 +168,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 130,
       },

+ 4 - 4
src/views/purchaseManage/supplier/supplier/index.vue

@@ -128,7 +128,7 @@ let dialogVisible = ref(false);
 let modalType = ref("add");
 const uploadData = ref({});
 let rules = ref({
-  companyId: [{ required: true, message: "请选择归属公司", trigger: "change" }],
+  companyId: [{ required: true, message: "请选择业务公司", trigger: "change" }],
   name: [{ required: true, message: "请输入供应商名称", trigger: "blur" }],
   type: [{ required: true, message: "请选择供应商类型", trigger: "change" }],
   countryId: [{ required: true, message: "请选择国家", trigger: "change" }],
@@ -147,7 +147,7 @@ const selectConfig = computed(() => [
     data: supplierType.value,
   },
   {
-    label: "归属公司",
+    label: "业务公司",
     prop: "companyId",
     data: companyData.value,
   },
@@ -156,7 +156,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
         width: 130,
       },
@@ -281,7 +281,7 @@ const formConfig = computed(() => {
     {
       type: "treeSelect",
       prop: "companyId",
-      label: "归属公司",
+      label: "业务公司",
       data: treeData.value,
       propsTreeLabel: "deptName",
       propsTreeValue: "deptId",

+ 8 - 1
src/views/purchaseSales/outAndInWarehouse/inventoryInquiry/index.vue

@@ -98,7 +98,7 @@ const companyData = ref([]);
 const selectConfig = computed(() => {
   return [
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "companyId",
       data: companyData.value,
       isShowAll: false,
@@ -170,6 +170,13 @@ const config = computed(() => {
         width: 120,
       },
     },
+    {
+      attrs: {
+        label: "颜色",
+        prop: "productColor",
+        width: 150,
+      },
+    },
     // {
     //   attrs: {
     //     label: "单位",

+ 2 - 2
src/views/purchaseSales/outAndInWarehouse/snapshot/index.vue

@@ -51,7 +51,7 @@ let roomDialogVisible = ref(false);
 let modalType = ref("add");
 let rules = ref({
   companyId: [
-    { required: true, message: "请选择归属公司", trigger: ["change"] },
+    { required: true, message: "请选择业务公司", trigger: ["change"] },
   ],
   type: [
     { required: true, message: "请选择仓库类型", trigger: ["blur", "change"] },
@@ -96,7 +96,7 @@ const formConfig = computed(() => [
   {
     type: "treeSelect",
     prop: "companyId",
-    label: "归属公司",
+    label: "业务公司",
     data: treeData.value,
     propsTreeLabel: "deptName",
     propsTreeValue: "deptId",

+ 11 - 31
src/views/purchaseSales/outAndInWarehouse/waitingForDelivery/index.vue

@@ -4,6 +4,13 @@
       <byTable :source="sourceList.data" :pagination="sourceList.pagination" :config="config" :loading="loading" :selectConfig="selectConfig"
                highlight-current-row @get-list="getList">
 
+        <template #businessType="{ item }">
+          <div style="width: 100%">
+            <span :class="item.businessType==4||item.businessType==5?'tag-active':''">
+              {{ dictValueLabel(item.businessType, businessType) }}</span>
+          </div>
+        </template>
+
         <template #expand="{item}">
           <div style="width:100%;padding:0 50px">
             <el-table :data="item.stockWaitDetailsList" class="bom-table" border>
@@ -107,34 +114,6 @@ const status = ref([
   },
 ]);
 const businessType = ref([
-  // {
-  //   label: "线边回仓",
-  //   value: 1,
-  // },
-  // {
-  //   label: "完工入库",
-  //   value: 2,
-  // },
-  // {
-  //   label: "采购到货",
-  //   value: 3,
-  // },
-  // {
-  //   label: "退货出库",
-  //   value: 4,
-  // },
-  // {
-  //   label: "京东订单",
-  //   value: 5,
-  // },
-  // {
-  //   label: "销售订单出库",
-  //   value: 6,
-  // },
-  // {
-  //   label: "生产任务出库",
-  //   value: 7,
-  // },
   {
     label: "生产打样",
     value: "0",
@@ -216,11 +195,12 @@ const config = computed(() => {
       attrs: {
         label: "数据来源",
         prop: "businessType",
+        slot: "businessType",
         // width: 120,
       },
-      render(type) {
-        return proxy.dictValueLabel(type, businessType.value);
-      },
+      // render(type) {
+      //   return proxy.dictValueLabel(type, businessType.value);
+      // },
     },
     {
       attrs: {

+ 3 - 3
src/views/purchaseSales/warehouseConfig/warehouse/index.vue

@@ -53,7 +53,7 @@ let roomDialogVisible = ref(false);
 let modalType = ref("add");
 let rules = ref({
   companyId: [
-    { required: true, message: "请选择归属公司", trigger: ["change"] },
+    { required: true, message: "请选择业务公司", trigger: ["change"] },
   ],
   type: [
     { required: true, message: "请选择仓库类型", trigger: ["blur", "change"] },
@@ -76,7 +76,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "companyName",
       },
     },
@@ -181,7 +181,7 @@ const formConfig = computed(() => [
   {
     type: "treeSelect",
     prop: "companyId",
-    label: "归属公司",
+    label: "业务公司",
     data: treeData.value,
     propsTreeLabel: "deptName",
     propsTreeValue: "deptId",

+ 1 - 1
src/views/salesMange/afterSales/SelectContractProduct.vue

@@ -172,7 +172,7 @@ let rules = ref({
 
 const selectConfig = computed(() => [
   // {
-  //   label: "归属公司",
+  //   label: "业务公司",
   //   prop: "companyId",
   //   data: companyData.value,
   // },

+ 1 - 1
src/views/salesMange/saleContract/contract/index.vue

@@ -178,7 +178,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 160,
       },

+ 1 - 1
src/views/salesMange/saleContract/contractSelect/index.vue

@@ -96,7 +96,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 2 - 2
src/views/salesMange/saleContract/priceSheet/index.vue

@@ -386,7 +386,7 @@ const selectConfig = computed(() => {
       data: status.value,
     },
     {
-      label: "归属公司",
+      label: "业务公司",
       prop: "sellCorporationId",
       data: corporationList.value,
     },
@@ -403,7 +403,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 1 - 1
src/views/salesMange/saleContract/serviceContract/index.vue

@@ -155,7 +155,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationId",
         "min-width": 220,
       },

+ 1 - 1
src/views/salesMange/shipmentMange/document/index.vue

@@ -1070,7 +1070,7 @@ const config = computed(() => {
   return [
     {
       attrs: {
-        label: "归属公司",
+        label: "业务公司",
         prop: "sellCorporationName",
         "min-width": 260,
       },