Просмотр исходного кода

Merge branch 'dev' of http://www.baoxianzhanggui.com:8090/sxzgd/vue-insagent-pc into dev

yaoyao 2 лет назад
Родитель
Сommit
bec6b915db
32 измененных файлов с 2337 добавлено и 41 удалено
  1. 2 2
      config/dev.env.js
  2. BIN
      src/assets/customerService/Frame.png
  3. BIN
      src/assets/customerService/Frame1.png
  4. BIN
      src/assets/customerService/Frame2.png
  5. BIN
      src/assets/customerService/customerService.png
  6. BIN
      src/assets/customerService/customerService1.png
  7. 39 7
      src/components/Form/retrievalForm.vue
  8. 11 2
      src/components/TemplateForm/index.vue
  9. 17 1
      src/components/TemplateTable/index.vue
  10. 83 0
      src/components/customerService/Loading.vue
  11. 178 0
      src/components/customerService/floatingBar.vue
  12. 278 0
      src/components/customerService/modalDialog.vue
  13. 3 0
      src/http/api.js
  14. 18 0
      src/http/moudules/service/aiSupport.js
  15. 149 0
      src/http/moudules/sys.js
  16. 655 0
      src/views/AgreementManage/ChannelCost.vue
  17. 13 0
      src/views/Core/components/detailsDialog.vue
  18. 494 0
      src/views/FinancialManagement/AddInvestment.vue
  19. 2 1
      src/views/FinancialManagement/CostVerification/Baosi.vue
  20. 31 0
      src/views/FinancialManagement/WithdrawalManagement/WithdrawalProceduresPending.vue
  21. 1 0
      src/views/Letter/Wallet/AutoInsuranceDetails.vue
  22. 1 0
      src/views/Login.vue
  23. 54 22
      src/views/PeopleManage/Institutional.vue
  24. 3 1
      src/views/PeopleManage/PcLoginRecord.vue
  25. 2 0
      src/views/PeopleManage/UserMap.vue
  26. 288 0
      src/views/Sys/ChannelGrouping.vue
  27. 1 1
      src/views/Task/AgentPoolChannel/AgentPoolChannel3.vue
  28. 1 1
      src/views/Task/CompanyPoolChannel/CompanyPoolChannel3.vue
  29. 2 2
      src/views/Task/ElectricSales/AgentPoolChannel3.vue
  30. 1 1
      src/views/Task/TaskPoolChannel/TaskPoolChannel3.vue
  31. 4 0
      src/views/Task/daikeComponents/KtLetter.vue
  32. 6 0
      src/views/Task/mixin.js

+ 2 - 2
config/dev.env.js

@@ -5,7 +5,7 @@ const prodEnv = require('./prod.env')
 module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
   ENV_CONFIG: '"dev"',
-  BASE_URL: '"https://test.baoxianzhanggui.com/web-api"',//测试服务器
+  // BASE_URL: '"https://test.baoxianzhanggui.com/web-api"',//测试服务器
   // BASE_URL:'"https://sxzgkj.baoxianzhanggui.com/web-api"',//正式服务器
   // BASE_URL:'"https://sxzgkj.baoxianzhanggui.com/web-api"'//正式服务器
   // BASE_URL: '"http://192.168.0.115:8080/"', //凯森
