소스 검색

Merge branch 'dev' of git.echepei.com:caojunjie/Smart_platform_ui into dev

caojunjie 3 년 전
부모
커밋
c246b8aa78
28개의 변경된 파일1435개의 추가작업 그리고 164개의 파일을 삭제
  1. 3 18
      src/components/crop-select/main.vue
  2. 8 0
      src/enums/column-name.js
  3. 15 0
      src/router/views/index.js
  4. 2 2
      src/views/basicData/customerInformation/detailsPageEdit.vue
  5. 2 2
      src/views/basicData/factoryInformation/factoryInformation/detailsPageEdit.vue
  6. 26 32
      src/views/basicData/facultyManagement/detailsPage.vue
  7. 17 15
      src/views/basicData/facultyManagement/index.vue
  8. 2 2
      src/views/basicData/fleetInformation/detailsPageEdit.vue
  9. 137 9
      src/views/basicData/salaryConfiguration/detailsPage.vue
  10. 0 0
      src/views/basicData/salaryConfiguration/js/optionList.js
  11. 1 0
      src/views/exportTrade/customerInquiry/config/customerContact.json
  12. 14 0
      src/views/exportTrade/customerInquiry/detailsPage.vue
  13. 2 0
      src/views/exportTrade/invoice/config/customerContact.json
  14. 22 8
      src/views/exportTrade/invoice/detailsPage.vue
  15. 1 0
      src/views/exportTrade/salesContract/config/customerContact.json
  16. 15 1
      src/views/exportTrade/salesContract/detailsPage.vue
  17. 26 15
      src/views/salaryManagement/highSchool/detailsPage.vue
  18. 47 4
      src/views/salaryManagement/highSchool/js/optionList.js
  19. 26 15
      src/views/salaryManagement/juniorhighSchool/detailsPage.vue
  20. 47 4
      src/views/salaryManagement/juniorhighSchool/js/optionList.js
  21. 25 14
      src/views/salaryManagement/logisticsDepartment/detailsPage.vue
  22. 47 4
      src/views/salaryManagement/logisticsDepartment/js/optionList.js
  23. 26 15
      src/views/salaryManagement/primarySchool/detailsPage.vue
  24. 47 4
      src/views/salaryManagement/primarySchool/js/optionList.js
  25. 68 0
      src/views/saleLeads/config/customerContact.json
  26. 72 0
      src/views/saleLeads/config/mainList.json
  27. 488 0
      src/views/saleLeads/detail.vue
  28. 249 0
      src/views/saleLeads/index.vue

+ 3 - 18
src/components/crop-select/main.vue

@@ -114,7 +114,6 @@
 
 <script>
 import option from "./configuration/mainList.json";
