wansfa 1 year ago
parent
commit
a5dbf0c533

+ 72 - 0
src/api/company/tcmScheduleReport.js

@@ -0,0 +1,72 @@
+import request from '@/utils/request'
+
+// 查询中医档期业绩报表列表
+export function listTcmScheduleReport(query) {
+  return request({
+    url: '/company/tcmScheduleReport/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询中医档期业绩报表详细
+export function getTcmScheduleReport(id) {
+  return request({
+    url: '/company/tcmScheduleReport/' + id,
+    method: 'get'
+  })
+}
+
+// 新增中医档期业绩报表
+export function addTcmScheduleReport(data) {
+  return request({
+    url: '/company/tcmScheduleReport',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改中医档期业绩报表
+export function updateTcmScheduleReport(data) {
+  return request({
+    url: '/company/tcmScheduleReport',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除中医档期业绩报表
+export function delTcmScheduleReport(id) {
+  return request({
+    url: '/company/tcmScheduleReport/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出中医档期业绩报表
+export function exportTcmScheduleReport(query) {
+  return request({
+    url: '/company/tcmScheduleReport/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询可用中医档期管理列表
+export function listSchedule(query) {
+  return request({
+    url: '/company/tcmScheduleReport/getScheduleList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询中医档期管理列表
+export function listAllSchedule(query) {
+  return request({
+    url: '/company/tcmScheduleReport/getAllScheduleList',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/company/tcmconsume.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询公司档期消费列表
+export function listConsume(query) {
+  return request({
+    url: '/company/consume/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询公司档期消费详细
+export function getConsume(id) {
+  return request({
+    url: '/company/consume/' + id,
+    method: 'get'
+  })
+}
+
+// 新增公司档期消费
+export function addConsume(data) {
+  return request({
+    url: '/company/consume',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改公司档期消费
+export function updateConsume(data) {
+  return request({
+    url: '/company/consume',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除公司档期消费
+export function delConsume(id) {
+  return request({
+    url: '/company/consume/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出公司档期消费
+export function exportConsume(query) {
+  return request({
+    url: '/company/consume/export',
+    method: 'get',
+    params: query
+  })
+}

+ 0 - 1
src/views/company/companyUser/card/index.vue

@@ -9,7 +9,6 @@
           size="small"
           @keyup.enter.native="handleQuery" />
       </el-form-item>
-
       <el-form-item  label="名片类型" prop="type">
             <el-select filterable v-model="queryParams.type" placeholder="请选择类型" clearable size="small">
             <el-option

+ 896 - 0
src/views/company/tcmScheduleReport/add.vue

@@ -0,0 +1,896 @@
+<template>
+  <div class="app-container">
+      <div class="bj-divider">
+          <div class="left"> 
+                <span class="default-text">档期信息</span>
+            </div>
+             <div class="right"> 
+                <el-button type="mini" @click="goBack()">返 回</el-button>
+                <span class="tips"></span>
+            </div>
+      </div>
+      
+     <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+       <el-form-item label="所属档期" prop="scheduleId">
+            <el-select disabled style="width: 500px" v-model="form.scheduleId" placeholder="请选择档期" clearable size="small" >
+                  <el-option
+                      v-for="item in scheduleList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+
+        <el-row>
+            <el-col :span="12">
+                    <el-form-item label="总进线" label-width="90px" prop="totalNum">  
+                    <el-input :disabled="form.id>0" v-model="form.totalNum"  onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入总进线" />  
+                    </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                    <el-form-item label="注册数" label-width="90px" prop="registerNum">
+                        <el-input :disabled="form.id>0" v-model="form.registerNum" onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入注册数" />  
+                    </el-form-item>
+            </el-col>
+         </el-row>
+        <el-row>
+           <el-col :span="12">
+                <el-form-item label="上线数" label-width="90px" prop="onlineNum">
+                    <el-input :disabled="form.id>0" v-model="form.onlineNum" onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入上线数" />
+                </el-form-item>
+           </el-col>
+            <el-col :span="12">
+                <el-form-item label="完课数" label-width="90px" prop="finishNum">
+                    <el-input :disabled="form.id>0" v-model="form.finishNum"  onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入完课数" />
+                </el-form-item>
+           </el-col>
+        </el-row>
+      
+         <el-row>
+              <el-col :span="8" v-if="form.registerRate!='0'">
+                    <el-form-item label-width="80px" label="注册率" prop="registerRate">
+                           {{(form.registerRate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="8" v-if="form.onlineRate!='0'">
+                   <el-form-item label-width="80px" label="上线率" prop="onlineRate" style="margin-right:10px">
+                           {{(form.onlineRate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="8" v-if="form.onlineRate!='0'">
+                    <el-form-item label-width="80px" label="完课率" prop="onlineRate">
+                           {{(form.finishRate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+         </el-row>   
+
+        <div class="bj-divider">
+            <div class="left"> 
+                    <span class="default-text">轮次业绩</span>
+             </div>
+        </div>
+         <el-row v-for="(item, index) in roundArr" :key="index">
+              <el-col :span="7">
+                    <el-form-item :label="item+'业绩'"  label-width="90px" :prop="'round'+(index+1)+'Money'">  
+                        <el-input-number :disabled="scheduleItem.status==0" v-model="form['round'+(index+1)+'Money']" :step="10" :precision="2"  :min="0.00" :placeholder="'请输入'+item+'业绩'" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item :label="item+'单数'"  label-width="90px" :prop="'round'+(index+1)+'Order'">
+                        <el-input-number :disabled="scheduleItem.status==0" v-model="form['round'+(index+1)+'Order']" :min="0"  :max="form.totalNum" :step="1" :placeholder="'请输入'+item+'单数'"/>
+                    </el-form-item>
+              </el-col>  
+
+              <el-col :span="5">
+                    <el-form-item :label="item+'转化率:'" label-width="90px" :prop="'round'+(index+1)+'Rate'"> 
+                       <b class="span">{{(form['round'+(index+1)+'Rate']*100).toFixed(2)+"%"}}</b>  
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                    <el-form-item :label="item+'客单价(元):'"  label-width="110px" :prop="'round'+(index+1)+'Unit'">
+                        <b class="span">{{form['round'+(index+1)+'Unit']}}</b>  
+                    </el-form-item>
+              </el-col>
+         </el-row>
+
+         <el-row>
+                <el-col :span="7">  
+                <el-form-item label="累计总业绩" label-width="90px" prop="totalMoney">
+                    <el-input-number  disabled v-model="form.totalMoney" :step="10" :precision="2"  :min="0.00" placeholder="请输入累计总业绩" />
+                </el-form-item>
+            </el-col>
+            <el-col :span="7">
+                <el-form-item label="累计总单" label-width="90px" prop="totalOrder">
+                    <el-input-number disabled v-model="form.totalOrder" :min="0"  :max="form.totalNum" :step="1"  placeholder="请输入累计总单" />
+                </el-form-item>
+            </el-col>
+            <el-col :span="6">
+                <el-form-item label="目标业绩" label-width="90px" prop="targetMoney">
+                    <el-input-number :disabled="scheduleItem.status==0" v-model="form.targetMoney" :step="10" :precision="2"  :min="0.00" placeholder="请输入目标业绩" />
+                </el-form-item>
+            </el-col>
+            <el-col :span="4">
+                <el-form-item label="目标完成率"  label-width="90px" prop="targetRate">
+                    <b class="span">{{ (form.targetRate*100).toFixed(2)+"%"}}</b>  
+                </el-form-item>
+            </el-col>
+
+         </el-row>
+
+         <!-- <el-row>
+              <el-col :span="7">
+                    <el-form-item label="二轮业绩"  label-width="90px" prop="round2Money">
+                        <el-input-number v-model="form.round2Money" :precision="2"  :min="0.00" placeholder="请输入二轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="二轮单数"  label-width="90px" prop="round2Order">
+                        <el-input-number v-model="form.round2Order" :min="0" :step="1" placeholder="请输入二轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="二轮转化率" label-width="90px"  prop="round2Rate">
+                        {{(form.round2Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                    <el-form-item label="二轮客单价(元):" label-width="110px"  prop="round2Unit">
+                        {{form.round2Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="三轮业绩"  label-width="90px" prop="round3Money">
+                        <el-input-number v-model="form.round3Money" :precision="2"  :min="0.00" placeholder="请输入三轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="三轮单数"  label-width="90px" prop="round3Order">
+                        <el-input-number v-model="form.round3Order" :min="0" :step="1" placeholder="请输入三轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="三轮转化率" label-width="90px"  prop="round3Rate">
+                        {{(form.round3Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                    <el-form-item label="三轮客单价(元):" label-width="110px"  prop="round3Unit">
+                        {{form.round3Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="四轮业绩"  label-width="90px" prop="round4Money">
+                        <el-input-number v-model="form.round4Money" :precision="2"  :min="0.00" placeholder="请输入四轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="四轮单数"  label-width="90px" prop="round4Order">
+                        <el-input-number v-model="form.round4Order" :min="0" :step="1" placeholder="请输入四轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="四轮转化率" label-width="90px"  prop="round4Rate">
+                        {{(form.round4Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                     <el-form-item label="四轮客单价(元):" label-width="110px"  prop="round4Unit">
+                        {{form.round4Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+         
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="五轮业绩"  label-width="90px" prop="round5Money">
+                        <el-input-number v-model="form.round5Money" :precision="2"  :min="0.00" placeholder="请输入五轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="五轮单数"  label-width="90px" prop="round5Order">
+                        <el-input-number v-model="form.round5Order" :min="0" :step="1" placeholder="请输入五轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="五轮转化率" label-width="90px"  prop="round5Rate">
+                        {{(form.round5Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                     <el-form-item label="五轮客单价(元):" label-width="110px"  prop="round5Unit">
+                        {{form.round5Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+         
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="六轮业绩"  label-width="90px" prop="round6Money">
+                        <el-input-number v-model="form.round6Money" :precision="2"  :min="0.00" placeholder="请输入六轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="六轮单数"  label-width="90px" prop="round6Order">
+                        <el-input-number v-model="form.round6Order" :min="0" :step="1" placeholder="请输入六轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="六轮转化率" label-width="90px"  prop="round6Rate">
+                        {{(form.round6Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                    <el-form-item label="六轮客单价(元):" label-width="110px"  prop="round6Unit">
+                        {{form.round6Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+         
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="七轮业绩"  label-width="90px" prop="round7Money">
+                        <el-input-number v-model="form.round7Money" :precision="2"  :min="0.00" placeholder="请输入七轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="七轮单数"  label-width="90px" prop="round7Order">
+                        <el-input-number v-model="form.round7Order" :min="0" :step="1" placeholder="请输入七轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="七轮转化率" label-width="90px"  prop="round7Rate">
+                        {{(form.round7Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+                <el-col :span="5">
+                    <el-form-item label="七轮客单价(元):" label-width="110px"  prop="round7Unit">
+                        {{form.round7Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+         
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="八轮业绩"  label-width="90px" prop="round8Money">
+                        <el-input-number v-model="form.round8Money" :precision="2"  :min="0.00" placeholder="请输入八轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="八轮单数"  label-width="90px" prop="round8Order">
+                        <el-input-number v-model="form.round8Order" :min="0" :step="1" placeholder="请输入八轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="八轮转化率" label-width="90px"  prop="round8Rate">
+                        {{(form.round8Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                    <el-form-item label="八轮客单价(元):" label-width="110px"  prop="round8Unit">
+                        {{form.round8Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+         
+         <el-row>
+              <el-col :span="7">
+                    <el-form-item label="九轮业绩"  label-width="90px" prop="round9Money">
+                        <el-input-number v-model="form.round9Money" :precision="2"  :min="0.00" placeholder="请输入九轮业绩" />
+                    </el-form-item>
+              </el-col>
+               <el-col :span="7">
+                    <el-form-item label="九轮单数"  label-width="90px" prop="round9Order">
+                        <el-input-number v-model="form.round9Order" :min="0" :step="1" placeholder="请输入九轮单数" />
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="5">
+                    <el-form-item label="九轮转化率" label-width="90px"  prop="round9Rate">
+                        {{(form.round9Rate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+               <el-col :span="5">
+                    <el-form-item label="九轮客单价(元):" label-width="110px"  prop="round9Unit">
+                        {{form.round9Unit}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+          -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button :disabled="scheduleItem.status==0" type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+  </div>
+</template>
+
+<script>
+import { treeselect } from "@/api/company/companyDept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { listTcmScheduleReport, getTcmScheduleReport, delTcmScheduleReport, addTcmScheduleReport, updateTcmScheduleReport, exportTcmScheduleReport,listSchedule,listAllSchedule } from "@/api/company/tcmScheduleReport";
+
+export default {
+  name: "TcmScheduleReport",
+  components: { Treeselect },
+  data() {
+     const registerNumRule = (rule, value, callback) => {
+        console.log('registerNumVal->',value)
+        if (Number(value) > this.form.totalNum) {
+            callback(new Error('注册数不能大于总进线'))
+        } else {
+            callback()
+        }
+    };
+    const onlineNumRule = (rule, value, callback) => {
+        console.log('onlineNumVal->',value)
+        if (Number(value) > this.form.registerNum) {
+            callback(new Error('上线数不能大于注册数'))
+        } else {
+            callback()
+        }
+    };
+    const finishNumRule = (rule, value, callback) => {
+        console.log('finishNumVal->',value)
+        if (Number(value) > this.form.registerNum) {
+            callback(new Error('完课数不能大于注册数'))
+        } else {
+            callback()
+        }
+    };
+    const roundOrderRule = (rule, value, callback) => {
+        console.log('round1Order rule'+JSON.stringify(rule)+' value:'+value);
+        var orderNum=0;
+        for (let index = 0; index < 9; index++) {
+            if(!!this.form['round'+index+'Order']){
+                orderNum+=this.form['round'+index+'Order'];
+            }
+        }
+        console.log('qxj orderNum:'+orderNum);
+        var roundRate=rule.field.replace('Order','Rate');
+        if (Number(value) > this.form.totalNum) {
+            this.form[roundRate]=0;
+            callback(new Error('当前轮次单数不能大于总进线'))
+        }else if(orderNum>this.form.totalNum){
+             this.form[roundRate]=0;
+            callback(new Error('所有轮次单数不能大于总进线'))
+        }
+         else {
+            callback()
+        }
+    };
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 中医档期业绩报表表格数据
+      tcmScheduleReportList: [],
+      scheduleList:[],
+      scheduleId:null,
+      scheduleItem:{status:1},
+      reportId:null,
+      roundArr:["一轮","二轮","三轮","四轮","五轮","六轮","七轮","八轮","九轮"],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      dateRange: [],
+      users:[],
+      // 部门树选项
+      deptOptions: [],
+      // 部门名称
+      deptName: undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: { 
+          scheduleId: [    
+            { required: true, message: "请选择档期", trigger: "blur" }
+          ],
+          totalNum: [    
+            { required: true, message: "总进线不能为空", trigger: "blur" }
+          ],
+          registerNum: [
+            { required:  true, message: "注册数不能为空", trigger: "blur" },
+            { required: true, validator: registerNumRule, trigger: "blur" },
+            // { pattern: /^[1-9]\d*$/, message: '只能输入整数'}
+          ],
+          onlineNum: [
+            { required: true, message: "上线数不能为空", trigger: "blur" },
+            { required: true, validator: onlineNumRule, trigger: "blur" }
+          ],
+          finishNum: [
+            { required: true, message: "完课数不能为空", trigger: "blur" },
+            { required: true, validator: finishNumRule, trigger: "blur" }
+          ],
+          round1Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round2Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round3Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round4Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round5Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round6Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round7Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round8Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          round9Order: [
+            { required: false, validator: roundOrderRule, trigger: "blur" }
+          ],
+          
+      }
+    };
+  },
+  watch:{
+    'form.registerNum':function(newVal,oldVal){
+        console.log('newVal->',newVal)
+        console.log('oldVal->',oldVal)
+        this.form.registerRate=0;
+        if(!!newVal && Number(newVal)<=this.form.totalNum){
+           this.form.registerRate=(newVal/this.form.totalNum*1.0).toFixed(2);
+        }
+    },
+    'form.onlineNum':function(newVal,oldVal){
+        console.log('newVal->',newVal)
+        console.log('oldVal->',oldVal)
+        if(!!newVal){
+           this.form.onlineRate=(newVal/this.form.registerNum*1.0).toFixed(2);
+        }
+    },
+    'form.finishNum':function(newVal,oldVal){
+        console.log('newVal->',newVal)
+        console.log('oldVal->',oldVal)
+        if(!!newVal){
+           this.form.finishRate=(newVal/this.form.registerNum*1.0).toFixed(2); 
+        }
+    },  
+     'form.round1Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round1Order>0){
+                this.form.round1Unit=(newVal/this.form.round1Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round1Order':function(newVal,oldVal){
+        if(!!newVal){
+           console.log('newVal:'+newVal+" registerNum:"+this.form.registerNum);
+           this.form.round1Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round1Unit=(this.form.round1Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+     'form.round2Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round2Order>0){
+                this.form.round2Unit=(newVal/this.form.round2Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round2Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round2Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round2Unit=(this.form.round2Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round3Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round3Order>0){
+                this.form.round3Unit=(newVal/this.form.round3Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round3Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round3Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round3Unit=(this.form.round3Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round4Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round4Order>0){
+                this.form.round4Unit=(newVal/this.form.round4Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round4Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round4Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round4Unit=(this.form.round4Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round5Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round5Order>0){
+                this.form.round5Unit=(newVal/this.form.round5Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round5Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round5Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round5Unit=(this.form.round5Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round6Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round6Order>0){
+                this.form.round6Unit=(newVal/this.form.round6Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round6Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round6Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round6Unit=(this.form.round6Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round7Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round7Order>0){
+                this.form.round7Unit=(newVal/this.form.round7Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round7Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round7Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round7Unit=(this.form.round7Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round8Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round8Order>0){
+                this.form.round8Unit=(newVal/this.form.round8Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round8Order':function(newVal,oldVal){
+        if(!!newVal){
+           this.form.round8Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+           this.form.round8Unit=(this.form.round8Money/newVal*1.0).toFixed(2); 
+           this.calcTotalOrder();
+        }
+    },
+    'form.round9Money':function(newVal,oldVal){   
+        if(!!newVal){
+            if(this.form.round9Order>0){
+                this.form.round9Unit=(newVal/this.form.round9Order*1.0).toFixed(2); 
+            }
+            this.calcTotalMoney();
+        }
+    },
+     'form.round9Order':function(newVal,oldVal){
+            if(!!newVal){
+                this.form.round9Rate=(newVal/this.form.totalNum*1.0).toFixed(2); 
+                this.form.round9Unit=(this.form.round9Money/newVal*1.0).toFixed(2); 
+                this.calcTotalOrder();
+            }
+      },
+     'form.targetMoney':function(newVal,oldVal){
+         if(!!newVal){
+              this.form.targetRate=(this.form.totalMoney/newVal*1.0).toFixed(5); 
+         }
+      },
+  },
+  created() {
+    this.scheduleId=this.$route.query.scheduleId;
+    this.reportId=this.$route.query.reportId;
+    this.reset();
+    this.getListSchedule();
+    this.getTreeselect();
+    this.requestData();
+  },
+  methods: {
+    getTreeselect() {
+        treeselect().then((response) => {
+          this.deptOptions = response.data;
+        });
+    },
+    getListSchedule() {
+        this.loading = true;
+        listAllSchedule().then(response => {
+            this.scheduleList = response.rows;
+            var listTemp = this.scheduleList.filter(item => item.id==this.scheduleId);
+            console.log("qxj listTemp:"+JSON.stringify(listTemp));
+            if(listTemp.length>0){
+                this.scheduleItem=listTemp[0];
+            }
+        });
+    },
+    /** 查询中医档期业绩报表详情 */
+    requestData() {  
+      this.reset();
+      this.loading = true;
+      getTcmScheduleReport(this.reportId).then(response => {
+        this.form = response.data;
+        console.log("qxj reportData:"+ JSON.stringify(response.data));
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.goBack();
+    },
+    // 表单重置
+    reset() {
+      this.form = {   //totalMoney  totalOrder  targetMoney  targetRate
+        id: null,
+        scheduleId: null,
+        companyUserId: null,
+        companyId: null,
+        totalNum: null,
+        registerNum: null,
+        onlineNum: null,
+        finishNum: null,
+        registerRate: null,
+        onlineRate: null,
+        finishRate: null,
+        totalMoney: 0,
+        totalOrder: null,
+        targetMoney: null,
+        targetRate: null,
+        round1Money: null,
+        round1Order: null,
+        round1Rate: null,
+        round1Unit: null,
+        round2Money: null,
+        round2Order: null,
+        round2Rate: null,
+        round2Unit: null,
+        round3Money: null,
+        round3Order: null,
+        round3Rate: null,
+        round3Unit: null,
+        round4Money: null,
+        round4Order: null,
+        round4Rate: null,
+        round4Unit: null,
+        round5Money: null,
+        round5Order: null,
+        round5Rate: null,
+        round5Unit: null,
+        round6Money: null,
+        round6Order: null,
+        round6Rate: null,
+        round6Unit: null,
+        round7Money: null,
+        round7Order: null,
+        round7Rate: null,
+        round7Unit: null,
+        round8Money: null,
+        round8Order: null,
+        round8Rate: null,
+        round8Unit: null,
+        round9Money: null,
+        round9Order: null,
+        round9Rate: null,
+        round9Unit: null,
+        createUserId:null,
+        updateUserId:null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    goBack(){
+        this.$router.go(-1);
+    },
+    calcTotalMoney(){
+        var totalMoney=0;
+        for (let index = 1; index <= 9; index++) {
+            if(!!this.form['round'+index+'Money']){
+                totalMoney+=this.form['round'+index+'Money'];
+            }
+        }
+        console.log("qxj totalMoney:"+totalMoney);
+        this.form.totalMoney=totalMoney.toFixed(2);
+    },
+    calcTotalOrder(){
+        var totalOrder=0;
+        for (let index = 1; index <= 9; index++) {
+            if(!!this.form['round'+index+'Order']){
+                totalOrder+=this.form['round'+index+'Order'];
+            }
+        }
+        console.log("qxj totalOrder:"+totalOrder);
+        this.form.totalOrder=totalOrder.toFixed(2);
+    },
+
+
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTcmScheduleReport(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.goBack();
+              }
+            });
+          } else {
+            addTcmScheduleReport(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.goBack();
+              }
+            });
+          }
+
+        }
+      });
+    },
+    toDecimal2(x) {  
+        var f = x;  
+        if (isNaN(f)) {  
+            return 0;  
+        }  
+        // var f = Math.round(x*100)/100;  
+        // var s = f.toString();  
+        // var rs = s.indexOf('.');  
+        // if (rs < 0) {  
+        //     rs = s.length;  
+        //     s += '.';  
+        // }  
+        // while (s.length <= rs + 2) {  
+        //     s += '0';  
+        // }  
+        return x.toFixed(2);  
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped> 
+.app-main{
+  background: #ffffff;
+}
+.app-container{
+  margin: 0;
+}
+.bj-divider {
+    padding: 10px 0;
+    border-bottom: 1px solid #eee;
+    margin-bottom: 16px;
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center;
+    -webkit-box-pack: justify;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+    width: 100%
+}
+.bj-divider.small {
+    font-size: 14px;
+    padding: 8px 0;
+    margin-bottom: 8px
+}
+.bj-divider.noPadding {
+    padding: 0
+}
+.bj-divider .left {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center
+}
+.bj-divider .button {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    background: #ffffff;
+    border: 1px solid #fefefe;
+}
+.bj-divider .default-text {
+    border-left: 4px #13c2c2 solid;
+    padding-left: 16px;
+    font-size: 18px
+}
+.bj-divider.small .default-text {
+    font-size: 14px
+}
+.bj-divider .xs {
+    font-size: 12px;
+    padding: 0 8px
+}
+.bj-divider .tips {
+    line-height: 20px;
+    margin-left: 16px
+}
+.bj-divider .right {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center
+}
+.bj-divider .el-button {
+    margin-left: 16px
+}
+.bj-divider .fixed {
+    position: fixed;
+    top: 55px;
+    z-index: 9;
+    right: 20px
+}
+
+.bj-divider .right .el-form-item--small.el-form-item {
+    margin-bottom: 0
+}
+
+.dialog-footer{
+    text-align: right;
+    position: fixed;
+    right: 0px;
+    bottom: 0px;
+    width: 90%;
+    margin-right: 0px;
+    padding:10px 20px;
+    z-index: 9;
+    background: #ffffff;
+    height: 65px;
+}
+
+.span{
+  font-size: 15px;
+  font-weight:normal;
+}
+
+
+</style>

+ 312 - 0
src/views/company/tcmScheduleReport/consume.vue

@@ -0,0 +1,312 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+     
+        <el-form-item label="所属档期" prop="scheduleId">
+            <el-select  style="width:205.4px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small" >
+                  <el-option
+                      v-for="item in scheduleList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+
+         <el-form-item label="创建时间" prop="createTime">
+            <el-date-picker
+              style="width:225.4px"
+              clearable size="small"
+              v-model="dateRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+
+
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:consume:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:consume:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:consume:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:consume:export']"
+        >导出</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="consumeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="档期" align="center" prop="scheduleName" />
+      <el-table-column label="消费金额" align="center" prop="money" />
+      <el-table-column label="创建时间" align="center" prop="createTime" />
+      <!-- <el-table-column label="创建人ID" align="center" prop="createUserId" />
+      <el-table-column label="修改人ID" align="center" prop="updateUserId" /> -->
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['company:consume:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['company:consume:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改公司档期消费对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+       <el-form-item label="所属档期" prop="scheduleId">
+            <el-select  style="width: 350px" v-model="form.scheduleId" placeholder="请选择档期" clearable size="small" >
+                  <el-option
+                      v-for="item in scheduleList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+         <el-form-item label="消费金额" label-width="80px" prop="money">
+               <el-input style="width: 350px" v-model="form.money" pattern="\d+(\.\d{1,2})?"  type="number" placeholder="请输入消费金额" />
+               <!-- <el-input-number style="width: 350px"  onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" v-model="form.money" :step="10" :precision="2"  :min="0.00" placeholder="请输入消费金额" />
+         -->
+         </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSchedule } from "@/api/company/tcmScheduleReport";
+import { listConsume, getConsume, delConsume, addConsume, updateConsume, exportConsume } from "@/api/company/tcmconsume";
+
+
+export default {
+  name: "Consume",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 公司档期消费表格数据
+      consumeList: [],
+      dateRange: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      scheduleList:[],
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+          scheduleId: [    
+            { required: true, message: "请选择档期", trigger: "blur" }
+          ],
+          money: [    
+            { required: true, message: "消费金额为空", trigger: "blur" }
+          ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getListSchedule();
+  },
+  methods: {
+    /** 查询公司档期消费列表 */
+    getList() {
+      this.loading = true;
+      listConsume(this.addDateRange(this.queryParams,this.dateRange)).then(response => {
+        this.consumeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    getListSchedule() {
+        this.loading = true;
+        listSchedule().then(response => {
+            this.scheduleList = response.rows;
+        });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        scheduleId: null,
+        companyId: null,
+        money: null,
+        createUserId: null,
+        updateUserId: null,
+        createTime: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加档期消费";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getConsume(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改档期消费";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateConsume(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          } else {
+            addConsume(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除公司档期消费编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delConsume(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有公司档期消费数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportConsume(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 735 - 0
src/views/company/tcmScheduleReport/index.vue

@@ -0,0 +1,735 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+       <el-form-item label="所属部门" prop="deptId">
+          <treeselect style="width:205.4px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
+      </el-form-item>
+       <el-form-item label="员工姓名" prop="userNickName">
+        <el-input
+          v-model="queryParams.userNickName"
+          placeholder="请输入员工姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item label="所属档期" prop="scheduleId">
+            <el-select  style="width:205.4px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small" >
+                  <el-option
+                      v-for="item in scheduleList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+
+       <!-- <el-form-item label="档期名称" prop="scheduleName">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入档期名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item> -->
+
+    <!-- <el-form-item label="档期状态" prop="scheduleStatus">
+        <el-select v-model="queryParams.status" placeholder="请选择档期状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item> -->
+
+      <el-form-item label="创建时间" prop="createTime">
+            <el-date-picker
+              style="width:205.4px"
+              clearable size="small"
+              v-model="dateRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['company:tcmScheduleReport:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['company:tcmScheduleReport:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['company:tcmScheduleReport:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['company:tcmScheduleReport:export']"
+        >导出</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="tcmScheduleReportList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id"  width="50" align="center" prop="id" />
+      <el-table-column label="档期" align="center" prop="scheduleName" />
+      <!-- <el-table-column label="公司名称" align="center" prop="companyName" /> -->
+      <el-table-column label="所在部门" align="center" prop="deptName" />
+      <el-table-column label="员工姓名" align="center" prop="userNickName" />
+     
+      <el-table-column label="总进线" align="center" prop="totalNum" />
+      <el-table-column label="注册数" align="center" prop="registerNum" />
+      <el-table-column label="上线数" align="center" prop="onlineNum" />
+      <el-table-column label="完课数" align="center" prop="finishNum" />
+
+      <el-table-column  label="注册率" align="center" prop="registerRate"   >
+        <template slot-scope="scope">
+          {{(scope.row.registerRate*100).toFixed(2)+"%"}}
+        </template>
+    </el-table-column>
+     <el-table-column  label="上线率" align="center" prop="onlineRate"   >
+        <template slot-scope="scope">
+          {{(scope.row.onlineRate*100).toFixed(2)+"%"}}
+        </template>
+    </el-table-column>
+     <el-table-column  label="完课率" align="center" prop="finishRate"   >
+        <template slot-scope="scope">
+          {{(scope.row.finishRate*100).toFixed(2)+"%"}}
+        </template>
+    </el-table-column>
+     <el-table-column  label="累计总业绩" width="90" align="center" prop="totalMoney"   >
+        <template slot-scope="scope">
+          {{!scope.row.totalMoney?0:(scope.row.totalMoney).toFixed(2)}}
+        </template>
+    </el-table-column>
+     <el-table-column  label="累计总单" align="center" prop="totalOrder"   >
+        <template slot-scope="scope">
+          {{!scope.row.totalOrder?0:scope.row.totalOrder}}
+        </template>
+    </el-table-column>
+   <el-table-column  label="目标业绩"  align="center" prop="targetMoney"   >
+        <template slot-scope="scope">
+          {{!scope.row.targetMoney?0:(scope.row.targetMoney).toFixed(2)}}
+        </template>
+    </el-table-column>
+    <el-table-column  label="目标完成率"  width="90" align="center" prop="targetRate"   >
+        <template slot-scope="scope">
+          {{!scope.row.targetRate?0:(scope.row.targetRate*100).toFixed(2)+"%" }}
+
+        </template>
+    </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+
+<!-- 
+      <el-table-column label="一轮业绩" align="center" prop="round1Money" />
+      <el-table-column label="一轮单数" align="center" prop="round1Order" />
+      <el-table-column label="一轮转化率" align="center" prop="round1Rate" />
+      <el-table-column label="一轮客单价" align="center" prop="round1Unit" />
+      <el-table-column label="二轮业绩" align="center" prop="round2Money" />
+      <el-table-column label="二轮单数" align="center" prop="round2Order" />
+      <el-table-column label="二轮转化率" align="center" prop="round2Rate" />
+      <el-table-column label="二轮客单价" align="center" prop="round2Unit" />
+      <el-table-column label="二轮业绩" align="center" prop="round3Money" />
+      <el-table-column label="三轮单数" align="center" prop="round3Order" />
+      <el-table-column label="三轮转化率" align="center" prop="round3Rate" />
+      <el-table-column label="三轮客单" align="center" prop="round3Unit" />
+      <el-table-column label="四轮业绩" align="center" prop="round4Money" />
+      <el-table-column label="四轮单数" align="center" prop="round4Order" />
+      <el-table-column label="四轮转化率" align="center" prop="round4Rate" />
+      <el-table-column label="四轮客单价" align="center" prop="round4Unit" />
+      <el-table-column label="五轮业绩" align="center" prop="round5Money" />
+      <el-table-column label="五轮单数" align="center" prop="round5Order" />
+      <el-table-column label="五轮转化率" align="center" prop="round5Rate" />
+      <el-table-column label="五轮客单价" align="center" prop="round5Unit" />
+      <el-table-column label="六轮业绩" align="center" prop="round6Money" />
+      <el-table-column label="六一轮单" align="center" prop="round6Order" />
+      <el-table-column label="六轮转率" align="center" prop="round6Rate" />
+      <el-table-column label="六轮客单价" align="center" prop="round6Unit" />
+      <el-table-column label="七轮业绩" align="center" prop="round7Money" />
+      <el-table-column label="七轮单数" align="center" prop="round7Order" />
+      <el-table-column label="七轮转化率" align="center" prop="round7Rate" />
+      <el-table-column label="七轮客单价" align="center" prop="round7Unit" />
+      <el-table-column label="八轮业绩" align="center" prop="round8Money" />
+      <el-table-column label="八轮单数" align="center" prop="round8Order" />
+      <el-table-column label="八轮转化率" align="center" prop="round8Rate" />
+      <el-table-column label="八轮客单价" align="center" prop="round8Unit" />
+      <el-table-column label="九轮业绩" align="center" prop="round9Money" />
+      <el-table-column label="九轮单数" align="center" prop="round9Order" />
+      <el-table-column label="九轮转化率" align="center" prop="round9Rate" />
+      <el-table-column label="九轮客单价" align="center" prop="round9Unit" /> -->
+
+      <el-table-column label="操作" width="150px" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleDetails(scope.row)"
+            v-hasPermi="['company:tcmScheduleReport:query']"
+          >查看</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['company:tcmScheduleReport:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['company:tcmScheduleReport:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改中医档期业绩报表对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+
+       <el-form-item label="所属档期" prop="scheduleId">
+            <el-select style="width: 200px" v-model="form.scheduleId" placeholder="请选择档期" clearable size="small" >
+              <el-option
+                      v-for="item in scheduleList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+
+        <el-form-item label="总进线" prop="totalNum">  
+          <el-input v-model="form.totalNum"  onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入总进线" />  
+        </el-form-item>
+        <el-form-item label="注册数" prop="registerNum">
+          <el-input v-model="form.registerNum" onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入注册数" />  
+        </el-form-item>
+        <el-form-item label="上线数" prop="onlineNum">
+          <el-input v-model="form.onlineNum" onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入上线数" />
+        </el-form-item>
+        <el-form-item label="完课数" prop="finishNum">
+          <el-input v-model="form.finishNum"  onkeyup="value=(value.replace(/\D/g,'')==''?'':parseInt(value))" type="number" placeholder="请输入完课数" />
+        </el-form-item>
+
+         <el-row>
+              <el-col :span="8" v-if="form.registerRate!='0'">
+                    <el-form-item label-width="80px" label="注册率" prop="registerRate">
+                           {{(form.registerRate*100).toFixed(2)+"%"}}
+                      <!-- <el-input v-model="form.registerRate" placeholder="请输入注册率" /> -->
+                    </el-form-item>
+              </el-col>
+               <el-col :span="8" v-if="form.onlineRate!='0'">
+                   <el-form-item label-width="80px" label="上线率" prop="onlineRate" style="margin-right:10px">
+                          {{(form.onlineRate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>  
+              <el-col :span="8" v-if="form.finishRate!='0'">
+                    <el-form-item label-width="80px" label="完课率" prop="finishRate">
+                         {{(form.finishRate*100).toFixed(2)+"%"}}
+                    </el-form-item>
+              </el-col>
+         </el-row>
+
+  
+        <!-- <el-form-item label="累计总业绩" prop="totalMoney">
+          <el-input v-model="form.totalMoney" placeholder="请输入累计总业绩" />
+        </el-form-item>
+        <el-form-item label="累计总单" prop="totalOrder">
+          <el-input v-model="form.totalOrder" placeholder="请输入累计总单" />
+        </el-form-item>
+        <el-form-item label="目标业绩" prop="targetMoney">
+          <el-input v-model="form.targetMoney" placeholder="请输入目标业绩" />
+        </el-form-item>
+        <el-form-item label="目标完成率" prop="targetRate">
+          <el-input v-model="form.targetRate" placeholder="请输入目标完成率" />
+        </el-form-item> -->
+
+        <!-- <el-form-item label="一轮业绩" prop="round1Money">
+          <el-input v-model="form.round1Money" placeholder="请输入一轮业绩" />
+        </el-form-item>
+        <el-form-item label="一轮单数" prop="round1Order">
+          <el-input v-model="form.round1Order" placeholder="请输入一轮单数" />
+        </el-form-item>
+        <el-form-item label="一轮转化率" prop="round1Rate">
+          <el-input v-model="form.round1Rate" placeholder="请输入一轮转化率" />
+        </el-form-item>
+        <el-form-item label="一轮客单价" prop="round1Unit">
+          <el-input v-model="form.round1Unit" placeholder="请输入一轮客单价" />
+        </el-form-item>
+        <el-form-item label="二轮业绩" prop="round2Money">
+          <el-input v-model="form.round2Money" placeholder="请输入二轮业绩" />
+        </el-form-item>
+        <el-form-item label="二轮单数" prop="round2Order">
+          <el-input v-model="form.round2Order" placeholder="请输入二轮单数" />
+        </el-form-item>
+        <el-form-item label="二轮转化率" prop="round2Rate">
+          <el-input v-model="form.round2Rate" placeholder="请输入二轮转化率" />
+        </el-form-item>
+        <el-form-item label="二轮客单价" prop="round2Unit">
+          <el-input v-model="form.round2Unit" placeholder="请输入二轮客单价" />
+        </el-form-item>
+        <el-form-item label="二轮业绩" prop="round3Money">
+          <el-input v-model="form.round3Money" placeholder="请输入二轮业绩" />
+        </el-form-item>
+        <el-form-item label="三轮单数" prop="round3Order">
+          <el-input v-model="form.round3Order" placeholder="请输入三轮单数" />
+        </el-form-item>
+        <el-form-item label="三轮转化率" prop="round3Rate">
+          <el-input v-model="form.round3Rate" placeholder="请输入三轮转化率" />
+        </el-form-item>
+        <el-form-item label="三轮客单" prop="round3Unit">
+          <el-input v-model="form.round3Unit" placeholder="请输入三轮客单" />
+        </el-form-item>
+        <el-form-item label="四轮业绩" prop="round4Money">
+          <el-input v-model="form.round4Money" placeholder="请输入四轮业绩" />
+        </el-form-item>
+        <el-form-item label="四轮单数" prop="round4Order">
+          <el-input v-model="form.round4Order" placeholder="请输入四轮单数" />
+        </el-form-item>
+        <el-form-item label="四轮转化率" prop="round4Rate">
+          <el-input v-model="form.round4Rate" placeholder="请输入四轮转化率" />
+        </el-form-item>
+        <el-form-item label="四轮客单价" prop="round4Unit">
+          <el-input v-model="form.round4Unit" placeholder="请输入四轮客单价" />
+        </el-form-item>
+        <el-form-item label="五轮业绩" prop="round5Money">
+          <el-input v-model="form.round5Money" placeholder="请输入五轮业绩" />
+        </el-form-item>
+        <el-form-item label="五轮单数" prop="round5Order">
+          <el-input v-model="form.round5Order" placeholder="请输入五轮单数" />
+        </el-form-item>
+        <el-form-item label="五轮转化率" prop="round5Rate">
+          <el-input v-model="form.round5Rate" placeholder="请输入五轮转化率" />
+        </el-form-item>
+        <el-form-item label="五轮客单价" prop="round5Unit">
+          <el-input v-model="form.round5Unit" placeholder="请输入五轮客单价" />
+        </el-form-item>
+        <el-form-item label="六轮业绩" prop="round6Money">
+          <el-input v-model="form.round6Money" placeholder="请输入六轮业绩" />
+        </el-form-item>
+        <el-form-item label="六一轮单" prop="round6Order">
+          <el-input v-model="form.round6Order" placeholder="请输入六一轮单" />
+        </el-form-item>
+        <el-form-item label="六轮转率" prop="round6Rate">
+          <el-input v-model="form.round6Rate" placeholder="请输入六轮转率" />
+        </el-form-item>
+        <el-form-item label="六轮客单价" prop="round6Unit">
+          <el-input v-model="form.round6Unit" placeholder="请输入六轮客单价" />
+        </el-form-item>
+        <el-form-item label="七轮业绩" prop="round7Money">
+          <el-input v-model="form.round7Money" placeholder="请输入七轮业绩" />
+        </el-form-item>
+        <el-form-item label="七轮单数" prop="round7Order">
+          <el-input v-model="form.round7Order" placeholder="请输入七轮单数" />
+        </el-form-item>
+        <el-form-item label="七轮转化率" prop="round7Rate">
+          <el-input v-model="form.round7Rate" placeholder="请输入七轮转化率" />
+        </el-form-item>
+        <el-form-item label="七轮客单价" prop="round7Unit">
+          <el-input v-model="form.round7Unit" placeholder="请输入七轮客单价" />
+        </el-form-item>
+        <el-form-item label="八轮业绩" prop="round8Money">
+          <el-input v-model="form.round8Money" placeholder="请输入八轮业绩" />
+        </el-form-item>
+        <el-form-item label="八轮单数" prop="round8Order">
+          <el-input v-model="form.round8Order" placeholder="请输入八轮单数" />
+        </el-form-item>
+        <el-form-item label="八轮转化率" prop="round8Rate">
+          <el-input v-model="form.round8Rate" placeholder="请输入八轮转化率" />
+        </el-form-item>
+        <el-form-item label="八轮客单价" prop="round8Unit">
+          <el-input v-model="form.round8Unit" placeholder="请输入八轮客单价" />
+        </el-form-item>
+        <el-form-item label="九轮业绩" prop="round9Money">
+          <el-input v-model="form.round9Money" placeholder="请输入九轮业绩" />
+        </el-form-item>
+        <el-form-item label="九轮单数" prop="round9Order">
+          <el-input v-model="form.round9Order" placeholder="请输入九轮单数" />
+        </el-form-item>
+        <el-form-item label="九轮转化率" prop="round9Rate">
+          <el-input v-model="form.round9Rate" placeholder="请输入九轮转化率" />
+        </el-form-item>
+        <el-form-item label="九轮客单价" prop="round9Unit">
+          <el-input v-model="form.round9Unit" placeholder="请输入九轮客单价" />
+        </el-form-item> -->
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { treeselect } from "@/api/company/companyDept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { listTcmScheduleReport, getTcmScheduleReport, delTcmScheduleReport, addTcmScheduleReport, updateTcmScheduleReport, exportTcmScheduleReport,listSchedule } from "@/api/company/tcmScheduleReport";
+
+export default {
+  name: "TcmScheduleReport",
+  components: { Treeselect },
+  data() {
+     const registerNumRule = (rule, value, callback) => {
+        console.log('registerNumVal->',value)
+        if (Number(value) > this.form.totalNum) {
+            callback(new Error('注册数不能大于总进线'))
+        } else {
+            callback()
+        }
+    };
+    const onlineNumRule = (rule, value, callback) => {
+        console.log('onlineNumVal->',value)
+        if (Number(value) > this.form.registerNum) {
+            callback(new Error('上线数不能大于注册数'))
+        } else {
+            callback()
+        }
+    };
+    const finishNumRule = (rule, value, callback) => {
+        console.log('finishNumVal->',value)
+        if (Number(value) > this.form.registerNum) {
+            callback(new Error('完课数不能大于注册数'))
+        } else {
+            callback()
+        }
+    };
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 中医档期业绩报表表格数据
+      tcmScheduleReportList: [],
+      scheduleList:[],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        scheduleId: null,
+        deptId:null,
+        userId: null,
+        companyId: null,
+        totalNum: null,
+        registerNum: null,
+        onlineNum: null,
+        finishNum: null,
+        registerRate: null,
+        onlineRate: null,
+        finishRate: null,
+        totalMoney: null,
+        
+      },
+      users:[],
+      // 部门树选项
+      deptOptions: [],
+      // 部门名称
+      deptName: undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: { 
+          scheduleId: [    
+            { required: true, message: "请选择档期", trigger: "blur" }
+          ],
+          totalNum: [    
+            { required: true, message: "总进线不能为空", trigger: "blur" }
+          ],
+          registerNum: [
+            { required:  true, message: "注册数不能为空", trigger: "blur" },
+            { required: true, validator: registerNumRule, trigger: "blur" },
+            // { pattern: /^[1-9]\d*$/, message: '只能输入整数'}
+          ],
+          onlineNum: [
+            { required: true, message: "上线数不能为空", trigger: "blur" },
+            { required: true, validator: onlineNumRule, trigger: "blur" }
+          ],
+          finishNum: [
+            { required: true, message: "完课数不能为空", trigger: "blur" },
+            { required: true, validator: finishNumRule, trigger: "blur" }
+          ],
+      }
+    };
+  },
+  watch:{
+    'form.registerNum':function(newVal,oldVal){
+        console.log('newVal->',newVal)
+        console.log('oldVal->',oldVal)
+        this.form.registerRate=0;
+        if(!!newVal && Number(newVal)<=this.form.totalNum){
+           this.form.registerRate=(newVal/this.form.totalNum*1.0).toFixed(2);
+        }
+    },
+    'form.onlineNum':function(newVal,oldVal){
+        console.log('newVal->',newVal)
+        console.log('oldVal->',oldVal)
+        if(!!newVal){
+           this.form.onlineRate=(newVal/this.form.registerNum*1.0).toFixed(2);
+        }
+        
+    },
+    'form.finishNum':function(newVal,oldVal){
+        console.log('newVal->',newVal)
+        console.log('oldVal->',oldVal)
+        if(!!newVal){
+           this.form.finishRate=(newVal/this.form.registerNum*1.0).toFixed(2); 
+        }
+        
+    }
+  },
+  created() {
+    this.getTreeselect();
+    this.getListSchedule();
+    this.getList();
+  },
+  methods: {
+
+    calcRegister(){
+        
+    },
+    calcOnline(){
+
+    },
+    calcFinish(){
+
+    },
+    getTreeselect() {
+        treeselect().then((response) => {
+           this.deptOptions = response.data;
+        });
+    },
+    getListSchedule() {
+        this.loading = true;
+        listSchedule().then(response => {
+            this.scheduleList = response.rows;
+        });
+    },
+    /** 查询中医档期业绩报表列表 */
+    getList() {
+      this.loading = true;
+      listTcmScheduleReport(this.addDateRange(this.queryParams,this.dateRange)).then(response => {
+          this.tcmScheduleReportList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        scheduleId: null,
+        userId: null,
+        companyId: null,
+        totalNum: null,
+        registerNum: null,
+        onlineNum: null,
+        finishNum: null,
+        registerRate: null,
+        onlineRate: null,
+        finishRate: null,
+        totalMoney: null,
+        totalOrder: null,
+        targetMoney: null,
+        targetRate: null,
+        round1Money: null,
+        round1Order: null,
+        round1Rate: null,
+        round1Unit: null,
+        round2Money: null,
+        round2Order: null,
+        round2Rate: null,
+        round2Unit: null,
+        round3Money: null,
+        round3Order: null,
+        round3Rate: null,
+        round3Unit: null,
+        round4Money: null,
+        round4Order: null,
+        round4Rate: null,
+        round4Unit: null,
+        round5Money: null,
+        round5Order: null,
+        round5Rate: null,
+        round5Unit: null,
+        round6Money: null,
+        round6Order: null,
+        round6Rate: null,
+        round6Unit: null,
+        round7Money: null,
+        round7Order: null,
+        round7Rate: null,
+        round7Unit: null,
+        round8Money: null,
+        round8Order: null,
+        round8Rate: null,
+        round8Unit: null,
+        round9Money: null,
+        round9Order: null,
+        round9Rate: null,
+        round9Unit: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加中医档期业绩报表";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTcmScheduleReport(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改中医档期业绩报表";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTcmScheduleReport(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          } else {
+            let that=this;
+            addTcmScheduleReport(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+                setTimeout(() => {
+                    that.handleDetails(response.data);
+                }, 1800);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除中医档期业绩报表编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delTcmScheduleReport(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    handleDetails(row){
+        this.$router.push({path:'/schedule/report/add',query:{"scheduleId":row.scheduleId,"reportId":row.id}});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有中医档期业绩报表数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportTcmScheduleReport(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 599 - 0
src/views/company/tcmScheduleReport/statistics.vue

@@ -0,0 +1,599 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+       <el-form-item label="所属部门" prop="deptId">
+          <treeselect style="width:205.4px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
+      </el-form-item>
+       <el-form-item label="员工姓名" prop="userNickName">
+        <el-input
+          v-model="queryParams.userNickName"
+          placeholder="请输入员工姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item label="所属档期" prop="scheduleId">
+            <el-select  style="width:205.4px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small" >
+                  <el-option
+                      v-for="item in scheduleList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+
+       <!-- <el-form-item label="档期名称" prop="scheduleName">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入档期名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item> -->
+
+    <!-- <el-form-item label="档期状态" prop="scheduleStatus">
+        <el-select v-model="queryParams.status" placeholder="请选择档期状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item> -->
+
+      <el-form-item label="创建时间" prop="createTime">
+            <el-date-picker
+              style="width:205.4px"
+              clearable size="small"
+              v-model="dateRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+  
+    <el-table v-loading="loading" :data="tcmScheduleReportList" @selection-change="handleSelectionChange">
+       <!-- <el-table-column  type="expand" >
+            <template slot-scope="scope">
+                <el-table border :data="[scope.row]">
+                    <el-table-column prop="round1Money" label="一轮业绩" ></el-table-column>
+                    <el-table-column prop="round1Order" label="一轮单数"></el-table-column>
+                    <el-table-column prop="count" label="一轮转化率">
+                        <template slot-scope="scope1">
+                             {{(scope1.row.onlineRate*100).toFixed(2)+"%"}}
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="round2Unit" label="一轮客单"></el-table-column>
+                </el-table>
+            </template>
+      </el-table-column> -->
+
+      <el-table-column label="id"  width="50" align="center" prop="id" />
+      <el-table-column label="档期" align="center" prop="scheduleName" />
+      <!-- <el-table-column label="公司名称" align="center" prop="companyName" /> -->
+      <el-table-column label="所在部门" align="center" prop="deptName" />
+      <el-table-column label="员工姓名" align="center" prop="userNickName" />
+
+      <el-table-column label="总进线"  width="60"  align="center" prop="totalNum" />
+      <el-table-column label="注册数"  width="60"  align="center" prop="registerNum" />
+      <el-table-column label="上线数"  width="60"  align="center" prop="onlineNum" />
+      <el-table-column label="完课数"  width="60"  align="center" prop="finishNum" />
+      <el-table-column label="注册率"  width="70"  align="center" prop="registerRate"   >
+            <template slot-scope="scope">
+              {{(scope.row.registerRate*100).toFixed(2)+"%"}}
+            </template>
+     </el-table-column>
+     <el-table-column  label="上线率" width="70" align="center" prop="onlineRate"   >
+            <template slot-scope="scope">
+              {{(scope.row.onlineRate*100).toFixed(2)+"%"}}
+            </template>
+    </el-table-column>
+     <el-table-column  label="完课率" width="70" align="center" prop="finishRate"   >
+           <template slot-scope="scope">
+              {{(scope.row.finishRate*100).toFixed(2)+"%"}}
+           </template>
+    </el-table-column>
+     <el-table-column  label="累计总业绩" width="90" align="center" prop="totalMoney"   >
+            <template slot-scope="scope">
+               {{!scope.row.totalMoney?0:(scope.row.totalMoney).toFixed(2)}}
+            </template>
+    </el-table-column>
+     <el-table-column  label="累计总单" width="80" align="center" prop="totalOrder"   >
+            <template slot-scope="scope">
+              {{!scope.row.totalOrder?0:scope.row.totalOrder}}
+            </template>
+    </el-table-column>
+   <el-table-column  label="目标业绩"  width="80"  align="center" prop="targetMoney"   >
+          <template slot-scope="scope">
+            {{!scope.row.targetMoney?0:(scope.row.targetMoney).toFixed(2)}}
+          </template>
+    </el-table-column>
+    <el-table-column  label="目标完成率"  width="90" align="center" prop="targetRate"   >
+           <template slot-scope="scope">
+                {{!scope.row.targetRate?0:(scope.row.targetRate*100).toFixed(2)+"%" }}
+           </template>
+    </el-table-column>
+    <el-table-column label="创建时间" align="center" prop="createTime" width="100">
+            <template slot-scope="scope">
+               <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+      </el-table-column>
+
+       <el-table-column  label="一轮业绩"  width="72"  align="center" prop="round1Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round1Money?0:(scope.row.round1Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="一轮单数"  width="72" align="center" prop="round1Order" ></el-table-column>
+      <el-table-column label="一轮转化率" width="85"  align="center" prop="count">
+            <template slot-scope="scope1">
+                {{(scope1.row.onlineRate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="一轮客单"  width="72"  align="center" prop="round1Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round2Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+      <el-table-column  label="二轮业绩"  width="72"  align="center" prop="round2Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round2Money?0:(scope.row.round2Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="二轮单数"  width="72" align="center" prop="round2Order" ></el-table-column>
+      <el-table-column label="二轮转化率" width="85"  align="center" prop="round2Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round2Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="二轮客单"  width="72"  align="center" prop="round2Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round2Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+
+      <el-table-column  label="三轮业绩"  width="72"  align="center" prop="round3Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round3Money?0:(scope.row.round3Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="三轮单数"  width="72" align="center" prop="round3Order" ></el-table-column>
+      <el-table-column label="三轮转化率" width="85"  align="center" prop="round3Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round3Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="三轮客单"  width="72"  align="center" prop="round3Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round3Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+   
+      <el-table-column  label="四轮业绩"  width="72"  align="center" prop="round4Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round4Money?0:(scope.row.round4Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="四轮单数"  width="72" align="center" prop="round4Order" ></el-table-column>
+      <el-table-column label="四轮转化率" width="85"  align="center" prop="round4Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round4Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="四轮客单"  width="72"  align="center" prop="round4Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round4Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+      <el-table-column  label="五轮业绩"  width="72"  align="center" prop="round5Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round5Money?0:(scope.row.round5Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="五轮单数"  width="72" align="center" prop="round5Order" ></el-table-column>
+      <el-table-column label="五轮转化率" width="85"  align="center" prop="round5Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round5Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="五轮客单"  width="72"  align="center" prop="round5Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round5Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+      
+      <el-table-column  label="六轮业绩"  width="72"  align="center" prop="round6Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round6Money?0:(scope.row.round6Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="六轮单数"  width="72" align="center" prop="round6Order" ></el-table-column>
+      <el-table-column label="六轮转化率" width="85"  align="center" prop="round6Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round6Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="六轮客单"  width="72"  align="center" prop="round6Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round6Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+      <el-table-column  label="七轮业绩"  width="72"  align="center" prop="round7Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round7Money?0:(scope.row.round7Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="七轮单数"  width="72" align="center" prop="round7Order" ></el-table-column>
+      <el-table-column label="七轮转化率" width="85"  align="center" prop="round7Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round7Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="七轮客单"  width="72"  align="center" prop="round7Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round7Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+      <el-table-column  label="八轮业绩"  width="72"  align="center" prop="round8Money"   >
+           <template slot-scope="scope">
+                {{!scope.row.round8Money?0:(scope.row.round8Money).toFixed(2)}}
+           </template>
+      </el-table-column>
+      <el-table-column label="八轮单数"  width="72" align="center" prop="round8Order" ></el-table-column>
+      <el-table-column label="八轮转化率" width="85"  align="center" prop="round8Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round8Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="八轮客单"  width="72"  align="center" prop="round8Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round8Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+      <el-table-column  label="九轮业绩"  width="72"  align="center" prop="round9Money"   >
+            <template slot-scope="scope">
+                    {{!scope.row.round9Money?0:(scope.row.round9Money).toFixed(2)}}
+            </template>
+      </el-table-column>
+      <el-table-column label="九轮单数"  width="72" align="center" prop="round9Order" ></el-table-column>
+      <el-table-column label="九轮转化率" width="85"  align="center" prop="round9Rate">
+            <template slot-scope="scope1">
+                {{(scope1.row.round9Rate*100).toFixed(2)+"%"}}
+            </template>
+      </el-table-column>
+      <el-table-column label="九轮客单"  width="72"  align="center" prop="round9Unit">
+             <template slot-scope="scope1">
+                {{(scope1.row.round9Unit).toFixed(2)}}
+             </template>
+      </el-table-column>
+
+
+
+
+<!-- 
+      <el-table-column label="一轮业绩" align="center" prop="round1Money" />
+      <el-table-column label="一轮单数" align="center" prop="round1Order" />
+      <el-table-column label="一轮转化率" align="center" prop="round1Rate" />
+      <el-table-column label="一轮客单价" align="center" prop="round1Unit" />
+      <el-table-column label="二轮业绩" align="center" prop="round2Money" />
+      <el-table-column label="二轮单数" align="center" prop="round2Order" />
+      <el-table-column label="二轮转化率" align="center" prop="round2Rate" />
+      <el-table-column label="二轮客单价" align="center" prop="round2Unit" />
+      <el-table-column label="二轮业绩" align="center" prop="round3Money" />
+      <el-table-column label="三轮单数" align="center" prop="round3Order" />
+      <el-table-column label="三轮转化率" align="center" prop="round3Rate" />
+      <el-table-column label="三轮客单" align="center" prop="round3Unit" />
+      <el-table-column label="四轮业绩" align="center" prop="round4Money" />
+      <el-table-column label="四轮单数" align="center" prop="round4Order" />
+      <el-table-column label="四轮转化率" align="center" prop="round4Rate" />
+      <el-table-column label="四轮客单价" align="center" prop="round4Unit" />
+      <el-table-column label="五轮业绩" align="center" prop="round5Money" />
+      <el-table-column label="五轮单数" align="center" prop="round5Order" />
+      <el-table-column label="五轮转化率" align="center" prop="round5Rate" />
+      <el-table-column label="五轮客单价" align="center" prop="round5Unit" />
+      <el-table-column label="六轮业绩" align="center" prop="round6Money" />
+      <el-table-column label="六一轮单" align="center" prop="round6Order" />
+      <el-table-column label="六轮转率" align="center" prop="round6Rate" />
+      <el-table-column label="六轮客单价" align="center" prop="round6Unit" />
+      <el-table-column label="七轮业绩" align="center" prop="round7Money" />
+      <el-table-column label="七轮单数" align="center" prop="round7Order" />
+      <el-table-column label="七轮转化率" align="center" prop="round7Rate" />
+      <el-table-column label="七轮客单价" align="center" prop="round7Unit" />
+      <el-table-column label="八轮业绩" align="center" prop="round8Money" />
+      <el-table-column label="八轮单数" align="center" prop="round8Order" />
+      <el-table-column label="八轮转化率" align="center" prop="round8Rate" />
+      <el-table-column label="八轮客单价" align="center" prop="round8Unit" />
+      <el-table-column label="九轮业绩" align="center" prop="round9Money" />
+      <el-table-column label="九轮单数" align="center" prop="round9Order" />
+      <el-table-column label="九轮转化率" align="center" prop="round9Rate" />
+      <el-table-column label="九轮客单价" align="center" prop="round9Unit" /> -->
+
+        <!-- <el-table-column  fixed="right" label="操作" width="150px" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+            <el-button size="mini" type="text" @click="handleDetails(scope.row)">查看</el-button>
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['company:tcmScheduleReport:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['company:tcmScheduleReport:remove']">删除</el-button>
+            </template>
+        </el-table-column> -->
+
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { treeselect } from "@/api/company/companyDept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { listTcmScheduleReport, getTcmScheduleReport, delTcmScheduleReport, addTcmScheduleReport, updateTcmScheduleReport, exportTcmScheduleReport,listSchedule } from "@/api/company/tcmScheduleReport";
+
+export default {
+  name: "TcmScheduleReport",
+  components: { Treeselect },
+  data() {
+
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 中医档期业绩报表表格数据
+      tcmScheduleReportList: [],
+      scheduleList:[],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        scheduleId: null,
+        deptId:null,
+        userId: null,
+        companyId: null,
+        totalNum: null,
+        registerNum: null,
+        onlineNum: null,
+        finishNum: null,
+        registerRate: null,
+        onlineRate: null,
+        finishRate: null,
+        totalMoney: null,
+        
+      },
+      users:[],
+      // 部门树选项
+      deptOptions: [],
+      // 部门名称
+      deptName: undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: { 
+         
+      }
+    };
+  },
+  created() {
+    this.getTreeselect();
+    this.getListSchedule();
+    this.getList();
+  },
+  methods: {
+
+    calcRegister(){
+        
+    },
+    calcOnline(){
+
+    },
+    calcFinish(){
+
+    },
+    getTreeselect() {
+        treeselect().then((response) => {
+           this.deptOptions = response.data;
+        });
+    },
+    getListSchedule() {
+        this.loading = true;
+        listSchedule().then(response => {
+            this.scheduleList = response.rows;
+        });
+    },
+    /** 查询中医档期业绩报表列表 */
+    getList() {
+      this.loading = true;
+      listTcmScheduleReport(this.addDateRange(this.queryParams,this.dateRange)).then(response => {
+          this.tcmScheduleReportList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        scheduleId: null,
+        userId: null,
+        companyId: null,
+        totalNum: null,
+        registerNum: null,
+        onlineNum: null,
+        finishNum: null,
+        registerRate: null,
+        onlineRate: null,
+        finishRate: null,
+        totalMoney: null,
+        totalOrder: null,
+        targetMoney: null,
+        targetRate: null,
+        round1Money: null,
+        round1Order: null,
+        round1Rate: null,
+        round1Unit: null,
+        round2Money: null,
+        round2Order: null,
+        round2Rate: null,
+        round2Unit: null,
+        round3Money: null,
+        round3Order: null,
+        round3Rate: null,
+        round3Unit: null,
+        round4Money: null,
+        round4Order: null,
+        round4Rate: null,
+        round4Unit: null,
+        round5Money: null,
+        round5Order: null,
+        round5Rate: null,
+        round5Unit: null,
+        round6Money: null,
+        round6Order: null,
+        round6Rate: null,
+        round6Unit: null,
+        round7Money: null,
+        round7Order: null,
+        round7Rate: null,
+        round7Unit: null,
+        round8Money: null,
+        round8Order: null,
+        round8Rate: null,
+        round8Unit: null,
+        round9Money: null,
+        round9Order: null,
+        round9Rate: null,
+        round9Unit: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加中医档期业绩报表";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTcmScheduleReport(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改中医档期业绩报表";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTcmScheduleReport(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          } else {
+            addTcmScheduleReport(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除中医档期业绩报表编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delTcmScheduleReport(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    handleDetails(row){
+        this.$router.push({path:'/schedule/report/add',query:{"scheduleId":row.scheduleId,"reportId":row.id}});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有中医档期业绩报表数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportTcmScheduleReport(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        }).catch(function() {});
+    }
+  }
+};
+</script>