@@ -18,7 +18,7 @@ module.exports = merge(prodEnv, {
   // BASE_URL: '"http://192.168.0.250:8080/"',//
   // BASE_URL: '"http:///192.168.0.103:8080/"',//霍续亮
   // BASE_URL: '"http://192.168.0.52:8080/"',//贺礼霄
-  // BASE_URL: '"http:///192.168.0.55:8080/"',//蔡雅茹
+  BASE_URL: '"http:///192.168.0.55:8080/"',// 董鑫
   CONSOLE_BASE_URL: '"http://localhost:8080/"', //控制台测试服务器
   // CONSOLE_BASE_URL: '"https://test.baoxianzhanggui.com/console-api"' //控制台正式服务器
   APP_BASE_URL: '"https://pre.baoxianzhanggui.com/web-api"',    // app打包上传地址

BIN
src/assets/customerService/Frame.png


BIN
src/assets/customerService/Frame1.png


BIN
src/assets/customerService/Frame2.png


BIN
src/assets/customerService/customerService.png


BIN
src/assets/customerService/customerService1.png


+ 39 - 7
src/components/Form/retrievalForm.vue

@@ -112,6 +112,10 @@ export default {
       type: String,
       default: "120px",
     },
+    dateType :{
+      type: String,
+      default: "0",
+    }
   },
   data() {
     return {
@@ -131,14 +135,42 @@ export default {
   },
   created() {
     this.fields.forEach((field) => {
-      if (field.label === "报价时间" && !this.formData[field.list]) {
-        this.$set(this.formData, field.list, [
-          this.currentDate,
-          this.currentDate,
-        ]);
-        this.$set(this.formData, field.name[0], this.currentDate);
-        this.$set(this.formData, field.name[1], this.currentDate);
+      if(this.dateType!="3"){
+        if (field.label === "报价时间" && !this.formData[field.list]) {
+          this.$set(this.formData, field.list, [
+            this.currentDate,
+            this.currentDate,
+          ]);
+          this.$set(this.formData, field.name[0], this.currentDate);
+          this.$set(this.formData, field.name[1], this.currentDate);
+        }
+        if (field.label === "签单时间" && !this.formData[field.list]) {
+          this.$set(this.formData, field.list, [
+            '',
+            '',
+          ]);
+          this.$set(this.formData, field.name[0], '');
+          this.$set(this.formData, field.name[1], '');
+        }
+      }else{
+        if (field.label === "报价时间" && !this.formData[field.list]) {
+          this.$set(this.formData, field.list, [
+            '',
+            '',
+          ]);
+          this.$set(this.formData, field.name[0], '');
+          this.$set(this.formData, field.name[1], '');
+        }
+        if (field.label === "签单时间" && !this.formData[field.list]) {
+          this.$set(this.formData, field.list, [
+            this.currentDate,
+            this.currentDate,
+          ]);
+          this.$set(this.formData, field.name[0], this.currentDate);
+          this.$set(this.formData, field.name[1], this.currentDate);
+        }
       }
+      
     });
     this.formFields = this.fields;
     this.resetForm();

+ 11 - 2
src/components/TemplateForm/index.vue

@@ -1,6 +1,6 @@
 <template>
-    <el-form :model="formData" 
-     ref="publicForm" :inline="true" size="small" >
+    <el-form :model="formData"  :rules="rules"
+     ref="publicForm" :inline="inline" size="small" >
         <el-row :gutter="20"> 
             <el-col :span="spanWidth?spanWidth:8" v-for="f in ruleForm" :key="f.prop">
                 <el-form-item :label="f.label" :prop="f.prop" :label-width="labelWidth||'120px'" >
@@ -14,6 +14,7 @@
                                 :placeholder="'请输入' + f.label"
                                 :disabled="f.disabled || false"
                                 :showPassword="f.showPassword"
+                                @change="f.change($event)"
                                 :clearable="f.clearable||true"/>
                         </template>
                         <!-- <template v-else-if="f.type === 'company'">
@@ -155,6 +156,14 @@ export default {
             type: Object,
             default: {}
         },
+        inline: {
+            type: Boolean,
+            default: true
+        },
+        rules: {
+            type: Object,
+            default: {}
+        },
         labelWidth: {
             type: String,
             default: ''

+ 17 - 1
src/components/TemplateTable/index.vue

@@ -207,8 +207,9 @@
       :show-summary="tableConfig.showSummary || false"
       :data="data"
       border
-      size="small"
+      
       style="width: 100%"
+      @expand-change="handleRowChange"
       :height="tableConfig.tableHeight || tableHeight"
       v-loading="tableConfig.loading"
       element-loading-text="数据加载中"
@@ -226,6 +227,11 @@
       :cell-class-name="rowClass"
       
     >
+    <el-table-column v-if="tableConfig.expand" type="expand" >
+      <template slot-scope="scope" >
+          <slot v-bind="scope" name="expand"></slot>
+       </template>
+       </el-table-column>
       <el-table-column
         type="selection"
         :width="tableConfig.selectionWidth || '50'"
@@ -494,6 +500,16 @@ export default {
         this.$emit("companySelectChange", { id, filed });
       }
     },
+    handleRowChange(row) {
+      this.$emit("handleRowChange", row);
+      //   if (!row.expanded) {
+      //     this.$emit("handleRowChange", row);
+      //       this.$refs.table.toggleRowExpansion(row, row.expanded);
+      // } else {
+      //   row.expanded = !row.expanded;
+      //   this.$refs.table.toggleRowExpansion(row, row.expanded);
+      // }
+    },
     formatDateTime(date) {
       let d = new Date(date),
         month = "" + (d.getMonth() + 1),

+ 83 - 0
src/components/customerService/Loading.vue

@@ -0,0 +1,83 @@
+<template>
+  <div>
+    <div class="loader">
+      <li class="ball"></li>
+      <li class="ball"></li>
+      <li class="ball"></li>
+    </div>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+export default {
+  // 数据存放区域
+  data() {
+    return {
+    }
+  },
+  // 生命周期函数
+  created() {
+  },
+  // 方法函数
+  methods: {
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+/* From Uiverse.io by JkHuger */
+/* From Uiverse.io by G4b413l */
+/* From Uiverse.io by ashish-yadv */
+.loader {
+  width: 60px;
+  display: flex;
+  justify-content: center;
+}
+
+.ball {
+  list-style: none;
+  width: 8px;
+  height: 8px;
+  border-radius: 50%;
+  background-color: #fff;
+  margin-top:10px;
+  margin:0 4px;
+}
+
+.ball:nth-child(1) {
+  animation: bounce-1 1.5s ease-in-out infinite;
+}
+
+@keyframes bounce-1 {
+  50% {
+    transform: translateY(-10px);
+    background-color: #0052FF;
+  }
+}
+
+.ball:nth-child(2) {
+  animation: bounce-3 1.5s ease-in-out 0.3s infinite;
+}
+
+@keyframes bounce-2 {
+  50% {
+    transform: translateY(-10px);
+    background-color: #0052FF;
+  }
+}
+
+.ball:nth-child(3) {
+  animation: bounce-3 1.5s ease-in-out 0.6s infinite;
+}
+
+@keyframes bounce-3 {
+  50% {
+    transform: translateY(-10px);
+    background-color: #0052FF;
+  }
+}
+</style>

+ 178 - 0
src/components/customerService/floatingBar.vue

@@ -0,0 +1,178 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <div class="floatingBar flex f-c  a-c j-s">
+      <div class="aiSupport flex f-c a-c " @click="aiSupportClick">
+        <img src="../../assets/customerService/customerService.png" alt="">
+        <span>客服</span>
+      </div>
+      <el-popover placement="right-end" width="30" trigger="hover">
+        <div class="flex f-c a-c">
+          <div class="qrCode flex j-c a-c">
+            <div id="qrcode" ref="qrcode"></div>
+          </div>
+          <span style="font-size: 14px;color: #333;margin-top: 5px;">微信扫码咨询</span>
+        </div>
+        <div class="humanAgent flex f-c j-c a-c" slot="reference" @click="humanAgentClick">
+          <img src="../../assets/customerService/Frame.png" alt="">
+          <span>掌柜</span>
+          <span>客服</span>
+        </div>
+      </el-popover>
+    </div>
+    <modalDialog ref="modalDialog"></modalDialog>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import QRCode from "qrcodejs2";
+import modalDialog from "@/components/customerService/modalDialog.vue";
+
+export default {
+  // 数据存放区域
+  components: {
+    modalDialog,
+  },
+  data() {
+    return {
+      qrcode: null,
+      qrcodeWidth: "130",
+      qrcodeHeight: "130",
+    }
+  },
+  // 生命周期函数
+  created() {
+    this.wechat();
+  },
+  // 方法函数
+  methods: {
+
+    aiSupportClick() {
+      this.$refs.modalDialog.setBackupVisible(true);
+    },
+    wechat() {
+      this.$api.aiSupport.wechatpicture().then((res) => {
+        if (res.code == '200') {
+          this.$nextTick(() => {
+            this.creatQrCode(res.data.wechatPictureUrl);
+          });
+        } else {
+          this.$nextTick(() => {
+            this.creatQrCode("https://www.baidu.com/s?ie=UTF-8&wd=baoidu");
+          });
+        }
+      });
+    },
+    //二维码生成插件
+    creatQrCode(text) {
+      // 查找并删除旧的二维码DOM元素
+      let element = document.getElementById("qrcode");
+      while (element.firstChild) {
+        element.removeChild(element.firstChild);
+      }
+      // 创建新的QRCode实例
+      this.qrcode = new QRCode("qrcode", {
+        text: text,
+        width: this.qrcodeWidth,
+        height: this.qrcodeHeight,
+        colorDark: "#000000",
+        colorLight: "#ffffff",
+        correctLevel: QRCode.CorrectLevel.H,
+      });
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+/deep/ {
+  .el-popover {
+    padding: 5px;
+  }
+}
+#qrCode {
+  display: inline-block;
+  margin: 0 auto;
+  /*水平居中*/
+  position: relative;
+  top: 15%;
+}
+
+#qrCode img {
+  width: 130px;
+  height: 130px;
+  background-color: #fff;
+  padding: 6px;
+}
+.floatingBar {
+  width: auto;
+  position: fixed;
+  bottom: 10%;
+  right: 0;
+  z-index: 99;
+  background: #FFFFFF;
+  box-shadow: 6px 6px 12px 0px rgba(0, 70, 128, 0.08);
+  border-radius: 4px 0px 0px 4px;
+  border: 1px solid #F1F3F6;
+  padding: 8px 6px;
+  box-sizing: border-box;
+
+  .aiSupport {
+    cursor: pointer;
+    background: #FFFFFF;
+    border-radius: 4px 4px 4px 4px;
+    padding: 4px 2px;
+    margin-bottom: 10px;
+
+    span {
+      color: #202D45;
+      font-size: 12px;
+      line-height: 14px;
+      margin-top: 4px;
+    }
+
+    img {
+      width: 32px;
+      height: 44px;
+    }
+  }
+
+  .aiSupport:hover {
+    background: #F0F6FF;
+  }
+
+  .humanAgent {
+    cursor: pointer;
+    background: #fff;
+    border-radius: 4px 4px 4px 4px;
+    padding: 4px 2px;
+
+    span {
+      color: #202D45;
+      font-size: 12px;
+      line-height: 14px;
+      margin-top: 4px;
+    }
+
+    img {
+      width: 32px;
+      height: 26px;
+    }
+  }
+
+  .humanAgent:hover {
+    background: #F0F6FF;
+  }
+}
+
+.qrCode {
+  width: 140px;
+  height: 140px;
+  border: 1px solid #EAEDF1;
+}
+</style>

+ 278 - 0
src/components/customerService/modalDialog.vue

@@ -0,0 +1,278 @@
+<!-- 模板区域 -->
+<template>
+  <div>
+    <!-- 模板内容 -->
+    <el-drawer title="掌柜在线客服" :visible.sync="drawer" :direction="direction" :show-close="true" :modal="false" :size="440"
+      :wrapperClosable="false">
+      <div class="drawer">
+        <div class="scroll-view" ref="scrollView">
+          <div id="okk">
+            <div class="flex f-c j-c" v-for="(item, index) in msgList" :key="index">
+              <div class="flex f-c " v-if="!item.my">
+                <div class="flex j-c a-c">
+                  <span class="initTime flex j-c a-c">{{ item.initTime }}</span>
+                </div>
+                <div style="max-width: 350px;" class="flex">
+                  <div class="conversationText flex j-s a-c">
+                    <img v-if="index == 0" src="../../assets/customerService/customerService1.png" alt="">
+                    <span :style="{ marginLeft: index === 0 ? '60px' : '10px' }">{{ item.msg }}</span>
+                  </div>
+                </div>
+              </div>
+              <div class="flex f-c a-end" v-if="item.my">
+                <div class="conversationText1 flex j-s a-c">
+                  <span>{{ item.msg }}</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="flex f-c " v-if="msgLoad" style="width:65px;">
+            <div class="conversationText1loding flex j-c a-end">
+              <isLoading />
+            </div>
+          </div>
+        </div>
+        <div class="outerLayer">
+          <div class="textInput flex j-s a-c">
+            <el-input v-model="msg" class="Input" placeholder="请描述您的问题" @focus="Inputfocus" @blur="InputBlur"
+              @change="InputChange"></el-input>
+            <img v-if="InputfocusShow" src="../../assets/customerService/Frame1.png" alt="">
+            <img v-else src="../../assets/customerService/Frame2.png" alt="">
+          </div>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<!-- 行为区域 -->
+<script>
+import isLoading from "@/components/customerService/Loading.vue";
+
+export default {
+  components: {
+    isLoading,
+  },
+  // 数据存放区域
+  data() {
+    return {
+      InputfocusShow: false,
+      drawer: false,
+      direction: 'rtl',
+      msgLoad: false,
+      msg: "",
+      msgList: [{
+        my: false,
+        msg: "您好,掌柜智能客服助理为您服务!",
+        initTime: this.getFormattedTime(),
+      },
+      ],
+    }
+  },
+  // 生命周期函数
+  created() {
+
+  },
+  // 方法函数
+  methods: {
+    InputChange() {
+      if (this.msg == "") {
+        return 0;
+      }
+      this.msgList.push({
+        "msg": this.msg,
+        "my": true
+      })
+
+      // 保证消息可见
+      this.msgGo()
+      // 回答问题
+      this.msgKf(this.msg)
+      // 清除消息
+      this.msg = ""
+    },
+    msgGo() {
+      // 选择消息体元素
+      // const scrollView = document.querySelector('.scroll-view'); // 获取第一个类名为 'arr' 的元素
+      const content = document.getElementById('okk');
+      if (!content) return; // 确保元素存在
+      // 获取当前视口高度
+      // 这里直接获取消息体高度
+      this.$nextTick(() => {
+          const scrollView = this.$refs.scrollView;
+          scrollView.scrollTop = scrollView.scrollHeight;
+      });
+    },
+    msgKf(msg) {
+      // loading
+      this.msgLoad = true
+      // 这里连接服务器获取答案
+      this.$api.aiSupport.AIsendMessage({
+        message: msg
+      }).then((res) => {
+        if (res.code == 200) {
+          setTimeout(() => {
+            // 取消loading
+            this.msgLoad = false
+            this.msgList.push({
+              my: false,
+              msg: res.data.message,
+              initTime: res.data.date
+            })
+            this.msgGo()
+          }, 1000)
+        }
+      });
+    },
+    Inputfocus() {
+      this.InputfocusShow = true;
+    },
+    InputBlur() {
+      this.InputfocusShow = false;
+
+    },
+    getFormattedTime() {
+      const date = new Date();
+      const year = date.getFullYear();
+      const month = (date.getMonth() + 1).toString().padStart(2, '0');
+      const day = date.getDate().toString().padStart(2, '0');
+      const hours = date.getHours().toString().padStart(2, '0');
+      const minutes = date.getMinutes().toString().padStart(2, '0');
+
+      return `${year}-${month}-${day} ${hours}:${minutes}`;
+    },
+    setBackupVisible: function (backupVisible) {
+      this.drawer = backupVisible
+    },
+  },
+  // 计算属性
+  computed: {
+  }
+}
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+/deep/ {
+  .el-drawer {
+    height: 600px;
+    border-radius: 8px;
+    position: fixed;
+    bottom: 8%;
+    right: 5%;
+    top: initial;
+    background: linear-gradient(90deg, #FFFFFF 0%, #EDF3FE 100%);
+  }
+
+  .el-drawer__header {
+    color: #333;
+    font-weight: bold;
+    font-size: 16px;
+    margin-bottom: 16px;
+  }
+
+  .el-drawer__close-btn {
+    color: #979AA0;
+  }
+
+  .el-input__inner {
+    height: 48px;
+    border: none;
+  }
+}
+
+.drawer {
+
+  .scroll-view {
+    padding: 20px;
+    overflow-y: auto;
+    /* 允许垂直滚动 */
+    height: calc(600px - 113px);
+    box-sizing: border-box;
+    padding-bottom: 50px;
+    /* 适应消息区和底部导航栏 */
+    cursor: pointer;
+
+    /* 防止内容溢出 */
+    .initTime {
+      background: rgba(207, 207, 207, 0.2);
+      border-radius: 20px 20px 20px 20px;
+      padding: 4px 16px;
+      font-size: 12px;
+      color: rgba(0, 0, 0, 0.85);
+      margin-bottom: 15px;
+    }
+
+    .conversationText {
+      background: #FFFFFF;
+      box-shadow: 0px 4px 10px 0px #DAE3F4;
+      border-radius: 0px 4px 4px 4px;
+      margin-bottom: 18px;
+      position: relative;
+      padding: 8px;
+
+      span {
+
+        font-size: 14px;
+        color: #000000;
+        word-break: break-all;
+      }
+
+      img {
+        width: 58px;
+        height: 58px;
+        position: absolute;
+        bottom: 0;
+        left: 0;
+      }
+    }
+
+    .conversationText1 {
+      background: #0052FF;
+      box-shadow: 0px 4px 10px 0px #DAE3F4;
+      border-radius: 4px;
+      padding: 8px;
+      margin-bottom: 18px;
+
+      span {
+        color: #FFFFFF;
+        font-size: 14px;
+      }
+    }
+
+    .conversationText1loding {
+      box-shadow: 0px 4px 10px 0px #DAE3F4;
+      border-radius: 4px;
+      height: 36px;
+      padding: 4px 8px;
+      box-sizing: border-box;
+
+    }
+  }
+
+  .outerLayer {
+    width: 100%;
+    height: auto;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    background: linear-gradient(90deg, #FFFFFF 0%, #EDF3FE 100%);
+    padding: 10px 20px;
+    box-sizing: border-box;
+
+    .textInput {
+      width: 100%;
+      height: 48px;
+      background: #FFFFFF;
+      box-shadow: 6px 6px 12px 0px rgba(83, 98, 153, 0.08);
+      border-radius: 4px 4px 4px 4px;
+
+      img {
+        width: 28px;
+        height: 28px;
+        margin-right: 20px;
+      }
+    }
+  }
+
+}
+</style>

+ 3 - 0
src/http/api.js

@@ -50,6 +50,8 @@ import * as expense from './moudules/expense.js'
 import * as report from './moudules/report.js'
 import * as one from './moudules/service/one'
 import * as sys from './moudules/sys.js'
+//客服
+import * as aiSupport from './moudules/service/aiSupport'
 
 import * as bindUser from './moudules/bindUser.js'
 
@@ -62,6 +64,7 @@ export default {
     menu,
     dict,
     log,
+    aiSupport,
     settlement,
     /////////////////////////////
     esmTeam,

+ 18 - 0
src/http/moudules/service/aiSupport.js

@@ -0,0 +1,18 @@
+import axios from '../../axios'
+
+// AI客服发送消息
+export const AIsendMessage= (data) => {
+    return axios({
+        url: "/customer/ai/sendMessage",
+        method: "post",
+        data
+    })
+}
+// 获取企业微信二维码
+export const wechatpicture= () => {
+  return axios({
+      url: "/sys/qy/wechat/find/picture",
+      method: "get",
+
+  })
+}

+ 149 - 0
src/http/moudules/sys.js

@@ -225,4 +225,153 @@ export const vehicleConfigOpen = (id) => {
         url: '/sys/vehicleConfig/open/' + id,
         method: 'put',
     })
+}
+
+// 渠道分组管理
+
+export const sysChannelGradePage = (data) => {
+    return axios({
+        url: '/sysChannelGrade/queryPage',
+        method: 'post',
+        data
+    })
+}
+export const sysChannelGradeGrade = (data) => {
+    return axios({
+        url: '/sysChannelGrade/grade',
+        method: 'post',
+        data
+    })
+}
+export const sysChannelGradeDelete = (params) => {
+    return axios({
+        url: '/sysChannelGrade/grade/' + params,
+        method: 'delete',
+    })
+}
+export const sysChannelGradeUp = (params,data) => {
+    return axios({
+        url: '/sysChannelGrade/grade/'+ params,
+        method: 'PUT',
+        data
+    })
+}
+
+export const sysChannelauthorized = (data) => {
+    return axios({
+        url: '/sysChannelGrade/grade/authorized',
+        method: 'post',
+        data
+    })
+}
+
+
+// 渠道费用分组
+export const queryChannelPage = (data) => {
+    return axios({
+        url: '/sysChannelGroup/queryChannelPage',
+        method: 'post',
+        data
+    })
+}
+export const sysChannelGroupChannel = (data) => {
+    return axios({
+        url: '/sysChannelGroup/channel',
+        method: 'post',
+        data
+    })
+}
+export const sysChannelGroupDelete = (params) => {
+    return axios({
+        url: '/sysChannelGroup/channel/' + params,
+        method: 'delete',
+    })
+}
+export const sysChannelGroupQuery = (id) => {
+    return axios({
+        url: '/sysChannelGroup/query/'+ id,
+        method: 'post',
+    })
+}
+export const sysChannelGradeList = () => {
+    return axios({
+        url: '/sysChannelGrade/queryList',
+        method: 'post',
+    })
+}
+export const sysChannelGroupGradeUp = (params,data) => {
+    return axios({
+        url: '/sysChannelGroup/channel/'+ params,
+        method: 'PUT',
+        data
+    })
+}
+export const sysChannelGroupDetail = (id) => {
+    return axios({
+        url: '/sysChannelGroup/query/'+ id,
+        method: 'post',
+    })
+}
+export const sysChannelGroupCostSet = (data) => {
+    return axios({
+        url: '/sysChannelGroup/channel/costSet',
+        method: 'post',
+        data
+    })
+    
+}
+export const agreementGetProductPage = (data) => {
+    return axios({
+        url: '/sysChannelGroup/queryInfo',
+        method: 'post',
+        data
+    })
+}
+export const queryRelationList = (id) => {
+    return axios({
+        url: '/sysChannelGrade/queryRelationList/'+ id,
+        method: 'post',
+    })
+}
+
+// 加投结算管理
+export const sysChannelCostPage = (data) => {
+    return axios({
+        url: '/sysChannelCost/queryPage',
+        method: 'post',
+        data
+    })
+}
+export const sysChannelCostDetail = (id) => {
+    return axios({
+        url: '/sysChannelCost/query/'+ id,
+        method: 'post',
+    })
+}
+export const sysChannelGroupDel = (params) => {
+    return axios({
+        url: '/sysChannelCost/del/' + params,
+        method: 'delete',
+    })
+}
+export const sysChannelCostModify = (params,data) => {
+    return axios({
+        url: '/sysChannelCost/modify/'+ params,
+        method: 'PUT',
+        data
+    })
+}
+export const sysChannelCostExport = (data) => {
+    return axios({
+        url: '/sysChannelCost/export',
+        method: 'post',
+        data
+    })
+}
+export const sysChannelCostAudit = (data) => {
+    return axios({
+        url: '/sysChannelCost/audit/',
+        method: 'post',
+        data
+    })
 }

+ 655 - 0
src/views/AgreementManage/ChannelCost.vue

@@ -0,0 +1,655 @@
+<template>
+    <div>
+        <templateTable ref="expandTable" :formList="formList" :searchData.sync="searchData" :tableConfig="tableConfig"
+            :data="tableData" @getList="getList" :btnGroup="btnGroup" @handleSearchList="handleSearchList"
+            :pagination="page" @handleRowChange="handleRowChange">
+            <template slot="expand" slot-scope="scope">
+                <div style="width: 100%;margin-left:55px">
+                    <el-table :data="scope.row.insAreaCompanyList" border size="small" :key="updateChildTable"
+                        :header-cell-style="{
+                            background: '#ccc',
+                            fontWeight: '700',
+                            color: '#606266',
+                        }">
+                        <el-table-column prop="gradeName" label="级别">
+                        </el-table-column>
+                        <el-table-column prop="jqCostsProportion" label="交强加投">
+                        </el-table-column>
+                        <el-table-column prop="syCostsProportion" label="商业加投">
+                        </el-table-column>
+                        <el-table-column prop="noCostsProportion" label="非车加投">
+                        </el-table-column>
+                    </el-table>
+                </div>
+            </template>
+        </templateTable>
+
+        <el-dialog :title="dialogTitle" width="40%" :visible.sync="dialogVisibleadd">
+            <el-form ref="queryFormRef" :model="queryForm" label-width="120px" class="queryform" size="small">
+                <el-row>
+                    <el-col :span="12">
+                        <el-form-item label="名称">
+                            <el-input clearable style="width:220px" v-model.trim="queryForm.name"
+                                placeholder="请输入"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="是否启动">
+                            <el-switch v-model="queryForm.enabled" active-color="#D42426" active-value="1"
+                                inactive-value="0">
+                            </el-switch>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+
+                    <el-col :span="12">
+                        <el-form-item label="开始时间">
+                            <el-date-picker v-model="queryForm.startTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+                                placeholder="选择日期时间"></el-date-picker>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="结束时间">
+                            <el-date-picker v-model="queryForm.endTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+                                placeholder="选择日期时间"></el-date-picker>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+
+                    <el-col :span="24">
+                        <el-form-item label="费用描述">
+                            <el-input type="textarea" clearable v-model.trim="queryForm.remark"
+                                placeholder="请输入"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-table :data="channelFeesData" border style="width: 100%">
+                        <el-table-column prop="gradeName" label="分组级别">
+                        </el-table-column>
+                        <el-table-column prop="jqCostsProportion" label="交强加投比例">
+                            <template slot-scope="scope">
+                                <el-input size="small" v-model.trim="scope.row.jqCostsProportion"
+                                    placeholder="请输入"></el-input>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="syCostsProportion" label="商业加投比例">
+                            <template slot-scope="scope">
+                                <el-input size="small" v-model.trim="scope.row.syCostsProportion"
+                                    placeholder="请输入"></el-input>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="noCostsProportion" label="非车加投比例">
+                            <template slot-scope="scope">
+                                <el-input size="small" v-model.trim="scope.row.noCostsProportion"
+                                    placeholder="请输入"></el-input>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </el-row>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="small" @click="dialogVisibleadd = false">取 消</el-button>
+                <el-button type="primary" size="small" @click="sumbit">确 定</el-button>
+            </span>
+        </el-dialog>
+        <el-dialog title="设置费用" width="80%" :visible.sync="dialogVisible">
+            <templateTable ref="productTable" :formList="formList1" :tableConfig="productcopyItemColumns"
+                @selectionChange="selectionChange" :data="productcopyItemResult" @getList="productcopyItemFindPage"
+                @handleSearchList="handleSearchList1" :pagination="productcopypage">
+            </templateTable>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="small" @click="dialogVisible = false">取 消</el-button>
+                <el-button type="primary" size="small" @click="sumbitInstitution">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import templateTable from "@/components/TemplateTable/index.vue";
+
+export default {
+    name: "ChannelCost",
+    components: { templateTable },
+    data() {
+        return {
+            dept: '',
+            queryForm: {},
+            dialogTitle: '新增',
+            rowId: '',
+            dialogVisible: false,
+            dialogVisibleadd: false,
+            labelWidth: '100px',
+            btnGroup: [
+                {
+                    name: '新增',
+                    click: () => this.add()
+                }
+            ],
+            formList: [
+                {
+                    label: "渠道分组名称",
+                    prop: "name",
+                    type: "input",
+                },
+
+            ],
+            formList1: [
+                {
+                    label: "保险公司",
+                    prop: "companyId",
+                    type: "company",
+                },
+                {
+                    label: "协议",
+                    prop: "agreementId",
+                    type: "select",
+                    options: []
+                },
+                {
+                    label: "产品类型",
+                    prop: "productCode",
+                    type: "select",
+                    options: []
+                },
+                {
+                    label: "审核状态",
+                    prop: "isAudit",
+                    type: "select",
+                    options: []
+                },
+                {
+                    label: "费用起期",
+                    prop: "costStartDate",
+                    type: "date",
+                },
+                {
+                    label: "费用止期",
+                    prop: "costsEndDate",
+                    type: "date",
+                },
+                {
+                    label: "是否有效",
+                    prop: "isEffective",
+                    type: "select",
+                    options: [
+                        {
+                            label: '失效',
+                            value: '1'
+                        },
+                        {
+                            label: '有效',
+                            value: '2'
+                        }
+                    ]
+                },
+                {
+                    label: "费用描述",
+                    prop: "costsDescription",
+                    type: "input",
+                },
+
+            ],
+            searchData: {},
+            page: {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0
+            },
+            productcopypage: {
+                pageNum: 1,
+                pageSize: 10,
+                totalSize: 0
+            },
+            tableData: [],
+            tableConfig: {
+                columns: [
+                    {
+                        prop: "name",
+                        label: "费用名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "remark",
+                        label: "费用描述",
+                        type: "text"
+                    },
+                    {
+                        prop: "startTime",
+                        label: "开始时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "endTime",
+                        label: "结束时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "enabled",
+                        label: "是否启动",
+                        type: "text"
+                    },
+                ],
+                expand: true,
+                loading: true,
+                isPaginationShow: true,
+                optBtns: [
+                    {
+                        type: "primary",
+                        label: "设置用费",
+                        click: (row, index) => {
+                            return this.setFees(row)
+                        },
+                    },
+                    {
+                        type: "primary",
+                        label: "修改",
+                        click: (row, index) => {
+                            return this.handleTableUpload(row);
+                        },
+                    },
+                    {
+                        type: "primary",
+                        label: "删除",
+                        click: (row, index) => {
+                            return this.handleTableDatl(row);
+                        },
+                    },
+
+                ],
+            },
+            productcopyItemColumns: {
+                columns: [
+                    {
+                        prop: "productName", label: "产品名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "insuranceCompany", label: "保险公司名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "agreementName", label: "协议名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "costsStartDate", label: "费用起期",
+                        width: 160,
+                        type: "text"
+                    },
+                    {
+                        prop: "costsEndDate", label: "费用止期",
+                        width: 160,
+                        type: "text"
+                    },
+                    {
+                        prop: "costsDescription", label: "费用描述",
+                        width: 220,
+                        type: "text"
+                    },
+                    {
+                        prop: "desc", label: "费用因子描述",
+                        width: 500,
+                        type: "text"
+                    },
+                    {
+                        prop: "priorityLevel", label: "方案优先级",
+                        type: "text"
+                    },
+                    // {
+                    //     prop: "jqCarCostsProportion",
+                    //     label: "费用比例(交强)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqCarOtherCostsProportion",
+                    //     label: "其他费用比例(交强)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqCostsProportion",
+                    //     label: "总费用比例(交强)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqExportRadioLevel1",
+                    //     label: "交强出口比例一级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqExportRadioLevel2",
+                    //     label: "交强出口比例二级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqExportRadioLevel3",
+                    //     label: "交强出口比例三级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqExportRadioLevel4",
+                    //     label: "交强出口比例四级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "jqExportRadioLevel5",
+                    //     label: "交强出口比例五级",
+                    //     type: "text"
+                    // },
+
+                    // {
+                    //     prop: "syCarCostsProportion",
+                    //     label: "费用比例(商业)",
+                    //     minWidth: 120,
+                    // },
+                    // {
+                    //     prop: "syCarOtherCostsProportion",
+                    //     label: "其他费用比例(商业)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "syCostsProportion",
+                    //     label: "总费用比例(商业)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "syExportRadioLevel1",
+                    //     label: "商业出口比例一级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "syExportRadioLevel2",
+                    //     label: "商业出口比例二级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "syExportRadioLevel3",
+                    //     label: "商业出口比例三级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "syExportRadioLevel4",
+                    //     label: "商业出口比例四级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "syExportRadioLevel5",
+                    //     label: "商业出口比例五级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCarCostsProportion",
+                    //     label: "费用比例(非车)",
+                    //     minWidth: 120,
+                    // },
+                    // {
+                    //     prop: "noCarOtherCostsProportion",
+                    //     label: "其他费用比例(非车)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCostsProportion",
+                    //     label: "总费用比例(非车)",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCarExportRadioLevel1",
+                    //     label: "非车出口比例一级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCarExportRadioLevel2",
+                    //     label: "非车出口比例二级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCarExportRadioLevel3",
+                    //     label: "非车出口比例三级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCarExportRadioLevel4",
+                    //     label: "非车出口比例四级",
+                    //     type: "text"
+                    // },
+                    // {
+                    //     prop: "noCarExportRadioLevel5",
+                    //     label: "非车出口比例五级",
+                    //     type: "text"
+                    // },
+                ],
+                loading: true,
+                isPaginationShow: true,
+                isCheckBox: true
+            },
+            channelFeesData: [],
+            productcopyItemResult: [],
+            updateChildTable: false,
+            costIdList: []
+        };
+    },
+    created() {
+        this.getList();
+        this.$api.insCompany.dicType("productsType").then((res) => {
+            if (res.code == 200) {
+                this.formList1.forEach(val => {
+                    if (val.prop == 'productCode') {
+                        val.options = res.data.ddList
+                    }
+                })
+            }
+        });
+        this.$api.insCompany.findAgreementByCompanyId({ isExternal: 0 }).then((res) => {
+            if (res.code == 200) {
+                this.formList1.forEach(val => {
+                    if (val.prop == 'agreementId') {
+                        res.data.forEach(e => {
+                            e.name = e.agreementName + (e.jobDescriptione ? '-' + e.jobDescription : '') + (e.businessDescription ? '-' + e.businessDescription : '')
+                        })
+                        val.options = res.data
+                    }
+                })
+            }
+        });
+
+        let data = { "pageNum": 1, "pageSize": 10, "columnFilters": { "label": { "name": "label", "value": "agreement_audit_status" } } }
+        this.$api.dict.findPage(data).then(res => {
+            if (res.code == 200) {
+                this.formList1.forEach(val => {
+                    if (val.prop == 'isAudit') {
+                        val.options = res.data.content
+                    }
+                })
+            }
+        })
+
+        this.$api.dept.findDeptTree("9", "").then((res) => {
+            this.treedata = res.data;
+        });
+        this.$api.sys.sysChannelGradeList().then((res) => {
+            if (res.code == 200) {
+                res.data.forEach(val => {
+                    val.gradeId = val.id
+                    val.gradeName = val.name
+                    val.id = null
+                })
+                this.channelFeesData = res.data;
+            }
+        });
+
+    },
+    methods: {
+        setFees(row) {
+            this.rowId = row.id
+            this.dialogVisible = true
+            this.productcopyItemFindPage()
+
+        },
+        handleSearchList1(val) {
+            this.productcopyItemFindPage(val)
+        },
+        selectionChange(val, refs) {
+            this.costIdList = []
+            this.costIdList = val
+        },
+        productcopyItemFindPage(data) {
+            this.productcopyItemColumns.loading = true;
+            this.$api.sys
+                .agreementGetProductPage({ id: this.rowId, ...this.productcopypage, ...data })
+                .then(res => {
+                    if (res.code == 200) {
+                        let productTable = this.$refs.productTable.$refs.table
+                        this.productcopyItemResult = res.data.records;
+                        this.productcopypage.pageNum = res.data.current;
+                        this.productcopypage.pageSize = res.data.size;
+                        this.productcopypage.totalSize = res.data.total;
+                        this.productcopyItemColumns.loading = false;
+                        this.$nextTick(() => {
+                            this.productcopyItemResult.forEach((val) => {
+                                if (val.check) {
+                                    productTable.toggleRowSelection(val);
+                                }
+                            });
+                        });
+                    } else {
+                        this.productcopyItemResult = [];
+                        this.$message.error(res.msg);
+                        this.productcopypage.totalSize = 0;
+                        this.productcopyItemColumns.loading = false;
+                    }
+                });
+        },
+        handleRowChange(row) {
+            let expandTable = this.$refs.expandTable.$refs.table
+            if (!row.expanded) {
+                this.$api.sys.sysChannelGroupQuery(row.id).then(res => {
+                    if (res.code == "200") {
+                        this.tableData.map(item => {
+                            if (item.id === row.id) {
+                                item.insAreaCompanyList = res.data.sysChannelGroupInfos
+                            }
+                            return item;
+                        });
+                        this.updateChildTable = !this.updateChildTable;
+                        row.expanded = !row.expanded;
+                        expandTable.toggleRowExpansion(row, row.expanded);
+
+                    } else {
+                        this.$message.info("暂无数据");
+                    }
+                });
+            } else {
+                row.expanded = !row.expanded;
+                this.$refs.expandTable.$refs.table.toggleRowExpansion(row, row.expanded);
+            }
+
+
+        },
+        // 查询
+        handleSearchList(data) {
+            this.getList(data);
+        },
+        add() {
+            this.dialogVisibleadd = true
+            this.dialogTitle = '新增'
+        },
+        handleTableDatl(row) {
+            this.$confirm("确认删除该条数据吗?", "提示", {
+                type: "warning",
+            })
+                .then(() => {
+                    this.$api.sys
+                        .sysChannelGroupDelete(row.id)
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+                })
+        },
+        sumbit() {
+            if (this.dialogTitle == '新增') {
+                this.$api.sys
+                    .sysChannelGroupChannel({ ...this.queryForm, infos: this.channelFeesData })
+                    .then(res => {
+                        if (res.code == 200) {
+                            this.getList();
+                            this.dialogVisibleadd = false
+                        } else {
+                            this.$message.error(res.msg);
+                        }
+                    });
+            }
+            else {
+                this.$api.sys
+                    .sysChannelGroupGradeUp(this.queryForm.id, { ...this.queryForm, infos: this.queryForm.sysChannelGroupInfos })
+                    .then(res => {
+                        if (res.code == 200) {
+                            this.getList();
+                            this.dialogVisibleadd = false
+
+                        } else {
+                            this.$message.error(res.msg);
+                        }
+                    });
+            }
+        },
+        //列表数据
+        getList(data) {
+            this.tableConfig.loading = true;
+            this.$api.sys
+                .queryChannelPage({ ...data, ...this.page })
+                .then(res => {
+                    if (res.code == 200) {
+                        res.data.content.forEach(val => {
+                            val.enabled = val.enabled == '1' ? '启动' : '禁用'
+                        })
+                        this.tableData = res.data.content;
+                        this.page.pageNum = res.data.pageNum;
+                        this.page.pageSize = res.data.pageSize;
+                        this.page.totalSize = res.data.totalSize;
+                        this.tableConfig.loading = false;
+                    } else {
+                        this.tableData = [];
+                        this.$message.error(res.msg);
+                        this.page.totalSize = 0;
+                        this.tableConfig.loading = false;
+                    }
+                });
+        },
+        sumbitInstitution() {
+            this.$api.sys
+                .sysChannelGroupCostSet({ costIdList: this.costIdList.map(val => val.id), id: this.rowId })
+                .then(res => {
+                    if (res.code == 200) {
+                        this.getList();
+                        this.dialogVisible = false
+
+                    } else {
+                        this.$message.error(res.msg);
+                    }
+                });
+
+        },
+        handleTableUpload(row) {
+            this.$api.sys
+                .sysChannelGroupDetail(row.id)
+                .then(res => {
+                    if (res.code == 200) {
+                        this.channelFeesData = res.data.sysChannelGroupInfos
+                        this.dialogTitle = '编辑'
+                        this.dialogVisibleadd = true
+                        this.queryForm = res.data
+
+                    } else {
+                        this.$message.error(res.msg);
+                    }
+                });
+        }
+    }
+};
+</script>
+  

+ 13 - 0
src/views/Core/components/detailsDialog.vue

@@ -514,6 +514,19 @@
                     <span>¥{{ scope.row.deptPremiumsLevelFive }}</span>
                   </template>
                 </el-table-column>
+                <el-table-column prop="externalProportion" label="代客录单扣减比例">
+                <template slot-scope="scope" >
+                  <span v-if="scope.row.externalProportion">{{ scope.row.externalProportion }}%</span>
+                  <span v-else>-</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="externalPremiums" label="代客录单扣减金额">
+                <template slot-scope="scope" >
+                  <span v-if="scope.row.externalPremiums">¥{{ scope.row.externalPremiums }}</span>
+                  <span v-else>-</span>
+                </template>
+              </el-table-column>
+                
                 <el-table-column prop="profitMarginPremiums" label="利润差值">
                   <template slot-scope="scope">
                     <span>¥{{ scope.row.profitMarginPremiums }}</span>

+ 494 - 0
src/views/FinancialManagement/AddInvestment.vue

@@ -0,0 +1,494 @@
+<template>
+    <div>
+        <templateTable :formList="formList" :searchData.sync="searchData" :tableConfig="tableConfig" :data="tableData"
+            @getList="getList" :btnGroup="btnGroup" @handleSearchList="handleSearchList" :pagination="page">
+        </templateTable>
+        <el-dialog title="编辑" width="60%" :visible.sync="dialogVisibleadd">
+            <templateForm ref="templateForm" :ruleForm="ruleForm" :formData="formData" :inline="false" :rules="rules"
+                :labelWidth="labelWidth"></templateForm>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="small" @click="dialogVisibleadd = false">取 消</el-button>
+                <el-button type="primary" size="small" @click="sumbit">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import templateTable from "@/components/TemplateTable/index.vue";
+import templateForm from "@/components/TemplateForm/index.vue";
+
+export default {
+    name: "policyImport",
+    components: { templateTable, templateForm },
+    data() {
+        return {
+            formData: {},
+            dialogVisible: false,
+            dialogVisibleadd: false,
+            labelWidth: '150px',
+            rules: {
+                jqCostsProportion: [
+                    { required: true, message: '请输入加投比例(交强)', trigger: 'blur' },
+                ],
+                syCostsProportion: [
+                    { required: true, message: '请输入加投比例(商业)', trigger: 'blur' },
+                ],
+                noCostsProportion: [
+                    { required: true, message: '请输入加投比例(非车)', trigger: 'blur' },
+                ],
+
+            },
+            btnGroup: [
+                {
+                    name: '导出',
+                    click: () => this.export()
+                }
+            ],
+            formList: [
+                {
+                    label: "工号",
+                    prop: "userId",
+                    type: "input",
+                },
+                {
+                    label: "渠道名称",
+                    prop: "userName",
+                    type: "input",
+                }, {
+                    prop: "status",
+                    label: "审核状态",
+                    type: "select",
+                    options: [
+                        {
+                            label: '未审核',
+                            value: '0'
+                        },
+                        {
+                            label: '审核通过',
+                            value: '1'
+                        }
+                    ]
+                }, {
+                    label: "车牌号",
+                    prop: "licenseNo",
+                    type: "input",
+                },
+            ],
+            ruleForm: [
+                {
+                    label: '加投比例(交强)',
+                    prop: 'jqCostsProportion',
+                    type: 'input',
+                    change: (e) => this.jqCostsProportionFun(e)
+                },
+
+                {
+                    label: '加投比例(商业)',
+                    prop: 'syCostsProportion',
+                    type: 'input',
+                    change: (e) => this.syCostsProportionFun(e)
+                },
+                {
+                    label: '加投比例(非车)',
+                    prop: 'noCostsProportion',
+                    type: 'input',
+                    change: (e) => this.noCostsProportionFun(e)
+                },
+                {
+                    label: '加投金额(交强)',
+                    prop: 'jqJtPremium',
+                    type: 'input',
+                    disabled: true
+                },
+                {
+                    label: '加投金额(商业)',
+                    prop: 'syJtPremium',
+                    type: 'input',
+                    disabled: true
+                },
+                {
+                    label: '加投金额(非车)',
+                    prop: 'jyJtPremium',
+                    type: 'input',
+                    disabled: true
+                },
+                {
+                    label: '交强险费用',
+                    prop: 'jqPremium',
+                    type: 'input',
+                    disabled: true
+                },
+                {
+                    label: '商业险费用',
+                    prop: 'syPremium',
+                    type: 'input',
+                    disabled: true
+                },
+                {
+                    label: '驾意险费用',
+                    prop: 'jyPremium',
+                    type: 'input',
+                    disabled: true
+                },
+
+            ],
+            searchData: {},
+            page: {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0
+            },
+            tableData: [],
+            tableConfig: {
+                columns: [
+                    {
+                        prop: "orderNo",
+                        label: "订单号",
+                        type: "text"
+                    },
+                    {
+                        prop: "userId",
+                        label: "工号",
+                        type: "text"
+                    },
+                    {
+                        prop: "userName",
+                        label: "渠道名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "leaderName",
+                        label: "维护人员",
+                        type: "text"
+                    },
+                    {
+                        prop: "status",
+                        label: "审核状态",
+                        type: "statMap",
+                        options: [
+                            {
+                                label: '未审核',
+                                value: '0'
+                            },
+                            {
+                                label: '审核通过',
+                                value: '1'
+                            }
+                        ]
+                    },
+                    {
+                        prop: "licenseNo",
+                        label: "车牌号",
+                        type: "text"
+                    },
+                    {
+                        prop: "insuredName",
+                        label: "被保险人姓名",
+                        type: "text"
+                    },
+                    {
+                        prop: "companyId",
+                        label: "保险公司编号",
+                        type: "text"
+                    },
+                    {
+                        prop: "inscompany",
+                        label: "保险名称",
+                        type: "text"
+                    },
+
+                    {
+                        prop: "partnerCompaniesName",
+                        label: "合作公司名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "productName",
+                        label: "产品名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "dockingPerson",
+                        label: "对接人",
+                        type: "text"
+                    },
+                    {
+                        prop: "jqCostsProportion",
+                        label: "加投比例(交强)",
+                        type: "text"
+                    },
+                    {
+                        prop: "syCostsProportion",
+                        label: "加投比例(商业)",
+                        type: "text"
+                    },
+                    {
+                        prop: "noCostsProportion",
+                        label: "加投比例(非车)",
+                        type: "text"
+                    },
+                    {
+                        prop: "signingTime",
+                        label: "签单时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "payDate",
+                        label: "支付时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "jqJtPremium",
+                        label: "加投金额(交强)",
+                        type: "text"
+                    },
+                    {
+                        prop: "syJtPremium",
+                        label: "加投金额(商业)",
+                        type: "text"
+                    },
+                    {
+                        prop: "jyJtPremium",
+                        label: "加投金额(非车)",
+                        type: "text"
+                    },
+                    {
+                        prop: "createBy",
+                        label: "创建人",
+                        type: "text"
+                    },
+                    {
+                        prop: "createTime",
+                        label: "创建时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "updateTime",
+                        label: "更新时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "jqPolicyNo",
+                        label: "交强保单号",
+                        type: "text"
+                    },
+                    {
+                        prop: "syPolicyNo",
+                        label: "商业保单号",
+                        type: "text"
+                    },
+                    {
+                        prop: "noPolicyNo",
+                        label: "非车保单号",
+                        type: "text"
+                    },
+                    {
+                        prop: "taxAmount",
+                        label: "车船税费用",
+                        type: "text"
+                    },
+                    {
+                        prop: "jqPremium",
+                        label: "交强险费用",
+                        type: "text"
+                    },
+                    {
+                        prop: "syPremium",
+                        label: "商业险费用",
+                        type: "text"
+                    },
+                    {
+                        prop: "jyPremium",
+                        label: "驾意险费用",
+                        type: "text"
+                    },
+                    {
+                        prop: "jqCostsExportProportion",
+                        label: "交强出口比例",
+                        type: "text"
+                    },
+                    {
+                        prop: "syCostsExportProportion",
+                        label: "商业出口比例",
+                        type: "text"
+                    },
+                    {
+                        prop: "noCostsExportProportion",
+                        label: "非车出口比例",
+                        type: "text"
+                    },
+                    {
+                        prop: "totalPremium",
+                        label: "加投补贴金额",
+                        type: "text"
+                    },
+                    {
+                        prop: "settlementAmount",
+                        label: "结算金额",
+                        type: "text"
+                    },
+                ],
+                loading: true,
+                isPaginationShow: true,
+                operationWidth: 300,
+                optBtns: [
+                    {
+                        type: "primary",
+                        label: "修改",
+                        click: (row, index) => {
+                            return this.handleTableUpload(row);
+                        },
+                    },
+                    {
+                        type: "primary",
+                        label: "审核通过",
+                        hide: (row) => {
+                            return !row.status
+                        },
+                        click: (row, index) => {
+                            return this.handleTableAudit(row);
+                        },
+                    },
+                    {
+                        type: "primary",
+                        label: "删除",
+                        click: (row, index) => {
+                            return this.handleTableDatl(row);
+                        },
+                    },
+
+                ],
+            },
+            seachData: {}
+        };
+    },
+    created() {
+        this.getList();
+
+    },
+    methods: {
+        jqCostsProportionFun(val) {
+            this.formData.jqJtPremium = (Number(val) * Number(this.formData.jqPremium)).toFixed(2)
+        },
+        syCostsProportionFun(val) {
+            this.formData.syJtPremium = (Number(val) * Number(this.formData.syPremium)).toFixed(2)
+        },
+        noCostsProportionFun(val) {
+            this.formData.jyJtPremium = (Number(val) * Number(this.formData.jyPremium)).toFixed(2)
+
+        },
+        handleTableAudit(val) {
+            this.$api.sys
+                .sysChannelCostAudit({ id: val.id, isAudit: 1 })
+                .then(res => {
+                    if (res.code == 200) {
+                        this.getList();
+                        this.$message({
+                            message: res.msg || '审核通过',
+                            type: 'success'
+                        });
+                    } else {
+                        this.$message.error(res.msg);
+                    }
+                });
+        },
+        export() {
+            this.$api.sys
+                .sysChannelCostExport(this.seachData)
+                .then(res => {
+                    if (res.code == 200) {
+                        let url = process.env.BASE_URL + res.data; // 3.创建一个临时的url指向blob对象
+                        let a = document.createElement("a");
+                        a.href = url;
+                        a.click();
+                        window.URL.revokeObjectURL(url);
+                    } else {
+                        this.$message.error(res.msg);
+                    }
+                });
+        },
+        // 查询
+        handleSearchList(data) {
+            this.seachData = data
+            this.getList(data);
+        },
+        add() {
+            this.dialogVisibleadd = true
+            // this.dialogTitle = '新增'
+        },
+        handleTableDatl(row) {
+            this.$confirm("确认删除该条数据吗?", "提示", {
+                type: "warning",
+            })
+                .then(() => {
+                    this.$api.sys
+                        .sysChannelGroupDel(row.id)
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+                })
+        },
+        sumbit() {
+            this.$refs.templateForm.$refs.publicForm.validate((valid) => {
+                if (valid) {
+                    this.$api.sys
+                        .sysChannelCostModify(this.formData.id, { ... this.formData })
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+                                this.dialogVisibleadd = false
+
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+                } else {
+                    return false;
+                }
+
+            })
+
+        },
+        //列表数据
+        getList(data) {
+            this.tableConfig.loading = true;
+            this.$api.sys
+                .sysChannelCostPage({ ...data, ...this.page })
+                .then(res => {
+                    if (res.code == 200) {
+                        this.tableData = res.data.records;
+                        this.page.pageNum = res.data.pageNum;
+                        this.page.pageSize = res.data.pageSize;
+                        this.page.totalSize = res.data.totalSize;
+                        this.tableConfig.loading = false;
+                    } else {
+                        this.tableData = [];
+                        this.$message.error(res.msg);
+                        this.page.totalSize = 0;
+                        this.tableConfig.loading = false;
+                    }
+                });
+        },
+        handleTableUpload(row) {
+
+            this.$api.sys
+                .sysChannelCostDetail(row.id)
+                .then(res => {
+                    if (res.code == 200) {
+                        this.formData = res.data
+                        this.dialogVisibleadd = true
+                    } else {
+                        this.$message.error(res.msg)
+                    }
+                });
+
+        },
+    }
+};
+</script>
+<style lang="scss" scoped></style>

+ 2 - 1
src/views/FinancialManagement/CostVerification/Baosi.vue

@@ -578,7 +578,8 @@ export default {
       });
   },
   async exportNum(row){
-    window.open("http://192.168.0.111:8080/api/inv/insExternalBills/export/"+row.id)
+    let url= process.env.BASE_URL
+    window.open(url+"api/inv/insExternalBills/export/"+row.id)
     // let res = await this.$api.cost.exportBatchNum(row.id);
     //   const blob = new Blob([res.data]);
     //   const fileName = "测试.xlsx";

+ 31 - 0
src/views/FinancialManagement/WithdrawalManagement/WithdrawalProceduresPending.vue

@@ -31,6 +31,13 @@
               start-placeholder="开始日期" end-placeholder="结束日期">
             </el-date-picker>
           </el-form-item>
+          <el-form-item label="业务来源" prop="source">
+              <el-select v-model="queryForm.source" style="width: 200px;" clearable placeholder="请选择业务来源">
+                <el-option v-for="val in organizationSourceoptions" :key="val.dictValue" :label="val.dictTag"
+                  :value="val.dictValue">
+                </el-option>
+              </el-select>
+            </el-form-item>
           <el-form-item>
             <el-button type="primary" size="small" @click="findPage">查询</el-button>
           </el-form-item>
@@ -104,6 +111,7 @@ export default {
   },
   data() {
     return {
+      organizationSourceoptions: [],
       bankForm:{},
       formList: [
         {
@@ -172,6 +180,7 @@ export default {
         { prop: "id", label: "提现单号" },
         { prop: "userId", label: "业务员工号" },
         { prop: "userName", label: "业务员姓名" },
+        { prop: "source", label: "业务来源",formatter: this.managementSourceFormatter },
         { prop: "leaderId", label: "维护人工号" },
         { prop: "leaderName", label: "维护人" },
         { prop: "mobile", label: "电话" },
@@ -188,9 +197,31 @@ export default {
     };
   },
   created() {
+    this.$api.insCompany.dicType('organizationSource').then((res) => {
+      if (res.code == 200) {
+        this.tableConfig.columns.forEach(e => {
+          if (e.prop == 'source') {
+            e.options = res.data.ddList
+          }
+        })
+        this.organizationSourceoptions = res.data.ddList;
+      }
+    });
   },
   mounted() { },
   methods: {
+    managementSourceFormatter(row, column) {
+      let managementSource = row.source;
+      switch (managementSource) {
+        case '1':
+          return <el-tag>渠道</el-tag>
+        case '2':
+          return <el-tag type="success">个代</el-tag>
+        case '3':
+          return <el-tag type="warning">电销</el-tag>
+        default:
+      }
+    },
     handleSearchList(val){
       this.bankfindPage(val);
     },

+ 1 - 0
src/views/Letter/Wallet/AutoInsuranceDetails.vue

@@ -161,6 +161,7 @@ export default {
 
         { prop: "userId", label: "工号", minWidth: 160 },
         { prop: "userName", label: "姓名", minWidth: 160 },
+        { prop: "signingTime", label: "签单时间", minWidth: 160 },
         { prop: "licenseNo", label: "车牌号", minWidth: 160 },
         { prop: "insuredName", label: "被保险人", minWidth: 160 },
         { prop: "jqapplyno", label: "交强保单号", minWidth: 160 },

+ 1 - 0
src/views/Login.vue

@@ -492,6 +492,7 @@ export default {
     /**获取当前登录的ip地址 */
     getUserIP(ip => {
       getAddressLocation(ip, info => {
+        console.log(info,22222222222);
         this.addressInfo = info;
       });
     });

+ 54 - 22
src/views/PeopleManage/Institutional.vue

@@ -34,8 +34,8 @@
     <el-dialog :title="dialogTitle" width="40%" :visible.sync="dialogVisible" :close-on-click-modal="false"
       :before-close="handleDialogBefore" @close="closeDialog" v-dialogDrag>
       <el-form :model="formData" :rules="rules" ref="formData" :inline="true" label-width="110px" size="small">
+      <div class="info-title" style="padding-top: 0">机构信息</div>
         <el-row>
-
           <el-col :span="12">
             <el-form-item label="机构编码" prop="deptId">
               <el-input v-model="formData.deptId" disabled></el-input>
@@ -50,17 +50,24 @@
               </el-select> -->
             </el-form-item>
           </el-col>
+         
+         
           <el-col :span="12">
-            <el-form-item label="工号" prop="userId">
-              <el-input v-model="formData.userId" disabled></el-input>
+            <el-form-item label="机构等级" prop="comlevel">
+              <el-select v-model="formData.comlevel" style="width: 200px;" disabled>
+                <el-option v-for="val in comleveloptions" :key="val.value" :label="val.label"
+                  :value="val.value">
+                </el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="名称" prop="userName">
-              <el-select v-model="formData.userName" style="width: 200px;" clearable filterable placeholder="选择管理员名称"
-                @change="userChange">
-                <el-option v-for="(item, index) in useroption" :key="index" :label="item.name"
-                  :value="item.name"></el-option>
+            <el-form-item label="业务来源" prop="source">
+              <!-- <el-input v-model="formData.source" disabled></el-input> -->
+              <el-select v-model="formData.source" style="width: 200px;" clearable placeholder="请选择业务来源" disabled>
+                <el-option v-for="val in organizationSourceoptions" :key="val.dictValue" :label="val.dictTag"
+                  :value="val.dictValue">
+                </el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -69,26 +76,36 @@
               <el-input v-model="formData.proportional" placeholder="请输入抽成比例"></el-input>
             </el-form-item>
           </el-col>
+        </el-row>
+        <div class="info-title" style="padding-top: 0">负责人信息</div>
+        <el-row>
           <el-col :span="12">
-            <el-form-item label="机构等级" prop="comlevel">
-              <el-input v-model="formData.comlevel" disabled></el-input>
+            <el-form-item label="工号" prop="userId">
+              <el-input v-model="formData.userId" disabled></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="业务来源" prop="source">
-              <!-- <el-input v-model="formData.source" disabled></el-input> -->
-              <el-select v-model="formData.source" style="width: 200px;" clearable placeholder="请选择业务来源" disabled>
-                <el-option v-for="val in organizationSourceoptions" :key="val.dictValue" :label="val.dictTag"
-                  :value="val.dictValue">
-                </el-option>
+            <el-form-item label="名称" prop="userName">
+              <el-select v-model="formData.userName" style="width: 200px;" clearable filterable placeholder="选择管理员名称"
+                @change="userChange">
+                <el-option v-for="(item, index) in useroption" :key="index" :label="item.name"
+                  :value="item.name"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
+        </el-row>
+        <div class="info-title" style="padding-top: 0">推荐人信息</div>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="推荐人工号" prop="suggestId">
+              <el-input v-model="formData.suggestId" disabled></el-input>
+            </el-form-item>
+          </el-col>
           <el-col :span="12">
-            <el-form-item label="推荐人" prop="suggestId">
-              <el-select v-model="formData.suggestId" style="width: 200px;" :disabled="isdisabled" @change="suggestChange"
+            <el-form-item label="推荐人姓名" prop="suggestName">
+              <el-select v-model="formData.suggestName" style="width: 200px;" :disabled="isdisabled" @change="suggestChange"
                 clearable placeholder="请选择推荐人">
-                <el-option v-for="val in sysPartnerOption" :key="val.userId" :label="val.userName" :value="val.userId">
+                <el-option v-for="val in sysPartnerOption" :key="val.userId" :label="val.userName" :value="val.userName">
                 </el-option>
               </el-select>
 
@@ -114,6 +131,7 @@ export default {
   },
   data() {
     return {
+      comleveloptions:[],
       isdisabled: false,
       ztreeNodes: [],
       leftSplitWidth: 20,
@@ -249,7 +267,14 @@ export default {
         this.organizationSourceoptions = res.data.ddList;
       }
     });
-
+    let data={
+      columnFilters:{label:{name:"label",value:"comlevel"}}
+    }
+    this.$api.dict.findPage(data).then((res) => {
+      if (res.code == 200) {
+        this.comleveloptions = res.data.content;
+      }
+    });
   },
   methods: {
     findLeftTreeData: function () {
@@ -260,6 +285,7 @@ export default {
     },
     //添加人员
     handleAddButton() {
+      this.isdisabled=false
       if (this.currentTreeNode == null) {
         this.$message.info("请选择所属公司或部门");
         return;
@@ -306,9 +332,9 @@ export default {
       this.findPage();
     },
     suggestChange(e) {
-      this.formData.suggestName = ''
+      this.formData.suggestId = ''
       if (e) {
-        this.formData.suggestName = this.sysPartnerOption.find(val => val.userId == e).userName
+        this.formData.suggestId = this.sysPartnerOption.find(val => val.userId == e).userId
       }
     },
     userChange(val) {
@@ -504,4 +530,10 @@ export default {
   top: 10px;
   text-align: center;
 }
+.info-title {
+  color: #262626;
+  font-size: 18px;
+  padding: 16px 0;
+  font-family: PingFang SC, PingFang SC;
+}
 </style>

+ 3 - 1
src/views/PeopleManage/PcLoginRecord.vue

@@ -19,7 +19,7 @@
           :value="option.code"></el-option>
       </el-select>
       <el-button size="small" type="primary" @click="onSearch">搜索</el-button>
-      <el-button size="small" type="primary" @click="onCircular">圆形定位</el-button>
+      <!-- <el-button size="small" type="primary" @click="onCircular">圆形定位</el-button> -->
       <!-- <el-button size="small" type="primary" @click="map.remove(circle)">删除定位</el-button> -->
     </div>
     <div class="source-window">
@@ -56,6 +56,8 @@
         </el-table-column>
         <el-table-column prop="address" label="地址">
         </el-table-column>
+        <el-table-column prop="operationTime" label="登录时间">
+        </el-table-column>
       </el-table>
       <div class="bottomFixed">
         <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"

+ 2 - 0
src/views/PeopleManage/UserMap.vue

@@ -56,6 +56,8 @@
         </el-table-column>
         <el-table-column prop="address" label="地址">
         </el-table-column>
+        <el-table-column prop="createTime" label="登录时间">
+        </el-table-column>
       </el-table>
       <div class="bottomFixed">
         <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"

+ 288 - 0
src/views/Sys/ChannelGrouping.vue

@@ -0,0 +1,288 @@
+<template>
+    <div>
+        <templateTable :formList="formList" :searchData.sync="searchData" :tableConfig="tableConfig" :data="tableData"
+            @getList="getList" :btnGroup="btnGroup" @handleSearchList="handleSearchList" :pagination="page">
+        </templateTable>
+        <el-dialog :title="dialogTitle" width="25%" :visible.sync="dialogVisibleadd">
+            <div class="flex" style="line-height: 50px;">
+                <span>渠道分组名称:</span>
+                <el-input size="small" style="width:220px" v-model="name" placeholder="请输入渠道分组名称"></el-input>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="small" @click="dialogVisibleadd = false">取 消</el-button>
+                <el-button type="primary" size="small" @click="sumbit">确 定</el-button>
+            </span>
+        </el-dialog>
+        <el-dialog title="授权机构" width="25%" :visible.sync="dialogVisible">
+                <el-tree ref="tree" :data="treedata" accordion :props="defaultProps" show-checkbox node-key="id" 
+              :default-checked-keys="treekeys"   @check-change="treechange"  
+              :default-expand-all="expandshow" class="stafftree">
+            </el-tree>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="small" @click="dialogVisible = false">取 消</el-button>
+                <el-button type="primary" size="small" @click="sumbitInstitution">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import templateTable from "@/components/TemplateTable/index.vue";
+import templateForm from "@/components/TemplateForm/index.vue";
+
+export default {
+    name: "policyImport",
+    components: { templateTable, templateForm },
+    data() {
+        return {
+            dept: [],
+            name: '',
+            dialogTitle: '新增',
+            rowId: '',
+            dialogVisible: false,
+            dialogVisibleadd: false,
+            labelWidth: '100px',
+            btnGroup: [
+                {
+                    name: '新增',
+                    click: () => this.add()
+                }
+            ],
+            formList: [
+                {
+                    label: "渠道分组名称",
+                    prop: "name",
+                    type: "input",
+                },
+
+            ],
+            searchData: {},
+            page: {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0
+            },
+            tableData: [],
+            tableConfig: {
+                columns: [
+                    {
+                        prop: "name",
+                        label: "渠道分组名称",
+                        type: "text"
+                    },
+                    {
+                        prop: "createTime",
+                        label: "创建时间",
+                        type: "text"
+                    },
+                    {
+                        prop: "updateBy",
+                        label: "操作人",
+                        type: "text"
+                    },
+                ],
+                loading: true,
+                isPaginationShow: true,
+                optBtns: [
+                    {
+                        type: "primary",
+                        label: "授权机构",
+                        click: (row, index) => {
+                            return this.uthorizedAgency(row) 
+                        },
+                    },
+                    {
+                        type: "primary",
+                        label: "修改",
+                        click: (row, index) => {
+                            return this.handleTableUpload(row);
+                        },
+                    },
+                    {
+                        type: "primary",
+                        label: "删除",
+                        click: (row, index) => {
+                            return this.handleTableDatl(row);
+                        },
+                    },
+
+                ],
+            },
+            treedata: [], //授权结构树
+            defaultProps: {
+        //自定义参数
+        children: "children",
+        label: "name",
+      },
+      treekeys: [],
+      expandshow: false,
+        };
+    },
+    created() {
+        this.getList();
+        this.$api.dept.findDeptTree("9", "").then((res) => {
+            this.treedata = res.data;
+            this.setDisabled(this.treedata)
+        });
+    },
+    methods: {
+        uthorizedAgency(row){
+             this.rowId=row.id
+            this.$api.sys
+                        .queryRelationList(row.id)
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.dialogVisible=true
+                                setTimeout(()=>{
+                                    this.dept=res.data
+                                    this.$refs.tree.setCheckedKeys(res.data);
+                                },500)
+                               
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+        },
+         //获取选中节点
+    treechange(item, node, self) {
+        if(item.children.length==0){
+            if (node === true) {
+        this.dept.push(item.id)
+
+      } else {
+        let index = this.dept.indexOf(this.dept.filter(e=>e==item.id)[0]);
+        if (index !== -1) {
+            this.dept.splice(index, 1);
+        }
+      }
+        }
+    
+    },
+    //  向有children的节点上增加disabled属性
+    setDisabled(treeData) {
+            if (treeData) {
+                treeData.forEach(item => {
+                    if (!item.deptType || item.deptType!=='D') {
+                        item.disabled = true
+                        this.setDisabled(item.children)
+                    }
+                })
+            }
+ 
+        },
+        // 查询
+        handleSearchList(data) {
+            this.getList(data);
+        },
+        add() {
+            this.dialogVisibleadd = true
+            this.dialogTitle = '新增'
+        },
+        handleTableDatl(row) {
+            this.$confirm("确认删除该条数据吗?", "提示", {
+                type: "warning",
+            })
+                .then(() => {
+                    this.$api.sys
+                        .sysChannelGradeDelete(row.id)
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+                })
+        },
+        sumbit() {
+            if (this.name) {
+                if (this.dialogTitle == '新增') {
+                    this.$api.sys
+                        .sysChannelGradeGrade({ name: this.name })
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+                                this.dialogVisibleadd = false
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+                }
+                else {
+                    this.$api.sys
+                        .sysChannelGradeUp(this.rowId, { name: this.name })
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+                                this.dialogVisibleadd = false
+
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+                }
+            }
+            else {
+                this.$message({
+                    message: '请输入渠道分组名称!',
+                    type: 'warning'
+                });
+            }
+        },
+        //列表数据
+        getList(data) {
+            this.tableConfig.loading = true;
+            this.$api.sys
+                .sysChannelGradePage({ ...data, ...this.page })
+                .then(res => {
+                    if (res.code == 200) {
+                        this.tableData = res.data.content;
+                        this.page.pageNum = res.data.pageNum;
+                        this.page.pageSize = res.data.pageSize;
+                        this.page.totalSize = res.data.totalSize;
+                        this.tableConfig.loading = false;
+                    } else {
+                        this.tableData = [];
+                        this.$message.error(res.msg);
+                        this.page.totalSize = 0;
+                        this.tableConfig.loading = false;
+                    }
+                });
+        },
+        sumbitInstitution(){
+            this.$api.sys
+                        .sysChannelauthorized({ areaIdList: this.dept,id:this.rowId })
+                        .then(res => {
+                            if (res.code == 200) {
+                                this.getList();
+                                this.dialogVisible = false
+
+                            } else {
+                                this.$message.error(res.msg);
+                            }
+                        });
+
+        },
+        handleTableUpload(row) {
+            this.name = row.name
+            this.rowId = row.id
+            this.dialogTitle = '编辑'
+            this.dialogVisibleadd = true
+        },
+    }
+};
+</script>
+<style lang="scss" scoped>
+/deep/{
+    .stafftree {
+ 
+ // 不可全选样式
+ .el-tree-node {
+     .el-checkbox__input.is-disabled {
+         display: none;
+     }
+ }
+ 
+}
+} 
+</style>

+ 1 - 1
src/views/Task/AgentPoolChannel/AgentPoolChannel3.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse"
+    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse" :dateType="3"
       @areaSelectChange="areaSelectChange"></retrievalForm>
     <kt-common-table :data="pageResult" :columns="columns1" element-loading-text="加载中..." v-loading="loading"
       :showBatchDelete="false" @findPage="findPage" button3Name="转发" button3Type="text"

+ 1 - 1
src/views/Task/CompanyPoolChannel/CompanyPoolChannel3.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse"
+    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse" :dateType="3"
       @areaSelectChange="areaSelectChange"></retrievalForm>
     <kt-common-table :data="pageResult" :columns="columns1" element-loading-text="加载中..." v-loading="loading"
       :showBatchDelete="false" @findPage="findPage" ref="commonTable" :stripe="false"

+ 2 - 2
src/views/Task/ElectricSales/AgentPoolChannel3.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
-    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse"
+    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse" :dateType="3"
       @areaSelectChange="areaSelectChange"></retrievalForm>
-    <kt-common-table :data="pageResult" :columns="columns1" element-loading-text="加载中..." v-loading="loading"
+    <kt-common-table :data="pageResult" :columns="columns1" element-loading-text="加载中..." v-loading="loading" 
       :showBatchDelete="false" @findPage="findPage" button3Name="转发" button3Type="text"
       @handleButton3="transmit" button2Name="报价轨迹" button2Type="text"  ref="commonTable" :stripe="false"
       button6Name="批单" button6Type="text" @handleButton6="batchOrder"

+ 1 - 1
src/views/Task/TaskPoolChannel/TaskPoolChannel3.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse"
+    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse" :dateType="3"
       @areaSelectChange="areaSelectChange"></retrievalForm>
     <kt-common-table :data="pageResult" ref="commonTable" :columns="columns1" element-loading-text="加载中..." v-loading="loading"
       :showBatchDelete="false" @findPage="findPage"

+ 4 - 0
src/views/Task/daikeComponents/KtLetter.vue

@@ -3171,6 +3171,7 @@
         <el-button size="small" type="primary" @click="uploadinformation">上传资料</el-button>
       </span>
     </el-dialog>
+    <floatingBar/>
   </div>
 </template>
 <script>
@@ -3192,6 +3193,8 @@ import quotationDialog from "@/views/Core/components/quotationDialog.vue";
 import quotationDialogPro from "@/views/Core/components/quotationDialogPro.vue";
 import detailsDialog from "@/views/Core/components/detailsDialog.vue";
 import imageDialog from "@/views/Core/components/imageDialog.vue";
+import floatingBar from '@/components/customerService/floatingBar.vue';//表单组件
+
 import { mapState } from "vuex";
 export default {
   inject: ["reload"],
@@ -4769,6 +4772,7 @@ export default {
     quotationDialog,
     quotationDialogPro,
     imageDialog,
+    floatingBar,
     "el-image-viewer": () =>
       import("element-ui/packages/image/src/image-viewer"),
   },

+ 6 - 0
src/views/Task/mixin.js

@@ -118,6 +118,12 @@ export const mixin = { // 导出混入对象
           type: 'date',
           list: 'attachList'
         },
+        {
+          name: ["signStartDateStr", "signEndDateStr"],
+          label: '签单时间',
+          type: 'date',
+          list: 'signList'
+        },
       ],
       loading: false,
       queryFrom: {},