瀏覽代碼

Merge branch 'ol_12_30' into tmp_class_fee

wolyshaw 4 年之前
父節點
當前提交
aeb1ba183e

+ 15 - 0
src/components/empty/README.md

@@ -0,0 +1,15 @@
+#### empty 空状态
+
+##### demo
+
+###### 默认
+``` html
+<empty/>
+```
+
+###### 自定义描述
+``` html
+<empty>
+  <p>自定义描述</p>
+</empty>
+```

+ 1 - 0
src/components/empty/empty.svg

@@ -0,0 +1 @@
+<svg t="1609119920930" class="icon" viewBox="0 0 1706 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10437" width="256" height="256"><path d="M0 851.446623a853.285929 172.553377 0 1 0 1706.571857 0 853.285929 172.553377 0 1 0-1706.571857 0Z" fill="#ECEEF2" p-id="10438"></path><path d="M304.149029 857.135196a92.534118 92.534118 0 0 1-91.775642-92.913356L151.316038 301.361628a27.494769 27.494769 0 0 1 9.480955-21.426958L439.726682 6.883173a27.874007 27.874007 0 0 1 18.961909-6.826287h793.555914a27.30515 27.30515 0 0 1 18.961909 6.067811l277.602356 273.620354a34.131437 34.131437 0 0 1 9.670574 21.806196l-61.057349 462.670593a92.534118 92.534118 0 0 1-91.775642 92.913356z" fill="#E1E5EC" p-id="10439"></path><path d="M242.143585 764.22184a61.815825 61.815825 0 0 0 62.005444 62.005444h1099.790752a60.298872 60.298872 0 0 0 60.678111-61.057349l61.057348-452.241542H1076.467604l-2.844287 18.961909a223.371294 223.371294 0 0 1-66.177064 126.096699 217.87234 217.87234 0 0 1-150.178323 60.867729 221.285484 221.285484 0 0 1-216.924245-187.343666l-3.033906-18.961909H180.32776z" fill="#F4F5F7" p-id="10440"></path><path d="M202.133956 282.02048h447.121826a11.377146 11.377146 0 0 1 9.860193 11.187527 197.203859 197.203859 0 1 0 394.407718 0 10.618669 10.618669 0 0 1 10.049812-11.187527h442.570968L1251.675648 29.827084h-792.607818z" fill="#FFFFFF" p-id="10441"></path><path d="M1117.994186 338.147733l378.290095-0.568858-56.316872 405.974483-38.871914-0.948095 53.662204-371.08457-342.831325 1.327334z" fill="#FFFFFF" p-id="10442"></path></svg>

+ 32 - 0
src/components/empty/index.vue