-import option2 from "./configuration/mainList2.json";
 import {
   customerList,
   allCropList,
@@ -171,17 +170,7 @@ export default {
     event: "balabala"
   },
   async created() {
-    if (this.gysType == "CK" && this.corpType == "GYS") {
-      this.tableOption = await this.getColumnData(
-        this.getColumnName(99),
-        option2
-      );
-    } else {
-      this.tableOption = await this.getColumnData(
-        this.getColumnName(51),
-        option
-      );
-    }
+    this.tableOption = await this.getColumnData(this.getColumnName(51), option);
     let userObj = JSON.parse(localStorage.getItem("saber-userInfo")).content;
     this.title = getCustomerName(this.corpType);
     allCropList({
@@ -307,12 +296,8 @@ export default {
       }
     },
     async resetColumn() {
-      this.option =
-        this.gysType == "CK" && this.corpType == "GYS" ? option2 : option;
-      const inSave = await this.delColumnData(
-        this.getColumnName(51),
-        this.gysType == "CK" && this.corpType == "GYS" ? option2 : option
-      );
+      this.option = option;
+      const inSave = await this.delColumnData(this.getColumnName(51), option);
       if (inSave) {
         this.$message.success("重置成功");
         this.$refs.crud.$refs.dialogColumn.columnBox = false;

+ 8 - 0
src/enums/column-name.js

@@ -369,6 +369,14 @@ const columnName = [{
     code: 100,
     name: '公司下拉'
   },
+  {
+    code: 101,
+    name: '销售机会列表'
+  },
+  {
+    code: 102,
+    name: '销售机会明细'
+  },
 ]
 export const getColumnName = (key) => {
   for (let index = 0; index < columnName.length; index++) {

+ 15 - 0
src/router/views/index.js

@@ -1230,4 +1230,19 @@ export default [{
       component: () => import( /* webpackChunkName: "views" */ '@/views/workManagement/requisition/index')
     }]
   },
+  //销售机会
+  {
+    path: '/saleLeads/index',
+    component: Layout,
+    hidden: true,
+    children: [{
+      path: '/saleLeads/index',
+      name: '销售机会',
+      meta: {
+        i18n: '/saleLeads/index',
+        keepAlive: true,
+      },
+      component: () => import( /* webpackChunkName: "views" */ '@/views/saleLeads/index')
+    }]
+  },
 ]

+ 2 - 2
src/views/basicData/customerInformation/detailsPageEdit.vue

@@ -12,10 +12,10 @@
         </el-button>
       </div>
       <div class="add-customer-btn">
-        <el-button type="primary" @click="synchronization" size="small"
+        <el-button type="primary" @click="synchronization" size="small" :disabled="!form.id"
         >同 步
         </el-button>
-        <el-button type="primary" @click="openFlow" size="small"
+        <el-button type="primary" @click="openFlow" size="small" :disabled="!form.id"
           >审 核
         </el-button>
         <el-button

+ 2 - 2
src/views/basicData/factoryInformation/factoryInformation/detailsPageEdit.vue

@@ -12,10 +12,10 @@
         </el-button>
       </div>
       <div class="add-customer-btn">
-        <el-button type="primary" @click="synchronization" size="small"
+        <el-button type="primary" @click="synchronization" size="small" :disabled="!form.id"
         >同 步
         </el-button>
-        <el-button type="primary" @click="openFlow" size="small"
+        <el-button type="primary" @click="openFlow" size="small" :disabled="!form.id"
           >审 核
         </el-button>
         <el-button

+ 26 - 32
src/views/basicData/facultyManagement/detailsPage.vue

@@ -46,6 +46,10 @@
           v-loading="loading"
         >
         </avue-form>
+        <div style="font-size:12px;margin-left:60px">
+          <span style="color:red;font-weight: 600;">备注:</span
+          >工资基数标准=工资拨付标准-职级拨付标准-工作量工资标准+虚拟工作量工资标准-双休日工作量标准+虚拟双休日工作量标准-日常考核工资标准+虚拟日常考核工资标准-学期绩效工资标准
+        </div>
       </basic-container>
       <containerTitle title="事业编考试的记录"></containerTitle>
       <basic-container>
@@ -317,8 +321,8 @@ export default {
             span: 6
           },
           {
-            label: "工资基数标准",
-            prop: "salaryBase",
+            label: "工资拨付标准",
+            prop: "salaryWithdrawalStandard",
             precision: 2,
             type: "number",
             controls: false,
@@ -333,8 +337,8 @@ export default {
             span: 6
           },
           {
-            label: "工资拨付标准",
-            prop: "salaryWithdrawalStandard",
+            label: "工资基数标准",
+            prop: "salaryBase",
             precision: 2,
             type: "number",
             controls: false,
@@ -356,15 +360,6 @@ export default {
             controls: false,
             span: 6
           },
-
-          {
-            label: "日常考核标准",
-            prop: "dailyAssessmentCriteriaName",
-            precision: 2,
-            type: "number",
-            controls: false,
-            span: 6
-          },
           {
             label: "双休日工作量工资标准",
             prop: "doubleCease",
@@ -382,15 +377,15 @@ export default {
             span: 6
           },
           {
-            label: "学期绩效标准",
-            prop: "termPerformanceSalaryName",
+            label: "日常考核工资标准",
+            prop: "dailyAssessmentCriteriaName",
+            precision: 2,
             type: "number",
             controls: false,
-            precision: 2,
             span: 6
           },
           {
-            label: "虚拟日常考核标准",
+            label: "虚拟日常考核工资标准",
             prop: "virtualDailyAssessmentCriteria",
             precision: 2,
             type: "number",
@@ -398,6 +393,14 @@ export default {
             span: 6
           },
           {
+            label: "学期绩效工资标准",
+            prop: "termPerformanceSalaryName",
+            type: "number",
+            controls: false,
+            precision: 2,
+            span: 6
+          },
+          {
             label: "班主任补贴标准",
             prop: "teacherSubsidy",
             precision: 2,
@@ -479,24 +482,24 @@ export default {
             span: 6
           },
           {
-            label: "工资基数",
-            prop: "salaryBaseName",
+            label: "职级工资",
+            prop: "rankSalary",
             precision: 2,
             type: "number",
             controls: false,
             span: 6
           },
           {
-            label: "职级工资",
-            prop: "rankWithdrawalStandard",
+            label: "工资基数",
+            prop: "salaryBaseName",
             precision: 2,
             type: "number",
             controls: false,
             span: 6
           },
           {
-            label: "职级等级工资",
-            prop: "rankSalary",
+            label: "日常考核等级工资",
+            prop: "dailyAssessmentSalary",
             precision: 2,
             type: "number",
             controls: false,
@@ -510,7 +513,6 @@ export default {
             controls: false,
             span: 6
           },
-
           {
             label: "日常考核工资",
             prop: "dailyAssessmentCriteria",
@@ -520,14 +522,6 @@ export default {
             span: 6
           },
           {
-            label: "日常考核等级工资",
-            prop: "dailyAssessmentSalary",
-            precision: 2,
-            type: "number",
-            controls: false,
-            span: 6
-          },
-          {
             label: "学期绩效工资",
             prop: "termPerformanceSalary",
             precision: 2,

+ 17 - 15
src/views/basicData/facultyManagement/index.vue

@@ -141,7 +141,11 @@
 <script>
 import detailsPage from "./detailsPage";
 import { getToken } from "@/util/auth";
-import { getList, remove,allcalculate } from "@/api/basicData/facultyManagement";
+import {
+  getList,
+  remove,
+  allcalculate
+} from "@/api/basicData/facultyManagement";
 export default {
   name: "index",
   data() {
@@ -415,6 +419,12 @@ export default {
             overHidden: true
           },
           {
+            label: "工作量工资标准",
+            prop: "workloadSalaryName",
+            width: "120",
+            overHidden: true
+          },
+          {
             label: "工作量工资",
             prop: "workloadSalary",
             width: "100",
@@ -523,14 +533,6 @@ export default {
             width: "100",
             overHidden: true
           },
-
-          {
-            label: "工作量工资标准",
-            prop: "workloadSalaryName",
-            width: "100",
-            overHidden: true
-          },
-
           {
             label: "日常考核标准",
             prop: "dailyAssessmentCriteriaName",
@@ -708,15 +710,15 @@ export default {
       );
     },
     calculate() {
-      const ids=[]
-      this.selectionList.forEach(e=>{
-        ids.push(e.id)
-      })
+      const ids = [];
+      this.selectionList.forEach(e => {
+        ids.push(e.id);
+      });
       this.loading = true;
-      allcalculate({idList:ids})
+      allcalculate({ idList: ids })
         .then(res => {
           if (res.data.code == "200") {
-            this.$message.success('计算成功')
+            this.$message.success("计算成功");
             this.onLoad(this.page, this.search);
           }
         })

+ 2 - 2
src/views/basicData/fleetInformation/detailsPageEdit.vue

@@ -12,10 +12,10 @@
         </el-button>
       </div>
       <div class="add-customer-btn">
-        <el-button type="primary" @click="synchronization" size="small"
+        <el-button type="primary" @click="synchronization" size="small" :disabled="!form.id"
           >同 步
         </el-button>
-        <el-button type="primary" @click="openFlow" size="small"
+        <el-button type="primary" @click="openFlow" size="small" :disabled="!form.id"
           >审 核
         </el-button>
         <el-button

+ 137 - 9
src/views/basicData/salaryConfiguration/detailsPage.vue

@@ -54,6 +54,25 @@
               </el-option>
             </el-select>
           </template>
+          <template slot="normType">
+            <el-select
+              size="small"
+              v-model="form.normType"
+              placeholder="请选择"
+              clearable
+              :filterable="true"
+              :disabled="detailData.status == 1"
+              @change="normTypeChange"
+            >
+              <el-option
+                v-for="item in normTypeList"
+                :key="item.id"
+                :label="item.dictValue"
+                :value="item.dictValue"
+              >
+              </el-option>
+            </el-select>
+          </template>
         </avue-form>
       </basic-container>
       <containerTitle title="基础明细"></containerTitle>
@@ -222,11 +241,7 @@ export default {
             label: "标准类别",
             prop: "normType",
             type: "select",
-            dicUrl: "/api/blade-system/dict-biz/dictionary?code=norm_type",
-            props: {
-              label: "dictValue",
-              value: "dictValue"
-            },
+            // dicUrl: "/api/blade-system/dict-biz/dictionary?code=norm_type",
             rules: [
               {
                 required: true,
@@ -234,8 +249,14 @@ export default {
                 trigger: "blur"
               }
             ],
-            filterable: true,
             span: 6
+            // change: ({ value, column }) => {
+            //   if (value == "工资拨付标准") {
+            //     this.tableOption = tableOption2;
+            //   } else {
+            //     this.tableOption = tableOption;
+            //   }
+            // }
           },
           {
             label: "教师类别",
@@ -290,7 +311,7 @@ export default {
           }
         ]
       },
-      tableOption: {
+      tableOption:{
         align: "center",
         addBtn: false,
         refreshBtn: false,
@@ -303,7 +324,8 @@ export default {
           {
             label: "分类明细",
             prop: "parameter",
-            overHidden: true
+            overHidden: true,
+            index: 1
           },
           {
             label: "工资标准",
@@ -315,6 +337,90 @@ export default {
             cell: true
           },
           {
+            label: "工作量工资标准",
+            prop: "workloadSalaryName",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 120
+          },
+          {
+            label: "虚拟工作量工资标准",
+            prop: "virtualWorkloadSalary",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 140
+          },
+          {
+            label: "双休日工作量工资标准",
+            prop: "doubleCease",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 160
+          },
+          {
+            label: "日常考核工资标准",
+            prop: "dailyAssessmentCriteriaName",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 120
+          },
+          {
+            label: "虚拟双休日工作量工资标准",
+            prop: "virtualDoubleCease",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 170
+          },
+          {
+            label: "虚拟日常考核标准",
+            prop: "virtualDailyAssessmentCriteria",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 120
+          },
+          {
+            label: "学期绩效工资标准",
+            prop: "termPerformanceSalaryName",
+            precision: 2,
+            type: "number",
+            controls: false,
+            overHidden: true,
+            cell: true,
+            hide: true,
+            showColumn: false,
+            width: 120
+          },
+          {
             label: "备注",
             prop: "remarks",
             overHidden: true,
@@ -323,10 +429,11 @@ export default {
         ]
       },
       resultList: [],
+      normTypeList: [],
       jobTitleList: [],
       jobLevelList: [],
       occupationalLevelList: [],
-      maritalList:[]
+      maritalList: []
     };
   },
   props: {
@@ -344,6 +451,9 @@ export default {
     this.getWorkDicts("result_type").then(res => {
       this.resultList = res.data.data;
     });
+    this.getWorkDicts("norm_type").then(res => {
+      this.normTypeList = res.data.data;
+    });
     this.getWorkDicts("job_title").then(res => {
       this.jobTitleList = res.data.data;
     });
@@ -390,6 +500,7 @@ export default {
           }
           this.form = res.data.data;
           this.dataList = res.data.data.schoolConfigItems;
+          this.normTypeChange(this.form.normType);
         })
         .finally(() => {
           // this.loading = false;
@@ -433,6 +544,23 @@ export default {
         }
       });
     },
+    normTypeChange(row) {
+      if (row == "工资拨付标准") {
+        this.tableOption.column.forEach(e => {
+          if (e.hide == true) {
+            e.hide = false;
+            e.showColumn = true;
+          }
+        });
+      } else {
+        this.tableOption.column.forEach(e => {
+          if (e.hide == false) {
+            e.hide = true;
+            e.showColumn = false;
+          }
+        });
+      }
+    },
     parameterChange(row, index) {
       if (
         this.dataList.filter(value => value.parameter == row.parameter).length >

+ 0 - 0
src/views/basicData/salaryConfiguration/js/optionList.js


+ 1 - 0
src/views/exportTrade/customerInquiry/config/customerContact.json

@@ -11,6 +11,7 @@
   "menuWidth": 120,
   "refreshBtn": false,
   "showSummary": true,
+  "indexSlot":true,
   "column": [{
       "label": "产品类别",
       "prop": "priceCategory",

+ 14 - 0
src/views/exportTrade/customerInquiry/detailsPage.vue

@@ -235,6 +235,16 @@
           @resetColumn="resetColumn"
           :cell-style="cellStyle"
         >
+          <template slot="headerSerial">
+            <el-button
+              type="primary"
+              icon="el-icon-plus"
+              size="mini"
+              @click.stop="addRow"
+              :disabled="detailData.status == 1"
+              circle
+            ></el-button>
+          </template>
           <template slot="menuLeft">
             <el-button
               type="primary"
@@ -1076,6 +1086,9 @@ export default {
         });
       }
     },
+    addRow(){
+      this.data.push({$cellEdit:true})
+    },
     corpAttnChange() {
       this.corpsattns.forEach(e => {
         if (this.form.corpId == e.pid) {
@@ -2029,6 +2042,7 @@ export default {
             if (res.data.code == 200) {
               this.detailData.status = 2;
               this.option = this.$options.data().option;
+              this.$refs.crud.refreshTable()
             }
           });
         }

+ 2 - 0
src/views/exportTrade/invoice/config/customerContact.json

@@ -10,6 +10,8 @@
   "refreshBtn": false,
   "delBtn":false,
   "showSummary": true,
+  "index": true,
+  "indexSlot":true,
   "addBtnText": "新增明细",
   "column": [
     {

+ 22 - 8
src/views/exportTrade/invoice/detailsPage.vue

@@ -90,6 +90,16 @@
           :summary-method="summaryMethod"
           :cell-style="cellStyle"
         >
+          <template slot="headerSerial">
+            <el-button
+              type="primary"
+              icon="el-icon-plus"
+              size="mini"
+              @click.stop="addRow"
+              :disabled="detailData.status == 1"
+              circle
+            ></el-button>
+          </template>
           <template slot="menuLeft">
             <el-button
               type="primary"
@@ -662,6 +672,9 @@ export default {
       }
       this.dialogVisible = false;
     },
+    addRow() {
+      this.data.push({ $cellEdit: true });
+    },
     closeGoods() {
       this.selectionList = [];
       this.treeDeptId = "";
@@ -999,6 +1012,7 @@ export default {
             if (res.data.code == 200) {
               this.detailData.status = 2;
               this.option = this.$options.data().option;
+              this.$refs.crud.refreshTable();
             }
           });
         }
@@ -1011,8 +1025,8 @@ export default {
       );
       if (inSave) {
         this.$nextTick(() => {
-          this.$refs.crud.doLayout()
-        })
+          this.$refs.crud.doLayout();
+        });
         this.$message.success("保存成功");
         //关闭窗口
         this.$refs.crud.$refs.dialogColumn.columnBox = false;
@@ -1026,8 +1040,8 @@ export default {
       );
       if (inSave) {
         this.$nextTick(() => {
-          this.$refs.crud.doLayout()
-        })
+          this.$refs.crud.doLayout();
+        });
         this.$message.success("重置成功");
         //关闭窗口
         setTimeout(() => {
@@ -1042,8 +1056,8 @@ export default {
       );
       if (inSave) {
         this.$nextTick(() => {
-          this.$refs.goodsCrud.doLayout()
-        })
+          this.$refs.goodsCrud.doLayout();
+        });
         this.$message.success("保存成功");
         //关闭窗口
         this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
@@ -1057,8 +1071,8 @@ export default {
       );
       if (inSave) {
         this.$nextTick(() => {
-          this.$refs.goodsCrud.doLayout()
-        })
+          this.$refs.goodsCrud.doLayout();
+        });
         this.$message.success("重置成功");
         //关闭窗口
         setTimeout(() => {

+ 1 - 0
src/views/exportTrade/salesContract/config/customerContact.json

@@ -12,6 +12,7 @@
   "refreshBtn": false,
   "showSummary": true,
   "selection": true,
+  "indexSlot":true,
   "tip": false,
   "column": [{
       "label": "产品类别",

+ 15 - 1
src/views/exportTrade/salesContract/detailsPage.vue

@@ -275,6 +275,16 @@
             :summary-method="summaryMethod"
             :cell-style="cellStyle"
           >
+            <template slot="headerSerial">
+              <el-button
+                type="primary"
+                icon="el-icon-plus"
+                size="mini"
+                @click.stop="addRow"
+                :disabled="detailData.status == 1"
+                circle
+              ></el-button>
+            </template>
             <template slot="cname" slot-scope="{ row, index }">
               <span v-if="row.$cellEdit" style="display:flex">
                 <el-select
@@ -459,7 +469,7 @@
                 size="small"
                 @click.stop="newDetails"
                 :disabled="detailData.status == 1"
-                >录入明细</el-button
+                >批量录入</el-button
               >
               <el-button
                 type="primary"
@@ -1833,6 +1843,9 @@ export default {
         });
       });
     },
+    addRow() {
+      this.data.push({ $cellEdit: true });
+    },
     //商品明细导入
     newDetails() {
       if (!this.form.corpId) {
@@ -2228,6 +2241,7 @@ export default {
             if (res.data.code == 200) {
               this.detailData.status = 2;
               this.option = this.$options.data().option;
+              this.$refs.crud.refreshTable();
             }
           });
         }

+ 26 - 15
src/views/salaryManagement/highSchool/detailsPage.vue

@@ -1067,8 +1067,8 @@ export default {
             change: ({ value }) => {
               if (value) {
                 this.optionList.column.forEach(e => {
-                  if (e.prop == "yearUpPerformance") {
-                    e.label = value + "年上学期绩效";
+                  if (e.prop == "monthHour") {
+                    e.label = value + "月份工作量";
                   }
                   if (e.prop == "yearDownPerformance") {
                     e.label = value + "年下学期绩效";
@@ -1572,19 +1572,20 @@ export default {
         });
     },
     calculate2() {
-      if (!this.form.id) {
-        return this.$message.error("请先保存数据");
-      }
-      this.loading = true;
-      calculate2({ pid: this.form.id })
-        .then(res => {
-          if (res.data.code == "200") {
-            this.getItemDetail();
-          }
-        })
-        .finally(() => {
-          this.loading = false;
-        });
+      return this.$message.error("正在开发中");
+      // if (!this.form.id) {
+      //   return this.$message.error("请先保存数据");
+      // }
+      // this.loading = true;
+      // calculate2({ pid: this.form.id })
+      //   .then(res => {
+      //     if (res.data.code == "200") {
+      //       this.getItemDetail();
+      //     }
+      //   })
+      //   .finally(() => {
+      //     this.loading = false;
+      //   });
     },
     importExcel() {
       if (!this.form.id) {
@@ -2101,6 +2102,16 @@ export default {
               "excelFile"
             ).disabled = false;
             break;
+          case "29":
+            this.exportUrl =
+              "/api/blade-school/salaryitem/export/doubleWorkloadExcel";
+            this.findObject(this.excelOption.column, "excelFile").action =
+              "/api/blade-school/salaryitem/import/doubleWorkloadExcel";
+            this.findObject(
+              this.excelOption.column,
+              "excelFile"
+            ).disabled = false;
+            break;
           default:
             this.findObject(
               this.excelOption.column,

+ 47 - 4
src/views/salaryManagement/highSchool/js/optionList.js

@@ -273,7 +273,7 @@ export const optionList = {
       span: 4
     },
     {
-      label: "月份课时",
+      label: "月份工作量",
       prop: "monthHour",
       width: 100,
       overHidden: true,
@@ -284,6 +284,17 @@ export const optionList = {
       span: 4
     },
     {
+      label: "课时费",
+      prop: "monthPrice",
+      width: 100,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "月工作量工资",
       prop: "momthWorkloadSalary",
       width: 120,
@@ -295,6 +306,39 @@ export const optionList = {
       span: 4
     },
     {
+      label: "双休日工作量",
+      prop: "doubleHour",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日课时费",
+      prop: "doublePrice",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日工作量工资",
+      prop: "doubleMoney",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "自定义",
       prop: "custom",
       width: 100,
@@ -1494,9 +1538,8 @@ export const auditOption = {
   align: "center",
   index: true,
   viewBtn: false,
-  menu:false,
-  column: [
-    {
+  menu: false,
+  column: [{
       label: "姓名",
       prop: "cname",
       width: 100,

+ 26 - 15
src/views/salaryManagement/juniorhighSchool/detailsPage.vue

@@ -1067,8 +1067,8 @@ export default {
             change: ({ value }) => {
               if (value) {
                 this.optionList.column.forEach(e => {
-                  if (e.prop == "yearUpPerformance") {
-                    e.label = value + "年上学期绩效";
+                  if (e.prop == "monthHour") {
+                    e.label = value + "月份工作量";
                   }
                   if (e.prop == "yearDownPerformance") {
                     e.label = value + "年下学期绩效";
@@ -1572,19 +1572,20 @@ export default {
         });
     },
     calculate2() {
-      if (!this.form.id) {
-        return this.$message.error("请先保存数据");
-      }
-      this.loading = true;
-      calculate2({ pid: this.form.id })
-        .then(res => {
-          if (res.data.code == "200") {
-            this.getItemDetail();
-          }
-        })
-        .finally(() => {
-          this.loading = false;
-        });
+      return this.$message.error("正在开发中");
+      // if (!this.form.id) {
+      //   return this.$message.error("请先保存数据");
+      // }
+      // this.loading = true;
+      // calculate2({ pid: this.form.id })
+      //   .then(res => {
+      //     if (res.data.code == "200") {
+      //       this.getItemDetail();
+      //     }
+      //   })
+      //   .finally(() => {
+      //     this.loading = false;
+      //   });
     },
     importExcel() {
       if (!this.form.id) {
@@ -2101,6 +2102,16 @@ export default {
               "excelFile"
             ).disabled = false;
             break;
+          case "29":
+            this.exportUrl =
+              "/api/blade-school/salaryitem/export/doubleWorkloadExcel";
+            this.findObject(this.excelOption.column, "excelFile").action =
+              "/api/blade-school/salaryitem/import/doubleWorkloadExcel";
+            this.findObject(
+              this.excelOption.column,
+              "excelFile"
+            ).disabled = false;
+            break;
           default:
             this.findObject(
               this.excelOption.column,

+ 47 - 4
src/views/salaryManagement/juniorhighSchool/js/optionList.js

@@ -273,7 +273,7 @@ export const optionList = {
       span: 4
     },
     {
-      label: "月份课时",
+      label: "月份工作量",
       prop: "monthHour",
       width: 100,
       overHidden: true,
@@ -284,6 +284,17 @@ export const optionList = {
       span: 4
     },
     {
+      label: "课时费",
+      prop: "monthPrice",
+      width: 100,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "月工作量工资",
       prop: "momthWorkloadSalary",
       width: 120,
@@ -295,6 +306,39 @@ export const optionList = {
       span: 4
     },
     {
+      label: "双休日工作量",
+      prop: "doubleHour",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日课时费",
+      prop: "doublePrice",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日工作量工资",
+      prop: "doubleMoney",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "自定义",
       prop: "custom",
       width: 100,
@@ -1494,9 +1538,8 @@ export const auditOption = {
   align: "center",
   index: true,
   viewBtn: false,
-  menu:false,
-  column: [
-    {
+  menu: false,
+  column: [{
       label: "姓名",
       prop: "cname",
       width: 100,

+ 25 - 14
src/views/salaryManagement/logisticsDepartment/detailsPage.vue

@@ -1099,7 +1099,7 @@ export default {
               if (value) {
                 this.optionList.column.forEach(e => {
                   if (e.prop == "monthHour") {
-                    e.label = value + "月份课时";
+                    e.label = value + "月份工作量";
                   }
                   if (e.prop == "momthWorkloadSalary") {
                     e.label = value + "月工作量工资";
@@ -1572,19 +1572,20 @@ export default {
         });
     },
     calculate2() {
-      if (!this.form.id) {
-        return this.$message.error("请先保存数据");
-      }
-      this.loading = true;
-      calculate2({ pid: this.form.id })
-        .then(res => {
-          if (res.data.code == "200") {
-            this.getItemDetail();
-          }
-        })
-        .finally(() => {
-          this.loading = false;
-        });
+      return this.$message.error("正在开发中");
+      // if (!this.form.id) {
+      //   return this.$message.error("请先保存数据");
+      // }
+      // this.loading = true;
+      // calculate2({ pid: this.form.id })
+      //   .then(res => {
+      //     if (res.data.code == "200") {
+      //       this.getItemDetail();
+      //     }
+      //   })
+      //   .finally(() => {
+      //     this.loading = false;
+      //   });
     },
     importExcel() {
       if (!this.form.id) {
@@ -2101,6 +2102,16 @@ export default {
               "excelFile"
             ).disabled = false;
             break;
+          case "29":
+            this.exportUrl =
+              "/api/blade-school/salaryitem/export/doubleWorkloadExcel";
+            this.findObject(this.excelOption.column, "excelFile").action =
+              "/api/blade-school/salaryitem/import/doubleWorkloadExcel";
+            this.findObject(
+              this.excelOption.column,
+              "excelFile"
+            ).disabled = false;
+            break;
           default:
             this.findObject(
               this.excelOption.column,

+ 47 - 4
src/views/salaryManagement/logisticsDepartment/js/optionList.js

@@ -273,7 +273,7 @@ export const optionList = {
       span: 4
     },
     {
-      label: "月份课时",
+      label: "月份工作量",
       prop: "monthHour",
       width: 100,
       overHidden: true,
@@ -284,6 +284,17 @@ export const optionList = {
       span: 4
     },
     {
+      label: "课时费",
+      prop: "monthPrice",
+      width: 100,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "月工作量工资",
       prop: "momthWorkloadSalary",
       width: 120,
@@ -295,6 +306,39 @@ export const optionList = {
       span: 4
     },
     {
+      label: "双休日工作量",
+      prop: "doubleHour",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日课时费",
+      prop: "doublePrice",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日工作量工资",
+      prop: "doubleMoney",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "自定义",
       prop: "custom",
       width: 100,
@@ -1494,9 +1538,8 @@ export const auditOption = {
   align: "center",
   index: true,
   viewBtn: false,
-  menu:false,
-  column: [
-    {
+  menu: false,
+  column: [{
       label: "姓名",
       prop: "cname",
       width: 100,

+ 26 - 15
src/views/salaryManagement/primarySchool/detailsPage.vue

@@ -1099,7 +1099,7 @@ export default {
               if (value) {
                 this.optionList.column.forEach(e => {
                   if (e.prop == "monthHour") {
-                    e.label = value + "月份课时";
+                    e.label = value + "月份工作量";
                   }
                   if (e.prop == "momthWorkloadSalary") {
                     e.label = value + "月工作量工资";
@@ -1571,20 +1571,21 @@ export default {
           this.loading = false;
         });
     },
-    calculate2(){
-      if (!this.form.id) {
-        return this.$message.error("请先保存数据");
-      }
-      this.loading = true;
-      calculate2({ pid: this.form.id })
-        .then(res => {
-          if (res.data.code == "200") {
-            this.getItemDetail();
-          }
-        })
-        .finally(() => {
-          this.loading = false;
-        });
+    calculate2() {
+      return this.$message.error("正在开发中");
+      // if (!this.form.id) {
+      //   return this.$message.error("请先保存数据");
+      // }
+      // this.loading = true;
+      // calculate2({ pid: this.form.id })
+      //   .then(res => {
+      //     if (res.data.code == "200") {
+      //       this.getItemDetail();
+      //     }
+      //   })
+      //   .finally(() => {
+      //     this.loading = false;
+      //   });
     },
     importExcel() {
       if (!this.form.id) {
@@ -2101,6 +2102,16 @@ export default {
               "excelFile"
             ).disabled = false;
             break;
+          case "29":
+            this.exportUrl =
+              "/api/blade-school/salaryitem/export/doubleWorkloadExcel";
+            this.findObject(this.excelOption.column, "excelFile").action =
+              "/api/blade-school/salaryitem/import/doubleWorkloadExcel";
+            this.findObject(
+              this.excelOption.column,
+              "excelFile"
+            ).disabled = false;
+            break;
           default:
             this.findObject(
               this.excelOption.column,

+ 47 - 4
src/views/salaryManagement/primarySchool/js/optionList.js

@@ -273,7 +273,7 @@ export const optionList = {
       span: 4
     },
     {
-      label: "月份课时",
+      label: "月份工作量",
       prop: "monthHour",
       width: 100,
       overHidden: true,
@@ -284,6 +284,17 @@ export const optionList = {
       span: 4
     },
     {
+      label: "课时费",
+      prop: "monthPrice",
+      width: 100,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "月工作量工资",
       prop: "momthWorkloadSalary",
       width: 120,
@@ -295,6 +306,39 @@ export const optionList = {
       span: 4
     },
     {
+      label: "双休日工作量",
+      prop: "doubleHour",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日课时费",
+      prop: "doublePrice",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
+      label: "双休日工作量工资",
+      prop: "doubleMoney",
+      width: 120,
+      overHidden: true,
+      rules: [{
+        validator: validateDecimal,
+        trigger: "blur"
+      }],
+      span: 4
+    },
+    {
       label: "自定义",
       prop: "custom",
       width: 100,
@@ -1494,9 +1538,8 @@ export const auditOption = {
   align: "center",
   index: true,
   viewBtn: false,
-  menu:false,
-  column: [
-    {
+  menu: false,
+  column: [{
       label: "姓名",
       prop: "cname",
       width: 100,

+ 68 - 0
src/views/saleLeads/config/customerContact.json

@@ -0,0 +1,68 @@
+{
+  "stripe": true,
+  "searchShow": true,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "addBtn": false,
+  "delBtn": false,
+  "align": "center",
+  "menuWidth": 120,
+  "refreshBtn": false,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [
+  ],
+  "column": [
+    {
+      "label": "日期",
+      "prop": "date",
+      "index": 1,
+      "width": 200,
+      "overHidden": true
+    },
+    {
+      "label": "内容",
+      "prop": "content",
+      "index": 2,
+      "width": 200,
+      "overHidden": true
+    },
+    {
+      "label": "客户联系人",
+      "prop": "attn",
+      "index": 3,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "联系方式",
+      "prop": "contact",
+      "index": 4,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "是否满足客户需求",
+      "prop": "satisfy",
+      "index": 5,
+      "width": 140,
+      "overHidden": true
+    },
+    {
+      "label": "人员",
+      "prop": "createUser",
+      "index": 6,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "创建时间",
+      "prop": "createTime",
+      "index": 6,
+      "width": 200,
+      "overHidden": true
+    }
+  ]
+}

+ 72 - 0
src/views/saleLeads/config/mainList.json

@@ -0,0 +1,72 @@
+{
+  "stripe": true,
+  "height": "auto",
+  "searchShow": true,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "addBtn": false,
+  "align": "center",
+  "menuWidth": "70",
+  "searchIcon": true,
+  "searchIndex": 2,
+  "selection": true,
+  "tip": false,
+  "searchSpan": 8,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [],
+  "column": [
+    {
+      "label": "客户名称",
+      "prop": "corpName",
+      "search": true,
+      "index": 1,
+      "minWidth": 80,
+      "overHidden": true
+    },
+    {
+      "label": "业务日期",
+      "prop": "b",
+      "type": "date",
+      "overHidden": true,
+      "minWidth": 200,
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true
+    },
+    {
+      "label": "状态",
+      "prop": "state",
+      "overHidden": true,
+      "minWidth": 120,
+      "search": true,
+      "type": "select",
+      "dicData": [
+        {"label": "沟通中", "value": 0},
+        {"label": "成交", "value": 1},
+        {"label": "未成交", "value": 2}
+      ]
+    },
+    {
+      "label": "承揽人",
+      "prop": "createUser",
+      "search": true,
+      "index": 1,
+      "minWidth": 80,
+      "overHidden": true
+    },
+    {
+      "label": "对接人",
+      "prop": "oppositePerson",
+      "search": true,
+      "index": 1,
+      "minWidth": 80,
+      "overHidden": true
+    }
+  ]
+}

+ 488 - 0
src/views/saleLeads/detail.vue

@@ -0,0 +1,488 @@
+<template>
+  <div class="borderless" v-loading="pageLoading">
+    <div class="customer-head">
+      <div class="customer-back">
+        <el-button
+          type="danger"
+          style="border: none;background: none;color: red"
+          icon="el-icon-arrow-left"
+          @click="backToList"
+          :loading="btnLoading"
+        >返回列表</el-button>
+      </div>
+      <div class="add-customer-btn">
+        <el-button
+          type="primary"
+          size="small"
+          class="el-button--small-yh"
+          @click.stop="openEdit"
+        >编 辑</el-button>
+        <el-button
+          type="success"
+          :disabled="!form.id"
+          size="small"
+          @click="copyDoc"
+          :loading="btnLoading"
+        >复制单据</el-button>
+        <el-button
+          type="primary"
+          @click="editCustomer"
+          size="small"
+          :loading="btnLoading"
+        >保存数据</el-button>
+      </div>
+    </div>
+    <div class="customer-main">
+      <containerTitle title="基础信息"/>
+      <basic-container :showBtn="true">
+        <avue-form
+          ref="form"
+          class="trading-form"
+          v-model="form"
+          :option="option"
+        >
+          <template slot="corpId">
+            <crop-select
+              v-model="form.corpId"
+              @getCorpData="getKHData"
+              corpType="KH"
+            />
+          </template>
+          <template slot="createUser">
+            <el-select
+              v-model="form.createUser"
+              filterable
+              clearable
+              size="small"
+            >
+              <el-option
+                v-for="(item,index) in userList"
+                :key="index"
+                :label="item.realName"
+                :value="item.realName"
+              ></el-option>
+            </el-select>
+          </template>
+          <template slot="oppositePerson">
+            <el-select
+              v-model="form.oppositePerson"
+              filterable
+              clearable
+              size="small"
+            >
+              <el-option
+                v-for="(item,index) in userList"
+                :key="index"
+                :label="item.realName"
+                :value="item.realName"
+              ></el-option>
+            </el-select>
+          </template>
+        </avue-form>
+      </basic-container>
+      <containerTitle title="沟通记录"/>
+      <basic-container>
+        <avue-crud
+          ref="crud"
+          :data="dataList"
+          :option="tableOption"
+          :cell-style="cellStyle"
+          @saveColumn="saveColumn"
+          @resetColumn="resetColumn"
+        >
+          <template slot="menuLeft">
+            <el-button
+              type="primary"
+              icon="el-icon-plus"
+              size="small"
+              @click.stop="newDetails"
+            >录入明细</el-button>
+            <el-button
+              type="info"
+              icon="el-icon-printer"
+              size="small"
+            >报 表</el-button>
+          </template>
+          <template slot="menu" slot-scope="{ row, index }">
+            <el-button
+              size="small"
+              icon="el-icon-edit"
+              type="text"
+              @click="rowCell(row, index)"
+            >{{ row.$cellEdit ? "保存" : "修改" }}</el-button>
+            <el-button
+              size="small"
+              icon="el-icon-delete"
+              type="text"
+              @click="rowDel(row, index)"
+            >删除</el-button>
+          </template>
+          <template slot="date" slot-scope="{ row, index }">
+            <el-date-picker
+              v-if="row.$cellEdit"
+              v-model="row.date"
+              type="date"
+              placeholder="选择日期"
+              size="small"
+              style="width: 100%"
+            ></el-date-picker>
+            <span v-else>{{row.date}}</span>
+          </template>
+          <template slot="content" slot-scope="{ row, index }">
+            <el-input
+              v-if="row.$cellEdit"
+              v-model="row.content"
+              size="small"
+              placeholder="输入内容"
+            />
+            <span v-else>{{row.content}}</span>
+          </template>
+          <template slot="attn" slot-scope="{ row, index }">
+            <el-input
+              v-if="row.$cellEdit"
+              v-model="row.attn"
+              size="small"
+              placeholder="输入客户联系人"
+            />
+            <span v-else>{{row.attn}}</span>
+          </template>
+          <template slot="contact" slot-scope="{ row, index }">
+            <el-input
+              v-if="row.$cellEdit"
+              v-model="row.contact"
+              size="small"
+              placeholder="输入联系方式"
+            />
+            <span v-else>{{row.contact}}</span>
+          </template>
+          <template slot="satisfy" slot-scope="{ row, index }">
+            <el-switch
+              v-model="row.satisfy"
+              :disabled="!row.$cellEdit"
+              :inactive-value="0"
+              :active-value="1"
+            ></el-switch>
+          </template>
+        </avue-crud>
+      </basic-container>
+    </div>
+  </div>
+</template>
+
+<script>
+import tableOption from "./config/customerContact.json";
+import {
+  isDiscount,
+  isPercentage,
+  micrometerFormat,
+  IntegerFormat
+} from "@/util/validate";
+import { gainUser } from "@/api/basicData/customerInquiry";
+import {getUserInfo} from "@/api/system/user";
+import {getDeptTree} from "@/api/system/dept";
+import { getCurrentDate } from "@/util/date";
+
+export default {
+  name: "detail",
+  data() {
+    const validateRemark = (rule, value, callback) => {
+      if (this.form.state == 2 && !this.form.orderRemark) {
+        callback(new Error('备注不能为空'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      pageLoading: false,
+      btnLoading: false,
+      form: {},
+      option: {
+        menuBtn: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: "客户名称",
+            prop: "corpId",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "客户联系人",
+            prop: "corpr",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "客户电话",
+            prop: "corpTel",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+            span: 8,
+            slot: true,
+            type: 'number',
+            controls: false,
+            mock: {
+              type: 'number',
+              precision: 0,
+            },
+          },
+          {
+            label: "业务内容",
+            prop: "businessContent",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "业务日期",
+            prop: "b",
+            span: 8,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "承揽人",
+            prop: "createUser",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "对接人",
+            prop: "oppositePerson",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "状态",
+            prop: "state",
+            span: 8,
+            type: 'select',
+            dicData: [
+              {label: '沟通中', value: 0},
+              {label: '成交', value: 1},
+              {label: '未成交', value: 2},
+            ],
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+          },
+          {
+            label: "备注",
+            prop: "orderRemark",
+            type: "textarea",
+            minRows: 2,
+            span: 24,
+            rules: [
+              {validator: validateRemark, trigger: 'blur'}
+            ]
+          },
+        ],
+      },
+      dataList: [],
+      tableOption: {},
+      goodsoptions: [],
+      unitOption: [],
+      selectionList: [],
+      search: {},
+      treeStyle: "height:" + (window.innerHeight - 315) + "px",
+      goodsOption: {},
+      loading: false,
+      switchDialog: false, // 报表弹窗控制
+      userList: [],
+      dic: [],
+      loginUser: '', // 登录人
+    }
+  },
+  async created() {
+    this.$set(this.form, 'b', getCurrentDate()); // 默认当前日期
+    this.tableOption = await this.getColumnData(
+      this.getColumnName(102),
+      tableOption
+    );
+    gainUser().then(res => {
+      this.userList = res.data.data;
+    });
+    getUserInfo().then(res => {
+      this.$set(this.form, 'createUser', res.data.data.realName);
+      this.$set(this.form, 'oppositePerson', res.data.data.realName);
+      this.loginUser = res.data.data.realName;
+    })
+    getDeptTree().then(res => {
+      this.dic = res.data.data
+    })
+    this.getWorkDicts('unit').then(res => {
+      this.unitOption = res.data.data;
+    })
+  },
+  filters: {
+    IntegerFormat(num) {
+      return IntegerFormat(num);
+    },
+    decimalFormat(num) {
+      return num ? Number(num).toFixed(2) : "0.00";
+    }
+  },
+  methods: {
+    //返回列表
+    backToList() {
+      this.$emit("goBack");
+    },
+    // 编辑按钮触发
+    openEdit() {},
+    // 复制
+    copyDoc() {
+      this.$emit("copyOrder", this.form.id);
+    },
+    //修改提交触发
+    editCustomer(status) {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          // this.btnLoading = true;
+          // typeSave(this.form).then(res => {
+          //   this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
+          //   this.queryData(res.data.data.id);
+          // }).finally(() => {
+          //   this.btnLoading = false;
+          // })
+        } else {
+          return false
+        }
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(102),
+        this.tableOption
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+      }
+    },
+    async resetColumn() {
+      this.tableOption = tableOption;
+      const inSave = await this.delColumnData(
+        this.getColumnName(102),
+        tableOption
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+        this.$message.success("重置成功");
+        //关闭窗口
+        setTimeout(() => {
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }, 1000);
+      }
+    },
+    //录入明细
+    newDetails() {
+      this.$refs["form"].validate((valid, done) => {
+        done()
+        if (valid) {
+          this.dataList.push({
+            createTime: getCurrentDate('date'),
+            createUser: this.loginUser,
+            $cellEdit: true,
+          })
+        }
+      })
+    },
+    rowCell(row, index) {
+      if (row.$cellEdit == true) {
+        this.$set(row, "$cellEdit", false);
+      } else {
+        this.$set(row, "$cellEdit", true);
+      }
+    },
+    rowDel(row, index) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          // removeGoods(row.id).then(res => {
+          //   this.$message({
+          //     type: 'success',
+          //     message: '删除成功!'
+          //   })
+          //   this.dataList.splice(row.$index, 1);
+          // })
+        } else {
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+          this.dataList.splice(row.$index, 1);
+        }
+      });
+    },
+    getKHData(row) {},
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 249 - 0
src/views/saleLeads/index.vue

@@ -0,0 +1,249 @@
+<template>
+  <div>
+    <basic-container v-show="show" class="page-crad">
+      <avue-crud
+        ref="crud"
+        :option="option"
+        :data="dataList"
+        v-model="form"
+        :page.sync="page"
+        :search.sync="search"
+        :table-loading="loading"
+        :cell-style="cellStyle"
+        @selection-change="selectionChange"
+        @search-change="searchChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @refresh-change="refreshChange"
+        @on-load="onLoad"
+        @search-criteria-switch="searchCriteriaSwitch"
+        @saveColumn="saveColumn"
+        @resetColumn="resetColumn"
+      >
+        <template slot="menuLeft">
+          <el-button
+            type="primary"
+            icon="el-icon-plus"
+            size="small"
+            @click.stop="newAdd()"
+          >创建单据</el-button>
+          <el-button
+            type="success"
+            size="small"
+            icon="el-icon-plus"
+            @click.stop="copyDoc()"
+            :disabled="selection.length != 1"
+          >复制单据</el-button>
+        </template>
+        <template slot-scope="scope" slot="menu">
+          <el-button
+            type="text"
+            icon="el-icon-delete"
+            size="small"
+            @click.stop="rowDel(scope.row, scope.index)"
+            :disabled="scope.row.status == 3"
+          >删除
+          </el-button>
+        </template>
+        <template slot="corpNameSearch">
+          <crop-select
+            v-model="search.corpId"
+            corpType="KH"
+          ></crop-select>
+        </template>
+        <template slot="createUserSearch">
+          <el-select
+            v-model="search.createUser"
+            filterable
+            clearable
+            placeholder="请选择 承揽人"
+          >
+            <el-option
+              v-for="(item, index) in contractorOption"
+              :key="index"
+              :value="item.realName"
+              :label="item.realName"
+            ></el-option>
+          </el-select>
+        </template>
+        <template slot="oppositePersonSearch">
+          <el-select
+            v-model="search.oppositePerson"
+            filterable
+            clearable
+            placeholder="请选择 承揽人"
+          >
+            <el-option
+              v-for="(item, index) in oppositePersonOption"
+              :key="index"
+              :value="item.realName"
+              :label="item.realName"
+            ></el-option>
+          </el-select>
+        </template>
+      </avue-crud>
+    </basic-container>
+    <detail-page
+      @goBack="goBack"
+      @copyOrder="copyOrder"
+      :detailData="detailData"
+      v-if="!show"
+    />
+  </div>
+</template>
+
+<script>
+import option from "./config/mainList.json";
+import detailPage from "./detail";
+import { gainUser } from "@/api/basicData/customerInquiry";
+
+export default {
+  name: "index",
+  components: {
+    detailPage,
+  },
+  data() {
+    return {
+      option: {},
+      dataList: [],
+      form: {},
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 50, 100, 200, 300, 400, 500]
+      },
+      search: {},
+      show: true,
+      loading: false,
+      selection: [],
+      detailData: {},
+      contractorOption: [],
+      oppositePersonOption: [],
+    }
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(101), option);
+    gainUser().then(res => {
+      this.contractorOption = res.data.data;
+      this.oppositePersonOption = res.data.data;
+    })
+  },
+  methods: {
+    searchCriteriaSwitch(type) {
+      // if (type){
+      //   this.option.height =  this.option.height - 90
+      // }else {
+      //   this.option.height =  this.option.height + 90
+      // }
+      // this.$refs.crud.getTableHeight()
+    },
+    newAdd() {
+      this.show = false;
+    },
+    onLoad(page, params) {
+      // 重置掉展开
+      this.dataList.forEach(item => {
+        this.$refs.crud.toggleRowExpansion(item, false)
+      })
+      let queryParams = Object.assign({}, params, {
+        size: page.pageSize,
+        current: page.currentPage,
+      })
+      // this.loading = true;
+      // getSalesList(queryParams).then(res => {
+      //   this.dataList = res.data.data.records;
+      //   this.page.total = res.data.data.total;
+      //   this.option.height = window.innerHeight - 240;
+      //   this.$nextTick(() => {
+      //     this.$refs.crud.doLayout()
+      //   })
+      // }).finally(() => {
+      //   this.loading = false;
+      // })
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(101),
+        this.option
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+      }
+    },
+    async resetColumn() {
+      this.option = option;
+      const inSave = await this.delColumnData(this.getColumnName(101), option);
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.onLoad(this.page, params);
+      done();
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    copyDoc() {},
+    selectionChange(list) {
+      this.selection = list;
+    },
+    goBack() {
+      if (this.$route.query.id) {
+        this.$router.$avueRouter.closeTag(this.$route.fullPath);
+        this.$router.push({
+          path: "/dealer/sales/index"
+        });
+      }
+      this.detailData = this.$options.data().detailData;
+      this.show = true;
+      this.onLoad(this.page, this.search);
+    },
+    copyOrder(id) {
+      this.show = true;
+      this.detailData = {
+        id: id,
+        status: "copy"
+      };
+      this.$nextTick(() => {
+        this.show = false;
+      });
+    },
+    contractorRemoteMethod(name) {
+      gainUser({realName: name}).then(res => {
+        this.contractorOption = res.data.data;
+      })
+    },
+    oppositePersonRemoteMethod(name) {
+      gainUser({realName: name}).then(res => {
+        this.oppositePerson = res.data.data;
+      })
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>