Browse Source

应收应付页面更改

谢杰标 2 years ago
parent
commit
f19ab77cc2

+ 92 - 0
src/components/Comon/pictureList.vue

@@ -0,0 +1,92 @@
+<template>
+  <div class="dis_flex_order_li">
+    <div class="list" v-for="(item, index) in list" :key="index">
+      <img :src="backFullSrc(item.img)" alt="" />
+      <div class="right">
+        <h4>{{ item.label }}:</h4>
+        <p>{{ item.value || info[item.prop] }}{{ item.ch || "元" }}</p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "SaasMasterPlatformPictureList",
+  props: {
+    list: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    fn: {
+      type: Function,
+      default: () => {
+        return Promise.resolve({ data: {} });
+      },
+    },
+  },
+  data() {
+    return {
+      info: {},
+    };
+  },
+
+  mounted() {
+    this.fn().then((res) => {
+      this.info = res.data;
+    });
+  },
+
+  methods: {
+    backFullSrc(name) {
+      return require(`@/assets/images/${name}@2x.png`);
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.dis_flex_order_li {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  & > .list {
+    user-select: none;
+    cursor: pointer;
+    transition: all 0.3s;
+    box-shadow: 0px 0px 4px 1px rgba(0, 0, 0, 0.2);
+    &:hover {
+      transform: scale(1.04);
+    }
+    width: 136px;
+    height: 44px;
+    border-radius: 6px;
+    display: flex;
+    align-items: center;
+    flex-shrink: 0;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    & > img {
+      margin-left: 2px;
+      width: 40px;
+      height: 40px;
+    }
+    & > .right {
+      flex: 1;
+      padding-left: 4px;
+      & > h4 {
+        color: #000;
+        margin: 0;
+        font-size: 12px;
+      }
+      & > p {
+        font-size: 12px;
+        color: red;
+        margin: 0;
+      }
+    }
+  }
+}
+</style>

+ 2 - 12
src/components/searchBoxNew.vue

@@ -78,20 +78,10 @@
       </div>
     </div> -->
     <div class="inputListBoxs">
-      <div class="fon_sIcon" v-if="redIcon">
-        <el-tooltip
-          effect="light"
-          class="item"
-          content="该页面中的数据查询,针对的是「有效、有课程内容」的视频商品"
-          placement="bottom-start"
-        >
-          <i class="el-icon-warning-outline iconStyS"></i>
-        </el-tooltip>
-      </div>
       <div
         class="fon_s"
         style="padding-top: 10px; width: 70px; text-align: end"
-        v-else
+        v-if="redIcon !== false"
       >
         筛选:
       </div>
@@ -967,7 +957,7 @@ export default {
       const indexs = this.educationType.findIndex((item) => {
         return item.id === id;
       });
-      this.tireStatus = this.educationType[indexs].tireStatus || '';
+      this.tireStatus = this.educationType[indexs].tireStatus || "";
       if (!status1) {
         if (this.formData.projectId) {
           this.formData.projectId = "";

+ 1 - 1
src/utils/request.js

@@ -9,7 +9,7 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 // 创建axios实例
 // export const baseURL = process.env.VUE_APP_BASE_API
 // export const baseURL = 'https://ptapi.gdzzkj.net/'
-export const baseURL = 'http://192.168.1.7:7077/'
+export const baseURL = 'http://192.168.1.24:7077/'
 export const BASE_IMG_URL = process.env.VUE_APP_IMG_API
 const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分

+ 190 - 121
src/views/financed/arap/index.vue

@@ -8,6 +8,7 @@
       <el-radio-button :label="0">应收账款</el-radio-button>
       <el-radio-button :label="1">机构分成</el-radio-button>
       <el-radio-button :label="2">业务员提成</el-radio-button>
+      <el-radio-button :label="3">佣金结算</el-radio-button>
     </el-radio-group>
     <search-box-new
       ref="searchBox"
@@ -16,24 +17,19 @@
       @search="search"
       @init="init"
     />
-    <div class="dis_flex_order_li">
-      <div class="list" v-for="(item, index) in showTabList[type]" :key="index">
-        <img :src="item.img" alt="" />
-        <div class="right">
-          <h4>{{ item.label }}:</h4>
-          <p>{{ countInfo[item.prop] }}{{ item.ch || "元" }}</p>
-        </div>
-      </div>
-    </div>
+    <picture-list
+      :fn="getCountOrderNum"
+      :list="showTabList[type]"
+    ></picture-list>
     <table-list
       :key="type"
       rowKey="id"
       ref="tableList"
-      @openDialog="(row) => openDialog(row, 0)"
       :tableSets="tableSet"
       :tableData="tableData"
       :navText="navText"
       :loading="loading"
+      :objectSpanMethod="spanMethod"
     >
       <template slot="customize">
         <el-button @click="batchExport" type="primary"> 导出excel </el-button>
@@ -75,11 +71,14 @@
         ></el-checkbox>
       </template>
       <template slot="btn" slot-scope="props">
+        <el-button type="text" @click="openDialog(props.scope.row, type + 3)">
+          查看详情
+        </el-button>
         <el-button
           v-if="type == 0"
           type="text"
           :disabled="props.scope.row.creditStatus == 1"
-          @click="openDialog(props.scope.row, 1)"
+          @click="openDialog(props.scope.row, 0)"
         >
           催款提醒
         </el-button>
@@ -90,14 +89,14 @@
               props.scope.row.creditStatus == 1 ||
               props.scope.row.divideCheckStatus == 3
             "
-            @click="openDialog(props.scope.row, 2)"
+            @click="openDialog(props.scope.row, 1)"
           >
             点击审核
           </el-button>
           <el-button
             type="text"
             style="color: #e6a23c"
-            @click="openDialog(props.scope.row, 3)"
+            @click="openDialog(props.scope.row, 2)"
           >
             修改备注
           </el-button>
@@ -135,6 +134,8 @@
       :orderSn="activeOrderInfo.orderSn"
       :checkFrom="type + 1"
     ></dislog-set>
+    <!-- 查看详情 -->
+    <dislog-arap-details :type="type" :dialogVisible.sync="arapDialogVisible" />
   </div>
 </template>
 
@@ -146,6 +147,8 @@ import pagination from "@/components/pagination";
 import dislogTip from "./dislogTip.vue";
 import dislogOrderDetails from "../components/dislogOrderDetails.vue";
 import arapRemarks from "../components/arapRemarks.vue";
+import pictureList from "@/components/Comon/pictureList.vue";
+import dislogArapDetails from "../components/dislogArapDetails.vue";
 import { exportFn } from "@/utils/index.js";
 import {
   orderList,
@@ -164,41 +167,75 @@ export default {
     pagination,
     dislogTip,
     dislogOrderDetails,
+    dislogArapDetails,
     arapRemarks,
     dislogSet,
+    pictureList,
   },
   data() {
     return {
       showTabList: [
         [
           {
-            label: "合同金额",
+            label: "未收账款",
+            prop: "orderUncollectedTotal",
+            img: "未收款",
+          },
+        ],
+        [
+          {
+            label: "代付分成",
             prop: "orderPriceTotal",
-            img: require("@/assets/images/合同金额@2x.png"),
+            img: "未收款",
           },
           {
-            label: "已收账款",
+            label: "待扣分成",
             prop: "orderReceivedTotal",
-            img: require("@/assets/images/已收款@2x.png"),
+            img: "已退款",
           },
           {
-            label: "未收账款",
+            label: "已扣分成",
+            prop: "orderUncollectedTotal",
+            img: "成本金额",
+          },
+          {
+            label: "已付分成",
             prop: "orderUncollectedTotal",
-            img: require("@/assets/images/未收款@2x.png"),
+            img: "已收款",
           },
         ],
         [
           {
-            label: "待付账款",
-            prop: "sellerPay",
-            img: require("@/assets/images/未收款@2x.png"),
+            label: "代付分成",
+            prop: "orderPriceTotal",
+            img: "未收款",
+          },
+          {
+            label: "待扣分成",
+            prop: "orderReceivedTotal",
+            img: "已退款",
+          },
+          {
+            label: "已扣分成",
+            prop: "orderUncollectedTotal",
+            img: "成本金额",
+          },
+          {
+            label: "已付分成",
+            prop: "orderUncollectedTotal",
+            img: "已收款",
           },
         ],
         [
           {
-            label: "待付账款",
+            label: "待付佣金",
+            prop: "sellerPay",
+            img: "未收款",
+          },
+          {
+            label: "已付佣金",
             prop: "tenantPay",
-            img: require("@/assets/images/未收款@2x.png"),
+            mg: "已收款",
           },
         ],
       ],
@@ -211,7 +248,7 @@ export default {
         choice: false,
         addHide: true,
         openCheckMore: true,
-        changeWidth: "160px",
+        changeWidth: "240px",
         custom: false,
       },
       formData: {
@@ -230,7 +267,6 @@ export default {
           label: "订单单号",
           prop: "orderSn",
           hidden: true,
-          scope: "openDialog",
         },
         {
           label: "机构名称",
@@ -288,23 +324,32 @@ export default {
       ],
       tableSet1: [
         {
-          label: "下单时间",
-          prop: "startTime",
+          label: "机构名称",
+          prop: "tenantName",
           hidden: true,
-          scope: "aTimeList",
         },
         {
-          label: "订单单号",
-          prop: "orderSn",
+          label: "已付分成(元)",
+          prop: "divideCompanyMoney",
           hidden: true,
         },
         {
-          label: "机构名称",
-          prop: "tenantName",
+          label: "已扣分成(元)",
+          prop: "divideCompanyMoney",
+          hidden: true,
+        },
+        {
+          label: "待付月份",
+          prop: "divideCompanyMoney",
+          hidden: true,
+        },
+        {
+          label: "待付分成(元)",
+          prop: "divideCompanyMoney",
           hidden: true,
         },
         {
-          label: "待付账款(元)",
+          label: "待扣分成(元)",
           prop: "divideCompanyMoney",
           hidden: true,
         },
@@ -332,17 +377,6 @@ export default {
         },
       ],
       tableSet2: [
-        {
-          label: "下单时间",
-          prop: "buyTime",
-          hidden: true,
-          scope: "aTimeList",
-        },
-        {
-          label: "订单单号",
-          prop: "orderSn",
-          hidden: true,
-        },
         {
           label: "机构名称",
           prop: "tenantName",
@@ -359,18 +393,62 @@ export default {
           hidden: true,
         },
         {
-          label: "待付账款(元)",
+          label: "已付提成(元)",
           prop: "divideSellerMoney",
           hidden: true,
         },
         {
-          label: "预付时间",
-          prop: "predictReceiveTime",
+          label: "已扣提成(元)",
+          prop: "divideSellerMoney",
           hidden: true,
         },
         {
-          label: "剩余天数",
-          prop: "predictReceiveDay",
+          label: "待审月份",
+          prop: "divideSellerMoney",
+          hidden: true,
+        },
+        {
+          label: "待审提成(元)",
+          prop: "divideSellerMoney",
+          hidden: true,
+        },
+        {
+          label: "待扣提成(元)",
+          prop: "divideSellerMoney",
+          hidden: true,
+        },
+        {
+          label: "审核状态",
+          prop: "divideCheckStatus",
+          hidden: true,
+          scope: "solt",
+          soltName: "divideCheckStatus",
+        },
+        {
+          label: "备注",
+          prop: "remark",
+          hidden: true,
+        },
+      ],
+      tableSet3: [
+        {
+          label: "机构名称",
+          prop: "tenantName",
+          hidden: true,
+        },
+        {
+          label: "已付佣金(元)",
+          prop: "divideSellerMoney",
+          hidden: true,
+        },
+        {
+          label: "待付月份",
+          prop: "divideSellerMoney",
+          hidden: true,
+        },
+        {
+          label: "待付佣金(元)",
+          prop: "divideSellerMoney",
           hidden: true,
         },
         {
@@ -387,21 +465,54 @@ export default {
         },
       ],
       tableData: [], //表单数据
-      total: 0, //一共多少条
+      total: 4, //一共多少条
       tipDialogVisible: false,
       orderDialogVisible: false,
+      arapDialogVisible: false,
       remarkDialogVisible: false,
       examineDialogVisible: false,
-      type: 0,
+      type: 1,
       activeOrderInfo: {},
       roleList: [],
       countInfo: {},
+      spanData: {},
     };
   },
   created() {
-    this.init();
+    // this.init();
+    let data = [
+      { tenantName: 1, chi: [{}, {}, {}] },
+      { tenantName: 2, chi: [{}, {}] },
+      { tenantName: 3, chi: [{}] },
+    ];
+    let total = 0;
+    data.forEach((ele) => {
+      this.spanData[total] = ele.chi.length;
+      total += ele.chi.length;
+      ele.chi.map((e) => {
+        e.tenantName = ele.tenantName;
+      });
+      this.tableData.push(...ele.chi);
+    });
+    console.log(this.spanData, "this.spanData");
   },
   methods: {
+    spanMethod({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 1) {
+        const num = this.spanData[rowIndex];
+        if (num) {
+          return {
+            rowspan: num,
+            colspan: 1,
+          };
+        } else {
+          return {
+            rowspan: 0,
+            colspan: 0,
+          };
+        }
+      }
+    },
     divideCheckStatus(e) {
       var a = "";
       switch (e) {
@@ -429,7 +540,8 @@ export default {
     openDialog(data, type) {
       this.activeOrderInfo = data;
       this[
-        ["order", "tip", "examine", "remark"][type] + "DialogVisible"
+        ["tip", "examine", "remark", "order", "arap", "arap", "arap"][type] +
+          "DialogVisible"
       ] = true;
     },
     batchExport() {
@@ -495,7 +607,6 @@ export default {
     },
     init() {
       this.getRoleList();
-      this.getCountOrderNum();
       this.search(2);
     },
     getRoleList() {
@@ -504,8 +615,8 @@ export default {
       });
     },
     getCountOrderNum() {
-      countOrderNum().then((res) => {
-        this.countInfo = res.data;
+      return countOrderNum().then((res) => {
+        return Promise.resolve(res);
       });
     },
   },
@@ -514,34 +625,23 @@ export default {
       return this["tableSet" + this.type];
     },
     formList() {
+      const key = ["订单", "分成", "提成", "分成"][this.type];
       let data = [
         {
-          prop: "creditStatus",
-          placeholder: "账款状态",
-          scope: "select",
-          options: [
-            { label: "已结清", value: 1 },
-            { label: "未结清", value: 0 },
-          ],
+          prop: "tenantId",
+          placeholder: "机构选择",
+          scope: "systemtenantlist",
         },
         {
           prop1: "startTime",
           prop2: "endTime",
-          placeholder1: "开始时间",
-          placeholder2: "结束时间",
+          placeholder1: key + "开始时间",
+          placeholder2: key + "结束时间",
           scope: "moreDataPicker",
         },
       ];
-      if (this.type != 1) {
+      if (this.type != 0) {
         data.unshift(
-          {
-            prop: "roleId",
-            placeholder: "角色选择",
-            scope: "select",
-            options: this.roleList,
-            selectValue: "roleId",
-            selectLabel: "roleName",
-          },
           {
             prop: "divideStatus",
             placeholder: "审核状态",
@@ -554,15 +654,25 @@ export default {
             ],
           },
           {
-            prop: "tenantId",
-            placeholder: "机构选择",
-            scope: "systemtenantlist",
+            prop: "roleId",
+            placeholder: "审核角色",
+            scope: "select",
+            options: this.roleList,
+            selectValue: "roleId",
+            selectLabel: "roleName",
           }
         );
-      } else {
+      }
+      if (this.type == 0) {
+        data.push({
+          prop: "orderSn",
+          placeholder: "订单单号",
+        });
+      }
+      if (this.type == 0 || this.type == 2) {
         data.push({
           prop: "keyNo",
-          placeholder: "机构/业务号",
+          placeholder: "业务号",
         });
       }
       return data;
@@ -579,45 +689,4 @@ export default {
     content: ",";
   }
 }
-.dis_flex_order_li {
-  display: flex;
-  align-items: center;
-  flex-wrap: wrap;
-  & > .list {
-    user-select: none;
-    cursor: pointer;
-    transition: all 0.3s;
-    box-shadow: 0px 0px 4px 1px rgba(0, 0, 0, 0.2);
-    &:hover {
-      transform: scale(1.04);
-    }
-    width: 136px;
-    height: 44px;
-    border-radius: 6px;
-    display: flex;
-    align-items: center;
-    flex-shrink: 0;
-    margin-right: 10px;
-    margin-bottom: 10px;
-    & > img {
-      margin-left: 2px;
-      width: 40px;
-      height: 40px;
-    }
-    & > .right {
-      flex: 1;
-      padding-left: 4px;
-      & > h4 {
-        color: #000;
-        margin: 0;
-        font-size: 12px;
-      }
-      & > p {
-        font-size: 12px;
-        color: red;
-        margin: 0;
-      }
-    }
-  }
-}
 </style>

+ 394 - 0
src/views/financed/components/dislogArapDetails.vue

@@ -0,0 +1,394 @@
+<template>
+  <div class="arapDetail">
+    <BaseDialog
+      width="1200px"
+      :isShow.sync="isShow"
+      title="查看详情"
+      :isShowFooter="false"
+    >
+      <el-radio-group
+        v-model="status"
+        @change="changeGroup"
+        style="margin-bottom: 10px"
+      >
+        <el-radio-button :label="0">完单订单</el-radio-button>
+        <el-radio-button :label="1" v-if="type !== 3">退款订单</el-radio-button>
+        <el-radio-button :label="2">结算记录</el-radio-button>
+      </el-radio-group>
+      <search-box-new
+        ref="searchBox"
+        :formData="formData"
+        :formList="formList"
+        :redIcon="false"
+        @search="search"
+        @init="init"
+      />
+      <pictureList :list="showTabList[status]" />
+      <table-list
+        :key="type + status + ''"
+        :tableSets="tableSet"
+        :tableData="tableData"
+        :navText="dialogNavText"
+      >
+        <template slot="btn" slot-scope="props">
+          <el-button type="text" @click="openDialog(props.scope.row)">
+            查看详情
+          </el-button>
+        </template>
+      </table-list>
+      <pagination
+        :total="total"
+        :pageSize.sync="formData.pageSize"
+        :currentPage.sync="formData.pageNum"
+        @search="search"
+      />
+      <!-- 订单详情 -->
+      <dislog-order-details
+        :orderSn="activeOrderInfo.orderSn"
+        :orderFrom="activeOrderInfo.orderFrom"
+        :dialogVisible.sync="orderDialogVisible"
+      />
+    </BaseDialog>
+  </div>
+</template>
+
+<script>
+import tableList from "@/components/tableList";
+import pagination from "@/components/pagination";
+import searchBoxNew from "@/components/searchBoxNew";
+import pictureList from "@/components/Comon/pictureList.vue";
+import dislogOrderDetails from "../components/dislogOrderDetails.vue";
+export default {
+  name: "SaasMasterPlatformDislogArapDetails",
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false,
+    },
+    type: {
+      type: Number,
+      default: 1,
+    },
+  },
+  data() {
+    return {
+      dialogNavText: {
+        index: 0,
+        num: true,
+        border: true,
+        choice: false,
+        choiceRadio: false,
+        radioKey: "specTemplateId",
+        radioFixed: false,
+        addHide: !false,
+        tableHide: false,
+        dontNum: false,
+        headShow: false,
+        backFatherBtn: {
+          status: false,
+          title: "未定义",
+        },
+      },
+      tableData: [],
+      formData: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+      total: 0,
+      status: 0,
+      showTabList: [
+        [
+          {
+            label: "待付提成",
+            prop: "orderUncollectedTotal",
+            img: "未收款",
+          },
+          {
+            label: "已付提成",
+            prop: "orderUncollectedTotal",
+            img: "已收款",
+          },
+        ],
+        [
+          {
+            label: "待扣提成",
+            prop: "orderReceivedTotal",
+            img: "已退款",
+          },
+          {
+            label: "已扣提成",
+            prop: "orderUncollectedTotal",
+            img: "成本金额",
+          },
+        ],
+        [
+          {
+            label: "结算金额",
+            prop: "orderPriceTotal",
+            img: "已收款",
+          },
+          {
+            label: "完单提成",
+            prop: "orderReceivedTotal",
+            img: "已退款",
+          },
+          {
+            label: "扣除提成",
+            prop: "orderUncollectedTotal",
+            img: "未收款",
+          },
+        ],
+      ],
+      activeOrderInfo: {},
+      orderDialogVisible: false,
+      loading: false,
+    };
+  },
+
+  mounted() {},
+
+  methods: {
+    init() {},
+    search(v) {
+      this.loading = true;
+      if (v === 2) {
+        this.formData = {
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      //   this.getDataList(this.backData());
+    },
+    getDataList(data) {
+      const fn = [orderList, tenantList, sellerList][this.type];
+      fn(data)
+        .then((res) => {
+          this.tableData = res.rows;
+          this.total = res.total;
+          this.navText.index = res.total;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    changeGroup() {},
+    openDialog(data) {
+      this.activeOrderInfo = data;
+      this.orderDialogVisible = true;
+    },
+  },
+  components: {
+    tableList,
+    pagination,
+    searchBoxNew,
+    pictureList,
+    dislogOrderDetails,
+  },
+  computed: {
+    isShow: {
+      get() {
+        if (this.dialogVisible) {
+          this.init();
+        }
+        return this.dialogVisible;
+      },
+      set(val) {
+        this.$emit("update:dialogVisible", false);
+      },
+    },
+    text() {
+      return ["分成", "提成", "佣金"][this.type - 1];
+    },
+    formList() {
+      const key = ["完单", "退款", "结算"][this.status];
+      let data = [
+        {
+          prop1: "startTime",
+          prop2: "endTime",
+          placeholder1: key + "开始时间",
+          placeholder2: key + "结束时间",
+          scope: "moreDataPicker",
+        },
+      ];
+      if (this.status == 0) {
+        data.unshift({
+          prop: "divideStatus",
+          placeholder: "分成状态",
+          scope: "select",
+          options: [
+            { label: "待审核", value: 0 },
+            { label: "已通过", value: 1 },
+            { label: "未通过", value: 2 },
+            { label: "已撤销", value: 3 },
+          ],
+        });
+      }
+      if (this.status != 2) {
+        data.push({
+          prop: "orderSn",
+          placeholder: "订单单号",
+        });
+      }
+      return data;
+    },
+    tableSet() {
+      if (this.status == 0) {
+        let data = [
+          {
+            label: "完单时间",
+            prop: "userName",
+            hidden: true,
+          },
+          {
+            label: "订单单号",
+            prop: "orderSn",
+            hidden: true,
+          },
+          {
+            label: `已付${this.text}(元)`,
+            prop: "goodsName",
+            hidden: true,
+          },
+          {
+            label: `待付${this.text}(元)`,
+            prop: "userPhone",
+            hidden: true,
+          },
+        ];
+        if (this.type != 3) {
+          data.push(
+            {
+              label: "预付时间",
+              prop: "majorName",
+              hidden: true,
+            },
+            {
+              label: "剩余天数",
+              prop: "predictPayDay",
+              hidden: true,
+            }
+          );
+        } else {
+          data.push({
+            label: "佣金状态",
+            prop: "majorName",
+            hidden: true,
+          });
+        }
+        return data;
+      } else if (this.status == 1) {
+        return [
+          {
+            label: "退款时间",
+            prop: "userName",
+            hidden: true,
+          },
+          {
+            label: "订单单号",
+            prop: "orderSn",
+            hidden: true,
+          },
+          {
+            label: `扣除${this.text}(元)`,
+            prop: "goodsName",
+            hidden: true,
+          },
+          {
+            label: "扣除状态",
+            prop: "orderSn",
+            hidden: true,
+          },
+        ];
+      } else {
+        let data = [
+          {
+            label: "结算时间",
+            prop: "userName",
+            hidden: true,
+          },
+          {
+            label: "结算金额(元)",
+            prop: "orderSn",
+            hidden: true,
+          },
+          {
+            label: `完成${this.text}(元)`,
+            prop: "goodsName",
+            hidden: true,
+          },
+          {
+            label: `扣除${this.text}(元)`,
+            prop: "userPhone",
+            hidden: true,
+          },
+        ];
+        if (this.type != 3) {
+          data.push();
+        }
+        return data;
+      }
+    },
+    pictureList() {
+      if (this.status == 0) {
+        return [
+          {
+            label: `待付${this.text}`,
+            prop: "orderUncollectedTotal",
+            img: "未收款",
+          },
+          {
+            label: `已付${this.text}`,
+            prop: "orderUncollectedTotal",
+            img: "已收款",
+          },
+        ];
+      } else if (this.status == 1) {
+        return [
+          {
+            label: `待扣${this.text}`,
+            prop: "orderReceivedTotal",
+            img: "已退款",
+          },
+          {
+            label: `已扣${this.text}`,
+            prop: "orderUncollectedTotal",
+            img: "成本金额",
+          },
+        ];
+      } else {
+        let data = [
+          {
+            label: "结算金额",
+            prop: "orderPriceTotal",
+            img: "已收款",
+          },
+        ];
+        if (this.type != 3) {
+          data.push(
+            {
+              label: `完单${this.text}`,
+              prop: "orderReceivedTotal",
+              img: "已退款",
+            },
+            {
+              label: `扣除${this.text}`,
+              prop: "orderUncollectedTotal",
+              img: "未收款",
+            }
+          );
+        }
+        return data;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.arapDetail {
+  margin-top: 10px;
+  #tableList {
+    padding: 0;
+  }
+}
+</style>

+ 162 - 86
src/views/financed/cost/dislogSet.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <BaseDialog
-      width="1400px"
+      width="1800px"
       :isShow.sync="isShow"
       :title="title"
       @close="close"
@@ -70,60 +70,55 @@
             :prop="'itemList.' + index + '.itemCategory'"
             :rules="rules['itemCategory']"
           >
-            <el-select
-              @change="changeCategory(item)"
-              v-model="item.itemCategory"
-              placeholder="请选择成本类型"
-            >
+            <el-select v-model="item.itemCategory" placeholder="请选择成本类型">
               <el-option label="分成成本" :value="1"></el-option>
               <el-option label="其他成本" :value="2"></el-option>
             </el-select>
           </el-form-item>
-          <template v-if="item.itemCategory == 1">
-            <el-form-item
-              label=""
-              :prop="'itemList.' + index + '.educationTypeId'"
-              :rules="rules['educationTypeId']"
+          <el-form-item
+            label=""
+            :prop="'itemList.' + index + '.educationTypeId'"
+            :rules="rules['educationTypeId']"
+          >
+            <el-select
+              @change="changeEdu(item)"
+              v-model="item.educationTypeId"
+              placeholder="请选择教育类型"
             >
-              <el-select
-                @change="changeEdu(item)"
-                v-model="item.educationTypeId"
-                placeholder="请选择教育类型"
+              <el-option
+                v-for="item in eduList"
+                :key="item.id"
+                :label="
+                  item.schemeName +
+                  (item.schemeName ? '-' : '') +
+                  item.educationName
+                "
+                :value="item.id"
               >
-                <el-option
-                  v-for="item in eduList"
-                  :key="item.id"
-                  :label="
-                    item.schemeName +
-                    (item.schemeName ? '-' : '') +
-                    item.educationName
-                  "
-                  :value="item.id"
-                >
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item
-              label=""
-              :prop="'itemList.' + index + '.businessId'"
-              :rules="rules['businessId']"
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            v-if="item.educationTypeId != -1"
+            label=""
+            :prop="'itemList.' + index + '.businessId'"
+            :rules="rules['businessId']"
+          >
+            <el-select
+              filterable
+              v-model="item.businessId"
+              placeholder="请选择业务层次"
             >
-              <el-select
-                filterable
-                v-model="item.businessId"
-                placeholder="请选择业务层次"
+              <el-option
+                v-for="level in backbusinessList(item.educationTypeId)"
+                :key="level.businessId"
+                :label="level.aliasName"
+                :value="level.businessId"
+                @click.native="changeBus(item, level.projectId)"
               >
-                <el-option
-                  v-for="level in backbusinessList(item.educationTypeId)"
-                  :key="level.businessId"
-                  :label="level.aliasName"
-                  :value="level.businessId"
-                  @click.native="changeBus(item, level.projectId)"
-                >
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </template>
+              </el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item
             label=""
             :prop="'itemList.' + index + '.itemType'"
@@ -167,7 +162,7 @@
           >
             <el-input
               v-if="item.itemType == 1"
-              placeholder="百分比成本"
+              placeholder="输入百分比"
               v-model="item.typeValue"
               key="2"
               v-int="{ max: 100 }"
@@ -177,13 +172,60 @@
             <el-input
               key="1"
               v-else
-              placeholder="固定成本"
+              placeholder="固定金额"
               v-model="item.typeValue"
               v-int
             >
               <template slot="append"> 元 </template>
             </el-input>
           </el-form-item>
+          <el-form-item label="">
+            <el-checkbox
+              :true-label="1"
+              :false-label="0"
+              v-model="item.dockStatus"
+              >成本扣除</el-checkbox
+            >
+          </el-form-item>
+          <template v-if="item.dockStatus == 1">
+            <el-form-item
+              label=""
+              :prop="'itemList.' + index + '.dockType'"
+              :rules="rules['dockType']"
+            >
+              <el-select v-model="item.dockType" placeholder="请选择扣除类型">
+                <el-option label="百分比扣除" :value="1"></el-option>
+                <el-option label="固定扣除" :value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              v-if="item.dockType"
+              class="ddd"
+              label-width="0"
+              :prop="'itemList.' + index + '.dockValue'"
+              label=" "
+              :rules="rules['dockValue']"
+            >
+              <el-input
+                v-if="item.dockType == 1"
+                placeholder="输入百分比"
+                v-model="item.dockValue"
+                key="2"
+                v-int="{ max: 100 }"
+              >
+                <template slot="append"> % </template>
+              </el-input>
+              <el-input
+                key="1"
+                v-else
+                placeholder="固定金额"
+                v-model="item.dockValue"
+                v-int
+              >
+                <template slot="append"> 元 </template>
+              </el-input>
+            </el-form-item>
+          </template>
           <el-form-item label-width="0" label=" ">
             <div class="btns">
               <i @click="add(index, item)" class="el-icon-connection"></i>
@@ -245,6 +287,33 @@ export default {
       }
       callback();
     };
+    var checkEduId = (rule, value, callback) => {
+      const len = this.itemList.length;
+      if (len > 1) {
+        const len1 = this.itemList.filter(
+          (e) => e.educationTypeId == -1
+        ).length;
+        if (len1 > 0 && len1 != len) {
+          callback(new Error("需统一不限!"));
+        }
+      }
+      callback();
+    };
+    var checkBusId = (rule, value, callback) => {
+      const { educationTypeId } = this.itemList[rule.field.split(".")[1]];
+      if (this.itemList.length > 1) {
+        const flag = this.itemList.some(
+          (e) => e.educationTypeId == educationTypeId && e.businessId == -1
+        );
+        if (flag) {
+          const flag1 = this.itemList.some(
+            (e) => e.educationTypeId == educationTypeId && e.businessId != -1
+          );
+          flag1 && callback(new Error("需统一不限!"));
+        }
+      }
+      callback();
+    };
     return {
       form: {},
       rules: {
@@ -259,9 +328,11 @@ export default {
         ],
         businessId: [
           { required: true, message: "请选择业务层次", trigger: "blur" },
+          { validator: checkBusId, trigger: "change" },
         ],
         educationTypeId: [
           { required: true, message: "请选择教育类型", trigger: "change" },
+          { validator: checkEduId, trigger: "change" },
         ],
         itemCategory: [
           { required: true, message: "请选择业务类型", trigger: "change" },
@@ -270,7 +341,13 @@ export default {
           { required: true, message: "请选择成本类型", trigger: "change" },
         ],
         typeValue: [
-          { required: true, message: "请输入百分比成本", trigger: "blur" },
+          { required: true, message: "请输入成本值", trigger: "blur" },
+        ],
+        dockType: [
+          { required: true, message: "请选择扣除类型", trigger: "change" },
+        ],
+        dockValue: [
+          { required: true, message: "请输入扣除值", trigger: "blur" },
         ],
         minValue: [{ validator: checkMinValue, trigger: "blur" }],
       },
@@ -279,7 +356,7 @@ export default {
     };
   },
   methods: {
-    init() { 
+    init() {
       this.resetForm();
       if (this.type === 3) {
         this.getOrderCostDetail();
@@ -318,13 +395,21 @@ export default {
     getEduList() {
       if (this.eduList.length) return;
       eduList({}).then((res) => {
-        this.eduList = res.rows;
+        this.eduList = [
+          { schemeName: "", educationName: "不限", id: -1 },
+          ...res.rows,
+        ];
       });
     },
     backbusinessList(eduId) {
       if (!eduId || !this.eduList.length) return [];
       let data = this.eduList.find((e) => e.id == eduId);
-      return data.businessList || [];
+      return data.businessList
+        ? [
+            { aliasName: "不限", businessId: -1, projectId: -1 },
+            ...data.businessList,
+          ]
+        : [];
     },
     getTenantList() {
       if (this.tenantList.length) return;
@@ -333,53 +418,44 @@ export default {
       });
     },
     changeEdu(data) {
-      data.businessId = undefined;
-      data.projectId = undefined;
+      let value = data.educationTypeId == -1 ? -1 : undefined;
+      data.businessId = value;
+      data.projectId = value;
     },
     changeBus(data, projectId) {
       data.projectId = projectId;
     },
-    changeCategory(data) {
-      data.educationTypeId = undefined;
-      this.changeEdu(data);
-    },
     add(index, data) {
-      data = data
-        ? JSON.parse(JSON.stringify(data))
-        : {
-            projectId: undefined,
-            itemName: undefined,
-            itemCategory: undefined,
-            businessId: undefined,
-            educationTypeId: undefined,
-            itemType: undefined,
-            typeValue: undefined,
-            minValue: undefined,
-            maxValue: undefined,
-          };
+      data = data ? JSON.parse(JSON.stringify(data)) : this.backItem();
       this.itemList.splice(index + 1, 0, data);
     },
     del(index) {
       this.itemList.splice(index, 1);
     },
     close() {
-      this.$refs["form"].resetFields();
+      this.$nextTick(() => {
+        this.$refs["form"].resetFields();
+      });
+    },
+    backItem() {
+      return {
+        projectId: undefined,
+        itemName: undefined,
+        itemCategory: undefined,
+        businessId: undefined,
+        educationTypeId: undefined,
+        itemType: undefined,
+        typeValue: undefined,
+        minValue: undefined,
+        maxValue: undefined,
+        dockStatus: undefined,
+        dockType: undefined,
+        dockValue: undefined,
+      };
     },
     resetForm() {
       this.form = {
-        itemList: [
-          {
-            projectId: undefined,
-            itemName: undefined,
-            itemCategory: undefined,
-            businessId: undefined,
-            educationTypeId: undefined,
-            itemType: undefined,
-            typeValue: undefined,
-            minValue: undefined,
-            maxValue: undefined,
-          },
-        ],
+        itemList: [this.backItem()],
         tpId: undefined,
         tpName: undefined,
         defaultStatus: 0,