@@ -0,0 +1,32 @@
+<template>
+  <div class="empty">
+    <img src="./empty.svg"/>
+    <slot v-if="$slots.default"/>
+    <p v-else>{{desc}}</p>
+  </div>
+</template>
+<script>
+import tempalteManager from '@/views/categroyManager/specialSetup/tempalteManager.vue'
+export default {
+  components: { tempalteManager },
+  name: 'empty',
+  props: {
+    desc: {
+      type: String,
+      default: '暂无数据'
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+  .empty{
+    text-align: center;
+    >img {
+      width: 100px;
+    }
+    >p{
+      font-size: 16px;
+      line-height: 1.8;
+    }
+  }
+</style>

+ 2 - 0
src/components/install.js

@@ -13,6 +13,7 @@ import statistic from '@/components/statistic'
 import descriptions from '@/components/Descriptions/Descriptions.vue'
 import remoteSearch from "@/components/remote-search"
 import tabRouter from '@/components/tab-router'
+import empty from '@/components/empty'
 
 export default {
   install(Vue) {
@@ -26,5 +27,6 @@ export default {
     Vue.component(descriptions.name, descriptions)
     Vue.component(remoteSearch.name, remoteSearch)
     Vue.component(tabRouter.name, tabRouter)
+    Vue.component(empty.name, empty)
   }
 }

+ 1 - 0
src/router/index.js

@@ -353,6 +353,7 @@ export const asyncRoutes = {
   auditList: () => import('@/views/auditList/index'),
   // 订单审核
   orderAudit: () => import('@/views/businessManager/orderManager/orderAudit'),
+  orderAuditTaoqi: () => import('@/views/businessManager/orderManager/orderAudit-taoqi'),
   // 长三角比赛
   matchManager: () => import('@/views/matchManager/index'),
   // 考勤列表

+ 8 - 0
src/views/auditList/index.vue

@@ -128,6 +128,14 @@
             </template>
           </el-table-column>
           <el-table-column align="center"
+                           prop="auditMemo"
+                           width="200px"
+                           label="审核备注">
+            <template slot-scope="scope">
+              <overflow-text width="200px" :text="scope.row.auditMemo" />
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
                            prop="operatorName"
                            label="申请人"></el-table-column>
           <el-table-column align="center"

+ 304 - 0
src/views/businessManager/orderManager/orderAudit-taoqi/index.vue

@@ -0,0 +1,304 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>订单审核(含淘器)
+    </h2>
+    <div class="m-core">
+
+      <saveform ref="searchForm" :model.sync="searchForm" inline style="margin-top: 20px" >
+        <el-form-item>
+          <el-input v-model.trim="searchForm.transNo"
+                    @keyup.enter.native="transNo"
+                    placeholder='交易流水号'></el-input>
+        </el-form-item>
+
+        <el-form-item prop="organId">
+          <el-select class="multiple"
+                     v-model.trim="searchForm.organId"
+                     filterable
+                     clearable
+                     placeholder="请选择分部">
+            <el-option v-for="(item,index) in organList"
+                       :key="index"
+                       :label="item.name"
+                       :value="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select class="multiple"
+                     v-model.trim="searchForm.type"
+                     filterable
+                     clearable
+                     placeholder="请选择申请类型">
+            <el-option v-for="(item,index) in orderServerList"
+                       :key="index"
+                       :label="item.label"
+                       :value="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select class="multiple"
+                     v-model.trim="searchForm.auditStatus"
+                     placeholder="请选择审核状态">
+            <el-option v-for="(item,index) in orderAuditTypeList"
+                       :key="index"
+                       :label="item.label"
+                       :value="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search"
+                     type="danger">搜索</el-button>
+          <el-button @click="onReSet"
+                     type="primary">重置</el-button>
+        </el-form-item>
+      </saveform>
+      <div class="tableWrap">
+        <el-table style="width: 100%"
+                  :header-cell-style="{background:'#EDEEF0',color:'#444'}"
+                  :data="tableList">
+          <el-table-column align="center"
+                           prop="transNo"
+                           label="交易流水号"></el-table-column>
+          <el-table-column align="center"
+                           prop="organ.name"
+                           label="分部"></el-table-column>
+          <el-table-column align="center"
+                           prop="cooperationOrgan.name"
+                           label="学校名称"></el-table-column>
+          <el-table-column align="center"
+                           prop="serviceAmount"
+                           label="服务收入">
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="saleAmount"
+                           label="销售收入"></el-table-column>
+          <!-- <el-table-column align="center"
+                           prop="memo"
+                           label="备注">
+            <template slot-scope="scope">
+              <Tooltip :content="scope.row.memo?scope.row.memo:''" />
+            </template>
+          </el-table-column> -->
+          <el-table-column align="center"
+                           prop="operator.username"
+                           label="申请人"></el-table-column>
+          <el-table-column align="center"
+                           prop="auditStatus"
+                           label="状态">
+            <template slot-scope="scope">
+              <div>
+                <p v-if="scope.row.auditStatus">{{scope.row.auditStatus| orderAuditType}}</p>
+                <p v-else>{{'审核通过'}}</p>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="payTime"
+                           label="交易日期">
+            <template slot-scope="scope">
+              <div>
+                {{scope.row.payTime | dateForMinFormat}}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="createTime"
+                           label="申请时间">
+
+            <template slot-scope="scope">
+              <div>
+                {{scope.row.createTime | dateForMinFormat}}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="studentId"
+                           label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text"
+                v-permission="'routeOrder/query'"
+                           @click="lookDetail(scope.row)">查看</el-button>
+                <el-button type="text"
+                v-permission="'routeOrder/update'"
+                           v-if="scope.row.auditStatus == 'REJECT'"
+                           @click="resetDetail(scope.row)">修改</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+        sync
+        :total.sync="rules.total"
+                    :page.sync="rules.page"
+                    :limit.sync="rules.limit"
+                    :page-sizes="rules.page_size"
+                    @pagination="getList" />
+
+      </div>
+    </div>
+    <el-dialog title="审核详情"
+               :visible.sync="orderVisible"
+               width="600px">
+      <orderAuditDetail :orderId='activceId'
+                        :shopList="shopList"
+                        :organList="organList"
+                        :isLook='isLook'
+                        ref="orderAuditDetail"
+                        v-if="orderVisible"
+                        @getList="getList" />
+      <span slot="footer"
+            class="dialog-footer" >
+        <el-button v-if="activeRow&&activeRow.auditStatus == 'ING'"
+         v-permission="'routeOrder/auditOutOrder'"
+                   @click="submit('REJECT')">驳回</el-button>
+        <el-button v-if="activeRow&&activeRow.auditStatus == 'ING'"
+         v-permission="'routeOrder/auditOutOrder'"
+                   @click="submit('PASS')"
+                   type="primary">审核通过</el-button>
+        <el-button @click="orderVisible = false"
+
+                   v-if="activeRow&&activeRow.auditStatus == 'REJECT'&&!isLook">取 消</el-button>
+        <el-button v-if="activeRow&&activeRow.auditStatus == 'REJECT'&&!isLook"
+         v-permission="'routeOrder/update'"
+                   @click="submitReaet"
+                   type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import { getEmployeeOrgan, getAddress, getCooperation } from "@/api/buildTeam";
+import { orderServerList, orderAuditTypeList } from "@/utils/searchArray";
+import orderAuditDetail from "./orderAuditDetail";
+import { getRouteOrderList } from "@/api/orderManager";
+import { goodsQuery } from "@/api/businessManager";
+import { formatData } from "@/utils/utils";
+import Tooltip from "@/components/Tooltip/index";
+import saveform from '@/components/save-form'
+export default {
+  components: { pagination, orderAuditDetail, Tooltip,saveform },
+  data() {
+    return {
+      searchForm: {
+        transNo: null,
+        organId: null,
+        auditStatus: 'ING',
+        type: null,
+      },
+      tableList: [],
+      organList: [],
+      orderServerList,
+      orderAuditTypeList,
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      orderVisible: false,
+      activceId: null,
+      activeRow: null,
+      isLook: null,
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    getEmployeeOrgan().then((res) => {
+      if (res.code == 200) {
+        this.organList = res.data;
+      }
+    });
+    // 获取分部
+    goodsQuery({ status: 1, rows: 99999 }).then((res) => {
+      if (res.code === 200) {
+        this.shopList = res.data.rows;
+      }
+    });
+
+    this.init();
+  },
+  activated() {
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    search() {
+      this.$refs.searchForm.save( this.searchForm)
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.searchForm = {
+        transNo: null,
+        organId: null,
+        auditStatus: 'ING',
+        type: null,
+      };
+      this.search();
+    },
+    getList() {
+      let params = this.searchForm;
+      params.rows = this.rules.limit;
+      params.page = this.rules.page;
+      getRouteOrderList(params).then((res) => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.rules.total = res.data.total;
+          this.orderVisible = false;
+        }
+      });
+    },
+    lookDetail(row) {
+      this.activceId = row.id;
+      this.activeRow = row;
+      this.isLook = true;
+      this.orderVisible = true;
+    },
+    resetDetail(row) {
+      this.activceId = row.id;
+      this.activeRow = row;
+      this.isLook = false;
+      this.orderVisible = true;
+    },
+    submit(str) {
+      let message;
+      str == "REJECT" ? (message = "驳回") : (message = "同意");
+      this.$confirm(`是否${message}审核`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$refs.orderAuditDetail.auditOutOrder(str);
+        })
+        .catch(() => {});
+    },
+    submitReaet() {
+      this.$confirm(`是否提交修改`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$refs.orderAuditDetail.submitReaet();
+        })
+        .catch(() => {});
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 487 - 0
src/views/businessManager/orderManager/orderAudit-taoqi/orderAuditDetail.vue

@@ -0,0 +1,487 @@
+<template>
+  <div>
+    <el-form :inline="true" ref="ruleForm">
+      <div class="lookTitle">申请信息</div>
+      <el-form-item label="申请人" label-width="80px">
+        <div style="width: 180px">
+          <p v-if="form.operator && form.operator.username">
+            {{ form.operator.username }}
+          </p>
+        </div>
+      </el-form-item>
+      <el-form-item label="申请时间" label-width="80px">
+        <div style="width: 180px">{{ form.createTime }}</div>
+      </el-form-item>
+    </el-form>
+    <el-form :model="form" ref="ruleForm">
+      <div class="lookTitle">基本信息</div>
+      <el-form-item
+        label="所属分部"
+        :rules="[{ required: true, message: '请选择分部', trigger: 'change' }]"
+        prop="routeOrganId"
+        :label-width="formLabelWidth"
+      >
+        <!--    -->
+        <el-select
+          v-model.trim="form.routeOrganId"
+          :disabled="!isAdd"
+          @change="changeOrgin"
+          style="width: 100% !important"
+        >
+          <el-option
+            v-for="(item, index) in organList"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="所属学校"
+        prop="schoolId"
+        :label-width="formLabelWidth"
+      >
+        <!--    @change="checkSchool" -->
+        <el-select
+          v-model="form.schoolId"
+          :disabled="!isAdd"
+          style="width: 100% !important"
+        >
+          <el-option
+            v-for="(item, index) in cooperationList"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+          <el-form-item
+            label="缴费单号"
+            prop="calenderId"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              v-model.trim="form.calenderId"
+              :disabled="!isAdd"
+              placeholder="请输入缴费单号"
+            ></el-input>
+          </el-form-item>
+      <el-form-item
+        label="学员编号"
+        prop="userId"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          v-model.trim="form.userId"
+          :disabled="!isAdd"
+          placeholder="请输入学员编号"
+        ></el-input>
+      </el-form-item>
+      <div class="lookTitle">交易信息</div>
+      <el-form-item
+        label="交易流水号"
+        :rules="[
+          { required: true, message: '请输入流水号', trigger: 'change' },
+        ]"
+        prop="transNo"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          placeholder="请输入交易流水号"
+          type="text"
+          :disabled="!isAdd"
+          v-model.trim="form.transNo"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="收款账户"
+        prop="merNo"
+        :rules="[
+          { required: true, message: '请输入收款账户', trigger: 'change' },
+        ]"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          placeholder="请输入收款账户"
+          type="text"
+          :disabled="!isAdd"
+          v-model.trim="form.merNo"
+        ></el-input>
+      </el-form-item>
+      <el-form-item
+        label="交易日期"
+        :rules="[
+          { required: true, message: '请选择交易日期', trigger: 'change' },
+        ]"
+        prop="payTime"
+        :label-width="formLabelWidth"
+      >
+        <el-date-picker
+          style="width: 100%"
+          :disabled="!isAdd"
+          v-model="form.payTime"
+          type="datetime"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          placeholder="选择交易日期"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item
+        label="收入类型"
+        :label-width="formLabelWidth"
+        :rules="[
+          { required: true, message: '请选收入类型', trigger: 'change' },
+        ]"
+        prop="applyType"
+      >
+        <el-select
+          class="multiple"
+          style="width: 100% !important"
+          v-model.trim="form.applyType"
+          filterable
+          clearable
+          :disabled="!isAdd"
+          placeholder="请选择收入类型"
+        >
+          <el-option
+            v-for="(item, index) in orderServerList"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="销售金额"
+        prop="saleAmount"
+        :rules="[
+          { required: true, message: '请输入销售金额', trigger: 'change' },
+        ]"
+        v-if="form.applyType == 'SELL'"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          v-model="form.saleAmount"
+          @mousewheel.native.prevent
+          type="number"
+          :disabled="!isAdd"
+          placeholder="请输入销售金额"
+        />
+      </el-form-item>
+      <el-form-item
+        label="服务金额"
+        v-if="form.applyType == 'SERVICE'"
+        :rules="[
+          { required: true, message: '请输入服务金额', trigger: 'change' },
+        ]"
+        prop="serviceAmount"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          type="number"
+          @mousewheel.native.prevent
+          :disabled="!isAdd"
+          v-model="form.serviceAmount"
+          placeholder="请输入收入金额"
+        />
+      </el-form-item>
+
+      <div v-if="form.applyType == 'SELL'">
+        <div v-for="(goodsList, index) in form.goodsList" :key="index">
+          <el-form-item
+            :label="'商品名称' + (index + 1)"
+            :label-width="formLabelWidth"
+            class="setWidth"
+            :prop="'goodsList.' + index + '.id'"
+            :rules="[
+              { required: true, message: '请选择商品', trigger: 'change' },
+            ]"
+          >
+            <el-select
+              v-model.trim="goodsList.id"
+              filterable
+              :disabled="!isAdd"
+              placeholder="请选择商品"
+            >
+              <el-option
+                v-for="(item, index) in shopList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            class="setWidth"
+            style="margin-right: 10px"
+            :prop="'goodsList.' + index + '.number'"
+          >
+            <!--  :rules="validAmount" <el-input-number style="width: 160px;" v-model="goodsList.number" placeholder="商品数量"></el-input-number> -->
+            <el-input
+              type="age"
+              style="width: 160px"
+              :disabled="!isAdd"
+              clearable
+              placeholder="请输入商品数量"
+              @mousewheel.native.prevent
+              v-model.number="goodsList.number"
+            ></el-input>
+          </el-form-item>
+          <el-button
+            icon="el-icon-minus"
+            :disabled="!isAdd"
+            v-if="form.goodsList.length > 1 && auditStatus == 'REJECT'"
+            circle
+            @click.prevent="removeGoodsList(goodsList)"
+          ></el-button>
+          <el-button
+            icon="el-icon-plus"
+            :disabled="!isAdd"
+            v-if="auditStatus == 'REJECT'"
+            @click.prevent="addGoodsList"
+            circle
+            style="margin-left: 5px"
+          ></el-button>
+        </div>
+      </div>
+      <div class="lookTitle">其它</div>
+      <el-form-item
+        label="提交备注"
+        :label-width="formLabelWidth"
+        :rules="[
+          { required: true, message: '请输入提交备注', trigger: 'change' },
+        ]"
+      >
+        <el-input
+          placeholder="请输入备注"
+          :disabled="!isAdd"
+          v-model.trim="form.memo"
+          type="textarea"
+          :rows="3"
+        ></el-input>
+      </el-form-item>
+      <!-- &&auditStatus != 'REJECT' -->
+      <el-form-item
+        label="审核备注"
+        v-if="auditStatus != 'ING'"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          placeholder="请输入备注"
+          :disabled="true"
+          v-model.trim="form.auditComment"
+          type="textarea"
+          :rows="3"
+        ></el-input>
+      </el-form-item>
+    </el-form>
+    <div class="lookTitle" v-if="auditStatus == 'ING'" v-permission="'routeOrder/auditOutOrder'">审核意见</div>
+    <el-form :model="submitForm" v-if="auditStatus == 'ING'" ref="submitForm" v-permission="'routeOrder/auditOutOrder'">
+      <el-form-item
+        prop="memo"
+        :rules="[
+          { required: true, message: '请输入审核意见', trigger: 'blur' },
+        ]"
+      >
+        <el-input
+          type="textarea"
+          :rows="4"
+          v-model="submitForm.memo"
+        ></el-input>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import {
+  getRouteOrderInfo,
+  auditOutOrder,
+  updateRouteOrder,
+} from "@/api/orderManager";
+import { orderServerList } from "@/utils/searchArray";
+import { getCooperation } from "@/api/buildTeam";
+export default {
+  props: ["orderId", "shopList", "organList", "isLook"],
+  data() {
+    return {
+      formLabelWidth: "100px",
+      form: {
+        routeOrganId: null,
+        transNo: null,
+        type: "OTHER",
+        merNo: null,
+        actualAmount: null,
+        memo: null,
+        payTime: null,
+        serviceAmount: null,
+        goodsAmount: null,
+        schoolId: null,
+        goodsList: [
+          {
+            id: null,
+            number: null,
+          },
+        ],
+        applyType: null,
+        userId: "",
+        auditComment: "",
+        calenderId:''
+      },
+      isAdd: !this.isLook,
+      cooperationList: [],
+      submitForm: {
+        memo: "",
+      },
+      auditStatus: "",
+      orderServerList: orderServerList,
+      clearSchool: false,
+    };
+  },
+  mounted() {
+    if (this.orderId) {
+      getRouteOrderInfo({ id: this.orderId }).then((res) => {
+        if (res.code == 200) {
+          let orderInfo = res.data;
+          this.form = {
+            createTime: orderInfo.createTime,
+            operator: orderInfo.operator,
+            routeOrganId: orderInfo.routeOrganId,
+            transNo: orderInfo.transNo,
+            type: "OTHER",
+            merNo: orderInfo.merNo,
+            actualAmount: orderInfo.actualAmount,
+            memo: orderInfo.memo,
+            payTime: orderInfo.payTime,
+            serviceAmount: orderInfo.serviceAmount,
+            saleAmount: orderInfo.saleAmount,
+            schoolId: orderInfo.schoolId,
+            userId: orderInfo.userId ? orderInfo.userId : "",
+            auditComment: orderInfo.auditComment,
+            applyType: orderInfo.saleAmount ? "SELL" : "SERVICE",
+            calenderId:orderInfo.calenderId?orderInfo.calenderId:''
+          };
+          this.auditStatus = orderInfo.auditStatus;
+          this.$set(
+            this.form,
+            "goodsList",
+            this.getShopList(orderInfo.goodsJson)
+          );
+          this.changeOrgin(orderInfo.routeOrganId);
+          this.clearSchool = true;
+        }
+      });
+    }
+  },
+  methods: {
+    changeOrgin(val) {
+      if (val) {
+        if (this.clearSchool) {
+          this.$set(this.form, "schoolId", null);
+        }
+        getCooperation({ rows: 9999, organId: val }).then((res) => {
+          if (res.code === 200) {
+            this.cooperationList = res.data.rows;
+          }
+        });
+      }
+    },
+    getShopList(str) {
+      let arr = [];
+      try {
+        const obj = JSON.parse(str);
+
+        // id: item.goodsId, number: item.num
+        for (let i in obj) {
+          arr.push({ id: parseInt(i), number: obj[i] });
+        }
+      } catch {}
+      return arr.length > 0
+        ? arr
+        : [
+            {
+              id: null,
+              number: null,
+            },
+          ];
+    },
+    auditOutOrder(status) {
+      const that = this;
+      this.$refs.submitForm.validate((res) => {
+        if (res) {
+          auditOutOrder({
+            auditStatus: status,
+            memo: this.submitForm.memo,
+            studentPaymentRouteOrderId: this.orderId,
+          }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("审核成功");
+              that.$emit("getList");
+              return;
+            }
+          });
+        }
+      });
+    },
+    removeGoodsList(item) {
+      const index = this.form.goodsList.indexOf(item);
+      if (index !== -1) {
+        this.form.goodsList.splice(index, 1);
+      }
+    },
+    addGoodsList() {
+      this.form.goodsList.push({
+        id: null,
+        number: null,
+      });
+    },
+    submitReaet() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          let form = this.form;
+          if (!form.saleAmount && !form.serviceAmount) {
+            this.$message.error("请输入销售收入或服务收入");
+            return;
+          }
+          form.applyType == "SELL"
+            ? (form.serviceAmount = 0)
+            : (form.saleAmount = 0);
+          if (!form.saleAmount) {
+            form.goodsList = null;
+          }
+          let goodsJson = {};
+          for (let i in form.goodsList) {
+            goodsJson[form.goodsList[i]["id"]] = form.goodsList[i]["number"];
+          }
+          form.goodsJson =
+            form.applyType == "SERVICE" ? null : JSON.stringify(goodsJson);
+          form.id = this.orderId;
+          form.auditStatus = "ING";
+          updateRouteOrder(form).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("修改成功");
+              this.$emit("getList");
+              return;
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.lookTitle {
+  height: 40px;
+  line-height: 40px;
+  font-weight: bold;
+  background-color: rgb(237, 238, 240);
+  padding: 0 20px;
+  margin-bottom: 20px;
+}
+.setWidth {
+  display: inline-block;
+}
+</style>

+ 1 - 0
src/views/businessManager/orderManager/orderAudit/index.vue

@@ -253,6 +253,7 @@ export default {
       let params = this.searchForm;
       params.rows = this.rules.limit;
       params.page = this.rules.page;
+      params.noneTqType = 1
       getRouteOrderList(params).then((res) => {
         if (res.code == 200) {
           this.tableList = res.data.rows;

+ 1 - 2
src/views/resetTeaming/components/resetPayList.vue

@@ -368,8 +368,7 @@
       <subject-preview :subjectId="dialogSubjectId"
                        :calenderId="dialogCalenderId"></subject-preview>
       <div slot="footer">
-        <el-button type="primary"
-                   @click="previewVisible = false">确 定</el-button>
+        <el-button @click="previewVisible = false">确 定</el-button>
       </div>
     </el-dialog>
   </div>

+ 2 - 2
src/views/resetTeaming/components/strudentPayInfo.vue

@@ -174,14 +174,14 @@
         >
           新增学员
         </div> -->
-        <!-- <div
+        <div
           class="newBand"
           @click="delStudentBtn"
           v-if="info.paymentStatus == 'NO'"
           v-permission="'musicGroupPaymentCalenderDetail/batchDel'"
         >
           删除学员
-        </div> -->
+        </div>
         <div class="newBand"
              v-permission="'export/musicGroupPaymentCalenderDetail'"
              @click="onMusicGroupPaymentCalenderDetail">

+ 1 - 1
src/views/resetTeaming/modals/pay-items.vue

@@ -130,7 +130,7 @@
             >
             <el-button
               type="text"
-              v-if="$listeners.onPreview && payUserType === 'STUDENT'"
+              v-if="$listeners.onPreview && payUserType === 'STUDENT' && scope.row.paymentType == 'MUSIC_APPLY'"
               v-permission="'musicGroup/findMusicGroupSubjectInfo/966'"
               @click="$listeners.onPreview(scope.row)"
               >预览</el-button

+ 2 - 2
src/views/resetTeaming/modals/school-pay-user-list.vue

@@ -41,7 +41,7 @@
       @selection-change="handleSelectionChange"
       :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
     >
-      <el-table-column type="selection" width="55"> </el-table-column>
+      <!-- <el-table-column type="selection" width="55"> </el-table-column> -->
       <el-table-column
         align="center"
         prop="userId"
@@ -181,7 +181,7 @@ export default {
           type: 'warning'
         })
         await delMusicGroupPaymentCalenderStudent({
-          musicGroupPaymentCalenderIds: this.activeChiose.map(item => item.id)
+          musicGroupPaymentCalenderDetailIds: this.activeChiose.map(item => item.id).join(',')
         })
         this.$message.success('删除成功')
         this.FetchList()

+ 1 - 0
src/views/resetTeaming/modals/subject-preview.vue

@@ -497,6 +497,7 @@ export default {
 <style lang="less" scoped>
 
 .noticeInfo {
+  line-height: 1.8;
     h2 {
         font-size: 18px;
         color: #1a1a1a;

+ 0 - 1
src/views/resetTeaming/modals/user-pay-form.vue

@@ -379,7 +379,6 @@ export default {
           }
         }
       }
-      console.log(first, other)
       if (this.cycles && this.cycles.length) {
         this.cycles = this.cycles.map((item, index) => {
           return {

+ 9 - 0
src/views/teamDetail/api.js

@@ -14,3 +14,12 @@ export const updateClassGroupStudents = data => request2({
   method: 'post',
   requestType: 'form'
 })
+
+// 查询可排课信息
+export const queryStudentSubTotalCourseTimes = data => request2({
+  url: '/api-web/studentManage/queryStudentSubTotalCourseTimes',
+  params: data,
+  method: 'get',
+  requestType: 'form'
+})
+

+ 49 - 0
src/views/teamDetail/components/modals/course-time-detail.vue

@@ -0,0 +1,49 @@
+<template>
+  <el-table
+    :data="list"
+    :header-cell-style="{background:'#EDEEF0',color:'#444'}"
+  >
+    <el-table-column
+      prop="type"
+      label="课程类型"
+      align="center"
+    >
+      <template slot-scope="scope">
+        {{courseType[scope.row.type]}}
+      </template>
+    </el-table-column>
+    <el-table-column
+      prop="time"
+      label="剩余时长(分)"
+      align="center"
+    />
+  </el-table>
+</template>
+
+<script>
+import { queryStudentSubTotalCourseTimes } from '../../api'
+import { courseType } from '@/constant'
+export default {
+  props: ['detail'],
+  data() {
+    return {
+      courseType,
+      list: []
+    }
+  },
+  mounted() {
+    this.FetchDetail()
+  },
+  methods: {
+    async FetchDetail() {
+      try {
+        const res = await queryStudentSubTotalCourseTimes({
+          userId: this.detail.userId,
+          musicGroupId: this.detail.musicGroupId,
+        })
+        this.list = Object.keys(res.data).map(item => ({type: item, time: res.data[item]}))
+      } catch (error) {}
+    }
+  }
+}
+</script>

+ 12 - 1
src/views/teamDetail/components/modals/create-user-pay.vue

@@ -131,6 +131,13 @@
       :isCommon="false"
       :isDisabled="true"
     />
+    <el-alert title="其它"
+              :closable="false"
+              class="alert"
+              type="info">
+    </el-alert>
+    <otherform :form="other"
+               ref="other" />
     <div slot="footer" class="dialog-footer">
       <el-button @click="$listeners.close">取 消</el-button>
       <el-button type="primary" @click="submit">确认</el-button>
@@ -139,6 +146,7 @@
 </template>
 <script>
 import paymentCycle from "../../../resetTeaming/modals/payment-cycle";
+import otherform from "../../../resetTeaming/modals/other";
 import extraClass from "../../../resetTeaming/modals/extra-class";
 import { musicGroupPaymentCalenderAdd } from '../../../resetTeaming/api'
 import { queryRemainCourseTypeDuration } from '../../api'
@@ -149,6 +157,7 @@ export default {
   props: ["snapList", "highList", "mixList", "signList", 'createdUserId', 'organizationCourseUnitPriceSettings', 'musicGroupId', 'baseInfo'],
   components: {
     paymentCycle,
+    otherform,
     extraClass
   },
   data() {
@@ -164,6 +173,7 @@ export default {
       payment: {
         paymentPattern: null,
       },
+      other: {},
       cycle: {},
       eclass: [],
       collapse: [0],
@@ -288,7 +298,7 @@ export default {
     },
     getForms() {
       const { $refs: refs } = this;
-      return [refs.eclass, refs.cycle, refs.payment, ...(refs.cycles || [])]
+      return [refs.eclass, refs.cycle, refs.payment, refs.other, ...(refs.cycles || [])]
         .filter((item) => !!item)
         .map((item) => item.$refs.form || item);
     },
@@ -345,6 +355,7 @@ export default {
           payUserType: 'STUDENT',
           studentIds: this.createdUserId,
           musicGroupPaymentCalenderCourseSettingsList: this.eclass,
+          ...this.other,
         }
         try {
           await musicGroupPaymentCalenderAdd(data)

+ 30 - 174
src/views/teamDetail/components/studentList.vue

@@ -138,6 +138,7 @@
         </el-table-column>
         <el-table-column align="center"
                          prop="phone"
+                         width="120"
                          label="联系电话"></el-table-column>
         <!-- <el-table-column align='center'
         prop=""
@@ -187,6 +188,11 @@
                          label="缴费金额"
                          prop="courseFee"></el-table-column> -->
         <el-table-column align="center"
+                         prop="subTotalCourseTime"
+                         label="剩余时长(分)"
+                         width="125">
+                         </el-table-column>
+        <el-table-column align="center"
                          label="报名缴费">
           <template slot-scope="scope">
             <div>{{ scope.row.paymentStatus | studentPays}}</div>
@@ -208,11 +214,13 @@
         </el-table-column>
         <el-table-column align="center"
                          fixed="right"
-                         width="300px;"
+                         width="340px;"
                          label="操作">
           <template slot-scope="scope">
             <div>
-
+              <el-button type="text"
+                         v-if="permission('studentManage/queryStudentSubTotalCourseTimes')"
+                         @click="viewTimer(scope.row)">课程时长</el-button>
               <el-button type="text"
                          v-if="permission('studentManage/queryStudentClassGroup')&&scope.row.studentStatus != 'QUIT'"
                          @click="lookClass(scope.row)">查看班级</el-button>
@@ -348,177 +356,6 @@
                             placeholder="选择日期"></el-date-picker>
           </el-col>
         </el-form-item>
-        <!-- <br />
-        <el-form-item label="声部班">
-          <el-select v-model.trim="maskForm.signClass"
-                     filterable
-                     clearable>
-            <el-option v-for="(item,index) in signList"
-                       :key="index"
-                       :value="item.id"
-                       :label="item.name"></el-option>
-          </el-select>
-        </el-form-item> -->
-        <!-- <el-form-item label="合奏班">
-          <el-select v-model.trim="maskForm.mixClass"
-                     filterable
-                     clearable>
-            <el-option v-for="(item,index) in mixList"
-                       :key="index"
-                       :value="item.id"
-                       :label="item.name"></el-option>
-          </el-select>
-        </el-form-item> -->
-        <!-- <el-form-item label="基础技能班">
-          <el-select v-model.trim="maskForm.highClass"
-                     filterable
-                     clearable>
-            <el-option v-for="(item,index) in highList"
-                       :key="index"
-                       :value="item.id"
-                       :label="item.name"></el-option>
-          </el-select>
-        </el-form-item> -->
-        <!-- <el-form-item label="临时班">
-          <el-select v-model.trim="maskForm.snapClass"
-                     filterable
-                     clearable
-                     multiple>
-            <el-option v-for="(item,index) in snapList"
-                       :key="index"
-                       :value="item.id"
-                       :label="item.name"></el-option>
-          </el-select>
-        </el-form-item> -->
-        <!-- <el-form-item label="线上基础技能班">
-          <el-select v-model.trim="maskForm.highonline"
-                     filterable
-                     clearable
-                     multiple>
-            <el-option v-for="(item,index) in highonlineList"
-                       :key="index"
-                       :value="item.id"
-                       :label="item.name"></el-option>
-          </el-select>
-        </el-form-item>-->
-        <!-- <el-form-item label="乐团网管课">
-          <el-select v-model.trim="maskForm.muiscnetwork"
-                     filterable
-                     clearable
-                     multiple>
-            <el-option v-for="(item,index) in muiscnetworkList"
-                       :key="index"
-                       :value="item.id"
-                       :label="item.name"></el-option>
-          </el-select>
-        </el-form-item>-->
-
-        <!-- <el-divider>首缴订单信息</el-divider>
-        <el-form-item label="课程费用"
-                      prop="temporaryCourseFee">
-          <el-input type="number"
-                    @mousewheel.native.prevent
-                    v-model.trim="maskForm.temporaryCourseFee"
-                    placeholder="首缴课程金额"></el-input>
-        </el-form-item>
-
-        <el-form-item label="乐器"
-                      class="instrList">
-          <el-col :span="11"
-                  style="width: auto;">
-            <el-form-item>
-              <el-select placeholder="选择乐器"
-                         filterable
-                         clearable
-                         @change="onInstrumentChange"
-                         v-model.trim="maskForm.musicGoodsIdList">
-                <el-option v-for="(item, index) in INSTRUMENTLIST"
-                           :key="index"
-                           :value="item.value"
-                           :label="item.label"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="1">&nbsp;</el-col>
-          <el-col :span="11">
-            <el-form-item>
-              <el-input type="number"
-                        @mousewheel.native.prevent
-                        :disabled="kitStatus"
-                        v-model.trim="maskForm.musicPrice"
-                        placeholder="输入金额">
-                <el-select v-model.trim="maskForm.kitGroupPurchaseType"
-                           style="width: 80px !important;"
-                           @change="onKitGroupChnage"
-                           slot="prepend">
-                  <el-option label="免费"
-                             value="FREE"></el-option>
-                  <el-option label="团购"
-                             value="GROUP"></el-option>
-                  <el-option label="租赁"
-                             value="LEASE"></el-option>
-                </el-select>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-form-item>
-        <el-form-item label="辅件">
-          <el-col :span="11"
-                  style="width: auto;">
-            <el-form-item>
-              <el-select filterable
-                         clearable
-                         multiple
-                         placeholder="选择辅件"
-                         v-model.trim="maskForm.instrGoodsIdList">
-                <el-option v-for="(item, index) in ACCESSORIESLIST"
-                           :key="index"
-                           :value="item.value"
-                           :label="item.label"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="1">&nbsp;</el-col>
-          <el-col :span="11">
-            <el-form-item>
-              <el-input v-model.trim="maskForm.instrPrice"
-                        placeholder="输入金额"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-form-item> -->
-        <!-- <el-alert
-          title="缴费周期设置"
-          :closable="false"
-          class="alert"
-          type="info">
-        </el-alert>
-        <el-collapse :value="collapse" @change="collapseChange" >
-          <el-collapse-item
-            v-for="(item, index) in cycles"
-            :key="index"
-            :name="index"
-          >
-            <template slot="title">
-              <div class="collapse-title">
-                <span>缴费周期 {{index + 1}}</span>
-                <i v-if="cycles.length > 1" class="el-icon-circle-close" @click.stop="removeCycle(index)"></i>
-              </div>
-            </template>
-            <paymentCycle
-              ref="cycles"
-              className="cycleForm"
-              :form="item"
-            />
-          </el-collapse-item>
-        </el-collapse>
-        <el-button
-          icon="el-icon-circle-plus-outline"
-          plain
-          type="info"
-          size="small"
-          style="width: 100%;margin: 20px 0;"
-          @click="addCycle"
-        >新增缴费周期</el-button> -->
       </el-form>
       <div slot="footer"
            class="dialog-footer">
@@ -591,6 +428,17 @@
            v-if="codeUrl">{{ codeUrl }}</p>
       </div>
     </el-dialog>
+    <el-dialog
+      :visible.sync="timesVisible"
+      title="查看剩余可排课时长"
+      width="500px"
+    >
+      <times-view
+        :detail="timerDetail"
+        v-if="timesVisible"
+        @close="timesVisible = false"
+      />
+    </el-dialog>
     <el-dialog title="修改缴费周期"
                :before-close="closePayVisible"
                width="600px"
@@ -751,6 +599,7 @@ import { permission } from "@/utils/directivePage";
 import { addVisit } from "@/views/returnVisitManager/api.js"
 import cleanDeep from 'clean-deep'
 import createUserPay from './modals/create-user-pay.vue'
+import TimesView from './modals/course-time-detail'
 import paymentCycle from '../../resetTeaming/modals/payment-cycle'
 import Tooltip from '@/components/Tooltip/index'
 export default {
@@ -762,6 +611,8 @@ export default {
       quitVisible: false, // 退团信息确认的弹窗
       studentClassVisible: false, // 学员所在班级弹窗
       addStudentVisible: false, //新增学员弹窗
+      timesVisible: false,
+      timerDetail: null,
       teamid: '',
       topFrom: {
         // 顶部的禁选框集合
@@ -918,7 +769,8 @@ export default {
     pagination,
     paymentCycle,
     createUserPay,
-    Tooltip
+    Tooltip,
+    'times-view': TimesView
   },
   created () {
     // 判断是否带缓存参数
@@ -957,6 +809,10 @@ export default {
     this.init();
   },
   methods: {
+    viewTimer(row) {
+      this.timerDetail = row
+      this.timesVisible = true
+    },
     permission (str) {
       return permission(str);
     },