Browse Source

Update sporadicList.vue

lex-xin 2 years ago
parent
commit
d68cb1e3d0
1 changed files with 1068 additions and 1067 deletions
  1. 1068 1067
      src/views/sporadicManager/sporadicList.vue

+ 1068 - 1067
src/views/sporadicManager/sporadicList.vue

@@ -1,1067 +1,1068 @@
-<template>
-  <div class="m-container">
-    <h2>
-      <div class="squrt"></div>
-      零星管理
-    </h2>
-    <div class="m-core">
-      <!-- v-permission="'sporadicChargeInfo/add'" -->
-      <save-form
-        :inline="true"
-        :model="searchForm"
-        @submit="search"
-        @reset="onReSet"
-      >
-        <el-form-item>
-          <el-input
-            placeholder="标题或学生姓名"
-            clearable
-            v-model.trim="searchForm.search"
-          ></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            v-model.trim="searchForm.organId"
-            placeholder="请选择分部"
-            clearable
-            filterable
-          >
-            <el-option
-              v-for="(item, index) in selects.branchs"
-              :key="index"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            v-model.trim="searchForm.chargeType"
-            placeholder="请选择收费类型"
-            clearable
-          >
-            <el-option
-              v-for="item in orderType"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            v-model.trim="searchForm.openFlag"
-            placeholder="收费状态"
-            clearable
-          >
-            <el-option label="关闭" value="1"></el-option>
-            <el-option label="开启" value="0"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            v-model.trim="searchForm.type"
-            placeholder="请选择订单类型"
-            clearable
-          >
-            <el-option label="个人" value="personal"></el-option>
-            <el-option label="公用" value="common"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="danger" native-type="submit">搜索</el-button>
-          <el-button native-type="reset" type="primary">重置</el-button>
-          <el-button
-            @click="exportSporad"
-            v-permission="'export/sporadicChargeInfo'"
-            >导出</el-button
-          >
-        </el-form-item>
-      </save-form>
-      <el-button
-        v-permission="'sporadicChargeInfo/add'"
-        @click="newVisible"
-        type="primary"
-        style="margin-bottom: 20px"
-      >
-        新增公用收费
-      </el-button>
-      <el-button
-        v-permission="'sporadicChargeInfo/add'"
-        @click="newVisible1"
-        type="primary"
-        style="margin-bottom: 20px"
-      >
-        新增个人收费
-      </el-button>
-      <div class="tableWrap">
-        <el-table
-          :data="tableList"
-          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-        >
-          <el-table-column align="center" label="分部" prop="organName">
-            <template slot-scope="scope">
-              <div>
-                <copy-text>{{ scope.row.organName }}</copy-text>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="收费类型">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.chargeType | chargeTypeFilter }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="标题" prop="title">
-            <template slot-scope="scope">
-              <div>
-                <copy-text>{{ scope.row.title }}</copy-text>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="学生姓名" prop="userName">
-            <template slot-scope="scope">
-              <copy-text>{{ scope.row.userName }}</copy-text>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="收费状态">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.openFlag ? "关闭" : "开启" }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="金额" prop="amount">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.amount | moneyFormat }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="时间">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.createTime | formatTimer }}
-              </div>
-            </template>
-          </el-table-column>
-
-          <el-table-column align="center" label="订单类型">
-            <template slot-scope="scope">
-              {{ scope.row.userId ? "个人" : "公用" }}
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="创建人" prop="operatorName">
-          </el-table-column>
-          <el-table-column align="center" label="操作">
-            <template slot-scope="scope">
-              <div>
-                <el-button
-                  type="text"
-                  v-if="scope.row.chargeType == 12"
-                  key="update"
-                  v-permission="'sporadicChargeInfo/update'"
-                  @click="lookVisible(scope.row)"
-                  >修改</el-button
-                >
-                <el-button
-                  type="text"
-                  v-else
-                  key="update"
-                  v-permission="'sporadicChargeInfo/look'"
-                  @click="lookVisible(scope.row)"
-                  >查看</el-button
-                >
-
-                <el-button
-                  type="text"
-                  v-permission="'sporadicChargeInfo/delete'"
-                  @click="removeItem(scope.row)"
-                  >删除</el-button
-                >
-                <el-button
-                  type="text"
-                  v-if="scope.row.openFlag"
-                  v-permission="'sporadicChargeInfo/updateOpenFlag'"
-                  @click="setSporadic(scope.row)"
-                  >开启</el-button
-                >
-                <el-button
-                  type="text"
-                  v-else
-                  v-permission="'sporadicChargeInfo/updateOpenFlag'"
-                  @click="setSporadic(scope.row)"
-                  >关闭</el-button
-                >
-              </div>
-            </template>
-          </el-table-column>
-        </el-table>
-        <pagination
-          sync
-          :total.sync="pageInfo.total"
-          :page.sync="pageInfo.page"
-          :limit.sync="pageInfo.limit"
-          :page-sizes="pageInfo.page_size"
-          @pagination="getList"
-        />
-      </div>
-    </div>
-    <el-dialog
-      :title="title"
-      :visible.sync="zeroVisible"
-      @close="onFormClose('maskForm')"
-      width="650px"
-    >
-      <el-form
-        :model="maskForm"
-        :rules="maskRules"
-        label-width="110px"
-        label-position="right"
-        :inline="true"
-        ref="maskForm"
-      >
-        <el-form-item label="标题" prop="title">
-          <el-input
-            v-model.trim="maskForm.title"
-            maxlength="50"
-            :disabled="!isNew"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="收费类型" prop="type">
-          <el-select
-            v-model.trim="maskForm.type"
-            :disabled="!isNew"
-            clearable
-            filterable
-            style="width: 180px !important"
-          >
-            <el-option
-              v-for="item in isNew ? orderType1 : orderType"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="金额" prop="money">
-          <el-input
-            v-model.trim="maskForm.money"
-            type="number"
-            @mousewheel.native.prevent
-            :disabled="!isNew"
-          ></el-input>
-        </el-form-item>
-        <el-form-item
-          label="是否开启限制"
-          prop="openMaxTerm"
-          :rules="[
-            {
-              required: true,
-              message: '请选择是否开启目标金额',
-              trigger: 'change',
-            },
-          ]"
-          v-if="maskForm.type == 12"
-        >
-          <el-select v-model.trim="maskForm.openMaxTerm" clearable>
-            <el-option :value="1" label="是"></el-option>
-            <el-option :value="0" label="否"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="目标金额"
-          prop="maxAmount"
-          :rules="[{ required: true, validator: validMaxNum, trigger: 'blur' }]"
-          v-if="maskForm.type == 12"
-        >
-          <el-input
-            v-model.trim="maskForm.maxAmount"
-            type="number"
-            @mousewheel.native.prevent
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="减免金额" v-if="maskForm.type == 6" prop="money">
-          <el-input
-            v-model.trim="maskForm.subMoney"
-            type="number"
-            @mousewheel.native.prevent
-            :disabled="!isNew"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="分部" prop="organId">
-          <el-select
-            v-model.trim="maskForm.organId"
-            :disabled="!isNew"
-            clearable
-            @change="onMusicGroupChange"
-            filterable
-            style="width: 180px !important"
-          >
-            <el-option
-              v-for="(item, index) in selects.branchs"
-              :key="index"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="所属乐团"
-          v-if="maskForm.type != 12"
-          prop="musicGroupId"
-        >
-          <el-select
-            v-model.trim="maskForm.musicGroupId"
-            :disabled="!isNew || !maskForm.organId"
-            clearable
-            filterable
-            style="width: 180px !important"
-          >
-            <el-option
-              v-for="item in maskMusicList"
-              :key="item.musicGroupId"
-              :value="item.musicGroupId"
-              :label="item.musicGroupName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="查看链接" v-if="!isNew">
-          <el-input
-            style="width: 400px !important"
-            :disabled="!isNew"
-            v-model.trim="maskForm.code"
-          ></el-input>
-          <el-button type="danger" @click="qrcodeStatus = true"
-            >二维码</el-button
-          >
-        </el-form-item>
-        <el-form-item label="收费详情" prop="desc">
-          <el-input
-            type="textarea"
-            :disabled="!isNew"
-            v-model.trim="maskForm.desc"
-            style="width: 490px"
-            maxlength="300"
-            :autosize="{ minRows: 5 }"
-          ></el-input>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="zeroVisible = false">取 消</el-button>
-        <el-button type="primary" v-if="isNew" @click="addZero"
-          >确 定</el-button
-        >
-        <el-button v-if="!isNew" type="primary" @click="updateZero"
-          >确定</el-button
-        >
-      </span>
-    </el-dialog>
-
-    <el-dialog
-      :title="title1"
-      :visible.sync="zeroVisible1"
-      @close="onFormClose('maskForm1')"
-      width="650px"
-    >
-      <el-form
-        :model="maskForm1"
-        :rules="maskRules1"
-        label-width="100px"
-        label-position="right"
-        :inline="true"
-        ref="maskForm1"
-      >
-        <el-form-item label="标题" prop="title">
-          <el-input
-            v-model.trim="maskForm1.title"
-            maxlength="50"
-            :disabled="!isNew1"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="收费类型" prop="type">
-          <el-select
-            v-model.trim="maskForm1.type"
-            :disabled="!isNew1"
-            clearable
-            filterable
-            style="width: 180px !important"
-          >
-            <template v-for="item in isNew1 ? orderType1 : orderType">
-              <el-option
-                v-if="item.value != 12"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              ></el-option>
-            </template>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="学员编号" prop="studentId">
-          <el-input
-            v-model.trim="maskForm1.studentId"
-            @blur="onStudentChange"
-            type="number"
-            maxlength="10"
-            @mousewheel.native.prevent
-            :disabled="!isNew1"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="金额" prop="money">
-          <el-input
-            v-model.trim="maskForm1.money"
-            type="number"
-            @mousewheel.native.prevent
-            :disabled="!isNew1"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="学员姓名" prop="studentName">
-          <el-input
-            v-model.trim="maskForm1.studentName"
-            :disabled="true"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="所属乐团" prop="musicGroupId">
-          <el-select
-            v-model.trim="maskForm1.musicGroupId"
-            :disabled="!isNew1"
-            clearable
-            filterable
-            style="width: 180px !important"
-          >
-            <el-option
-              v-for="(item, index) in maskMusicList1"
-              :key="index"
-              :value="item.musicGroupId"
-              :label="item.musicGroupName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="查看链接" v-if="!isNew1">
-          <el-input
-            style="width: 400px !important"
-            :disabled="!isNew1"
-            v-model.trim="maskForm1.code"
-          ></el-input>
-          <el-button type="danger" @click="qrcodeStatus = true"
-            >二维码</el-button
-          >
-        </el-form-item>
-        <el-form-item label="收费详情" prop="desc">
-          <el-input
-            type="textarea"
-            :disabled="!isNew1"
-            v-model.trim="maskForm1.desc"
-            style="width: 490px"
-            maxlength="300"
-            :autosize="{ minRows: 5 }"
-          ></el-input>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="zeroVisible1 = false">取 消</el-button>
-        <el-button type="primary" v-if="isNew1" @click="addZero1"
-          >确 定</el-button
-        >
-        <el-button v-if="!isNew1" type="primary" @click="zeroVisible1 = false"
-          >确定</el-button
-        >
-      </span>
-    </el-dialog>
-    <el-dialog
-      :visible.sync="qrcodeStatus"
-      center
-      width="300px"
-      title="缴费链接"
-    >
-      <div class="right-code">
-        <!-- <h2 class="title">缴费链接</h2> -->
-        <vue-qr :text="qrCodeUrl" style="width: 100%" :margin="0"></vue-qr>
-
-        <!-- <div id="qrcode"
-             class="qrcode code"
-             ref="qrCodeUrl"></div> -->
-        <!-- <p class="code-url"
-           v-if="codeUrl2">{{ codeUrl2 }}</p> -->
-      </div>
-    </el-dialog>
-  </div>
-</template>
-<script>
-import { getAgreement } from "@/api/buildTeam";
-import pagination from "@/components/Pagination/index";
-import { vaildStudentUrl } from "@/utils/validate";
-import cleanDeep from "clean-deep";
-import {
-  addZero,
-  getZero,
-  updateZero,
-  removeZero,
-  getBasic,
-  updateOpenFlag,
-  queryOrganMusicInfos,
-  queryUserMusicInfos,
-} from "@/api/zeroManager";
-import axios from "axios";
-import qs from "qs";
-import { getToken, getTenantId } from "@/utils/auth";
-import load from "@/utils/loading";
-// import QRCode from 'qrcodejs2'
-import vueQr from "vue-qr";
-let validMaxNum = (rule, value, callback) => {
-  if ((value == "" && typeof value == "string") || value == null) {
-    callback(new Error("请输入缴费金额"));
-  } else if (value < 0) {
-    callback(new Error("输入缴费金额必须大于0"));
-  } else {
-    callback();
-  }
-};
-export default {
-  name: "sporadicList",
-  components: { pagination, vueQr },
-  data() {
-    return {
-      validMaxNum: validMaxNum,
-      zeroVisible: false,
-      qrCodeUrl: null,
-      searchForm: {
-        organId: null,
-        chargeType: null,
-        type: null,
-        search: null,
-        openFlag: null,
-      },
-      tableList: [],
-      organList: [],
-      orderType: [
-        { label: "考级", value: 1 },
-        { label: "声部更改", value: 2 },
-        { label: "乐器更换", value: 3 },
-        { label: "配件销售", value: 4 },
-        { label: "维修费", value: 5 },
-        { label: "福袋活动", value: 6 },
-        { label: "双十一活动", value: 12 },
-        { label: "上门费", value: 7 },
-        { label: "账户充值", value: 9 },
-        // { label: "乐保服务", value: 10 },
-        // { label: "网基课活动", value: 13 },
-        // { label: "团练宝购买", value: 15 },
-        { label: "其它", value: 11 },
-      ],
-      orderType1: [
-        { label: "考级", value: 1 },
-        // { label: "声部更改", value: 2 },
-        // { label: '乐器更换', value: 3 },
-        // { label: '配件销售', value: 4 },
-        // { label: '双十一活动', value: 12 },
-        { label: "上门费", value: 7 },
-        { label: "账户充值", value: 9 },
-        // { label: "乐保服务", value: 10 },
-        // { label: "网基课活动", value: 13 },
-        // { label: "团练宝购买", value: 15 },
-      ],
-      maskForm: {
-        organId: "",
-        type: "",
-        money: "",
-        desc: "",
-        title: "",
-        code: "",
-        musicGroupId: "",
-        maxAmount: null,
-        openMaxTerm: null,
-        subMoney: "",
-      },
-      maskMusicList: [],
-      maskRules: {
-        organId: [{ required: true, message: "请选择分部", trigger: "change" }],
-        // musicGroupId: [{ required: true, message: '请选择所属乐团', trigger: 'change' }],
-        type: [
-          { required: true, message: "请选择收费类型", trigger: "change" },
-        ],
-        money: [
-          { required: true, message: "请输入收费金额", trigger: "change" },
-        ],
-        title: [
-          { required: true, message: "请输入标题名称", trigger: "change" },
-        ],
-        desc: [{ required: true, message: "请输入收费详情" }],
-      },
-      pageInfo: {
-        // 分页规则
-        limit: 10, // 限制显示条数
-        page: 1, // 当前页
-        total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
-      },
-      isNew: false,
-      title: "新增收费",
-      qrcodeStatus: false,
-      qrcodes: true,
-      activeRow: null,
-      title1: "新增收费",
-      activeRow1: null,
-      zeroVisible1: false,
-      maskForm1: {
-        type: null,
-        money: null,
-        desc: null,
-        title: null,
-        code: null,
-        musicGroupId: null,
-        studentId: null,
-        studentName: null,
-      },
-      isNew1: false,
-      maskMusicList1: [],
-      maskRules1: {
-        organId: [{ required: true, message: "请选择分部", trigger: "change" }],
-        // musicGroupId: [{ required: true, message: '请选择所属乐团', trigger: 'change' }],
-        type: [
-          { required: true, message: "请选择收费类型", trigger: "change" },
-        ],
-        money: [
-          { required: true, message: "请输入收费金额", trigger: "change" },
-        ],
-        title: [
-          { required: true, message: "请输入标题名称", trigger: "change" },
-        ],
-        studentId: [
-          { required: true, message: "请输入学员编号", trigger: "blur" },
-        ],
-        desc: [{ required: true, message: "请输入收费详情" }],
-      },
-    };
-  },
-  mounted() {
-    // getEmployeeOrgan().then(res => {
-    //   if (res.code == 200) {
-    //     this.organList = res.data;
-    //   }
-    // })
-    this.$store.dispatch("setBranchs");
-    this.getList();
-    this.getAgreement ()
-  },
-  methods: {
-    search() {
-      this.pageInfo.page = 1;
-      this.getList();
-    },
-    onReSet() {
-      this.searchForm = {
-        organId: null,
-        chargeType: null,
-        type: null,
-        search: null,
-      };
-      this.search();
-    },
-    getList() {
-      let searchForm = this.searchForm;
-      let params = {
-        organId: searchForm.organId ? searchForm.organId : null,
-        chargeType: searchForm.chargeType ? searchForm.chargeType : null,
-        type: searchForm.type ? searchForm.type : null,
-        search: searchForm.search ? searchForm.search : null,
-        openFlag: searchForm.openFlag ? searchForm.openFlag * 1 : null,
-        page: this.pageInfo.page,
-        rows: this.pageInfo.limit,
-      };
-
-      getZero(params).then((res) => {
-        if (res.code == 200) {
-          this.tableList = res.data.rows;
-          this.pageInfo.total = res.data.total;
-        }
-      });
-    },
-    onFormClose(formName) {
-      // 关闭弹窗重置验证
-      if (formName == "maskForm") {
-        this.maskForm = {
-          organId: null,
-          musicGroupId: null,
-          type: null,
-          money: null,
-          maxAmount: null,
-          openMaxTerm: null,
-          desc: null,
-          title: null,
-          code: null,
-        };
-      } else if (formName == "maskForm1") {
-        this.maskForm1 = {
-          type: null,
-          musicGroupId: null,
-          money: null,
-          desc: null,
-          title: null,
-          code: null,
-          studentId: null,
-          studentName: null,
-        };
-      }
-      if (this.$refs[formName]) {
-        this.$refs[formName].resetFields();
-      }
-    },
-    newVisible() {
-      this.isNew = true;
-      this.zeroVisible = true;
-      this.title = "新增公用收费";
-    },
-    newVisible1() {
-      this.isNew1 = true;
-      this.zeroVisible1 = true;
-      this.title1 = "新增个人收费";
-    },
-    async getAgreement() {
-      try {
-        const res = await getAgreement();
-        if (!res.data) {
-          this.$bus.$emit("showguide", ["agreement"]);
-        }
-      } catch (e) {}
-    },
-    lookVisible(row) {
-      let maskForm = null;
-      if (row.userId) {
-        maskForm = this.maskForm1;
-        this.isNew1 = false;
-        this.zeroVisible1 = true;
-        this.title1 = "查看个人收费";
-        let url =
-          vaildStudentUrl() +
-          `/#/sporadicPay?id=${row.id}&userId=${row.userId}`;
-        this.qrCodeUrl = url;
-        maskForm.code = url;
-        maskForm.studentId = row.userId;
-        maskForm.studentName = row.userName;
-      } else {
-        maskForm = this.maskForm;
-        this.isNew = false;
-        this.zeroVisible = true;
-        this.title = "查看公用收费";
-        let url = vaildStudentUrl() + `/#/sporadicLogin?id=${row.id}`;
-        this.qrCodeUrl = url;
-        maskForm.code = url;
-      }
-      maskForm.type = parseInt(row.chargeType);
-      maskForm.id = row.id;
-      maskForm.desc = row.detail;
-      maskForm.title = row.title;
-      maskForm.organId = row.organId;
-      maskForm.money = row.amount;
-      maskForm.subMoney = row.discountAmount;
-      maskForm.maxAmount = row.maxAmount;
-      maskForm.openMaxTerm = row.openMaxTerm;
-      maskForm.musicGroupId = row.musicGroupId ? row.musicGroupId : null;
-      if (row.userId) {
-        queryUserMusicInfos({ userId: row.userId }).then((studentInfo) => {
-          if (studentInfo.code == 200) {
-            this.maskMusicList1 = studentInfo.data;
-          }
-        });
-      } else {
-        this.onMusicGroupChange(true);
-      }
-    },
-    onMusicGroupChange(status) {
-      let maskForm = this.maskForm;
-      if (!maskForm.organId) {
-        return;
-      }
-      if (!status) {
-        maskForm.musicGroupId = null; // 重置可能已经选中的乐团
-      }
-      queryOrganMusicInfos({ organId: maskForm.organId }).then((res) => {
-        if (res.code == 200) {
-          this.maskMusicList = res.data;
-        }
-      });
-    },
-    updateZero() {
-      let maskForm = this.maskForm;
-      if (maskForm.type != 12) {
-        this.zeroVisible = false;
-        return;
-      }
-      this.$refs["maskForm"].validate((item) => {
-        if (item) {
-          updateZero(
-            cleanDeep({
-              id: maskForm.id,
-              maxAmount: maskForm.maxAmount,
-              openMaxTerm: maskForm.openMaxTerm,
-            })
-          ).then((res) => {
-            if (res.code == 200) {
-              this.$message.success("更新成功");
-              this.zeroVisible = false;
-              this.getList();
-            }
-          });
-        }
-      });
-    },
-    addZero() {
-      this.$refs["maskForm"].validate((item) => {
-        if (item) {
-          let maskForm = this.maskForm;
-          let obj = {
-            chargeType: maskForm.type,
-            detail: maskForm.desc,
-            title: maskForm.title,
-            organId: maskForm.organId,
-            amount: maskForm.money,
-            musicGroupId: maskForm.musicGroupId,
-            discountAmount: maskForm.subMoney,
-          };
-
-          if (maskForm.type == 12) {
-            (obj.maxAmount = maskForm.maxAmount),
-              (obj.openMaxTerm = maskForm.openMaxTerm);
-          }
-          addZero(obj).then((res) => {
-            if (res.code == 200) {
-              this.$message.success("新增成功");
-              this.zeroVisible = false;
-              this.getList();
-            }
-          });
-        }
-      });
-    },
-    addZero1() {
-      this.$refs["maskForm1"].validate((item) => {
-        if (item) {
-          let maskForm1 = this.maskForm1;
-          if (!maskForm1.studentName) {
-            this.$message.error("学员信息不存在");
-            return;
-          }
-          let obj = {
-            chargeType: maskForm1.type,
-            detail: maskForm1.desc,
-            title: maskForm1.title,
-            musicGroupId: this.maskForm1.musicGroupId,
-            userId: maskForm1.studentId,
-            amount: maskForm1.money,
-          };
-          addZero(obj).then((res) => {
-            if (res.code == 200) {
-              this.$message.success("新增成功");
-              this.zeroVisible1 = false;
-              this.getList();
-            }
-          });
-        }
-      });
-    },
-    async onStudentChange() {
-      let studentId = this.maskForm1.studentId;
-      // 判断学生编号是否存在
-      if (!studentId) {
-        return;
-      }
-
-      if (studentId.length > 10) {
-        this.$message.error("学员编号不合法");
-        return;
-      }
-
-      await getBasic({ userId: studentId }).then((res) => {
-        if (res.code == 200) {
-          if (res.data) {
-            this.maskForm1.studentName = res.data.name;
-            queryUserMusicInfos({ userId: studentId }).then((studentInfo) => {
-              if (studentInfo.code == 200) {
-                this.maskMusicList1 = studentInfo.data;
-              }
-            });
-          } else {
-            this.maskForm1.studentName = null;
-          }
-        }
-      });
-    },
-    removeItem(row) {
-      this.$confirm("是否删除该收费", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          removeZero({ id: row.id }).then((res) => {
-            if (res.code == 200) {
-              this.$message.success("删除成功");
-              this.zeroVisible = false;
-              this.getList();
-            }
-          });
-        })
-        .catch(() => {});
-    },
-    setSporadic(row) {
-      // openFlag
-      let str = "";
-      let openFlag = "";
-      if (row.openFlag) {
-        // 关闭=>开启 1是关闭
-        openFlag = 0;
-        str = "开启";
-      } else {
-        // 开启=>关闭 0是开启
-        openFlag = 1;
-        str = "关闭";
-      }
-
-      this.$confirm(`是否${str}该收费`, "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          updateOpenFlag({ sporadicId: row.id, openFlag }).then((res) => {
-            if (res.code == 200) {
-              this.$message.success(`${str}成功`);
-              this.getList();
-            }
-          });
-        })
-        .catch(() => {});
-    },
-    exportSporad() {
-      let url = "/api-web/export/sporadicChargeInfo";
-      let data = this.searchForm;
-      const options = {
-        method: "get",
-        headers: {
-          Authorization: getToken(),
-          tenantId: getTenantId(),
-        },
-        params: data,
-        url,
-        responseType: "blob",
-      };
-      this.$confirm("您确定导出零星缴费列表", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          load.startLoading();
-          axios(options)
-            .then((res) => {
-              let blob = new Blob([res.data], {
-                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-                type: "application/vnd.ms-excel;charset=utf-8",
-                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-              });
-
-              let text = new Response(blob).text();
-              text.then((res) => {
-                // 判断是否报错
-                if (res.indexOf("code") != -1) {
-                  let json = JSON.parse(res);
-                  if (json.code == 403) {
-                    this.$message.error(`登录过期,请重新登录!`);
-                    setTimeout(() => {
-                      this.$store.dispatch("user/resetToken").then(() => {
-                        location.reload();
-                      });
-                    }, 1000);
-                    return;
-                  }
-                  this.$message.error(json.msg);
-                } else {
-                  let objectUrl = URL.createObjectURL(blob);
-                  let link = document.createElement("a");
-                  let nowTime = new Date();
-                  let ymd =
-                    nowTime.getFullYear() +
-                    "" +
-                    (nowTime.getMonth() + 1) +
-                    "" +
-                    nowTime.getDate();
-                  let fname = ymd + "零星缴费.xls"; //下载文件的名字
-                  link.href = objectUrl;
-                  link.setAttribute("download", fname);
-                  document.body.appendChild(link);
-                  link.click();
-                }
-              });
-              load.endLoading();
-            })
-            .catch((error) => {
-              this.$message.error("导出数据失败,请联系管理员");
-              load.endLoading();
-            });
-        })
-        .catch(() => {});
-    },
-  },
-  watch: {
-    zeroVisible(val) {
-      if (!val) {
-        this.maskForm = {
-          organId: "",
-          type: "",
-          money: "",
-          desc: "",
-          title: "",
-          maxAmount: null,
-          openMaxTerm: null,
-          code: "",
-        };
-        // this.$refs['maskForm'].resetFields()
-        // console.log(this.$refs['zeroForm'].resetFields)
-      }
-    },
-  },
-  filters: {
-    chargeTypeFilter(val) {
-      let template = {
-        1: "考级",
-        2: "声部更改",
-        3: "乐器更换",
-        4: "配件销售",
-        5: "维修费",
-        6: "福袋活动",
-        7: "上门费",
-        9: "账户充值",
-        10: "乐保服务",
-        11: "其它",
-        12: "双十一活动",
-        13: "网基课活动",
-        15: "团练宝购买",
-      };
-      return template[val];
-    },
-  },
-};
-</script>
-<style lang="scss" scoped>
-.right-code {
-  // width: 50%;
-  // float: left;
-  .title {
-    font-size: 18px;
-    text-align: center;
-    padding-bottom: 8px;
-  }
-}
-.newBand {
-  display: inline-block;
-}
-
-.el-input {
-  width: 180px !important;
-}
-/deep/.el-select {
-  width: auto !important;
-}
-</style>
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      零星管理
+    </h2>
+    <div class="m-core">
+      <!-- v-permission="'sporadicChargeInfo/add'" -->
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item>
+          <el-input
+            placeholder="标题或学生姓名"
+            clearable
+            v-model.trim="searchForm.search"
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.organId"
+            placeholder="请选择分部"
+            clearable
+            filterable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.chargeType"
+            placeholder="请选择收费类型"
+            clearable
+          >
+            <el-option
+              v-for="item in orderType"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.openFlag"
+            placeholder="收费状态"
+            clearable
+          >
+            <el-option label="关闭" value="1"></el-option>
+            <el-option label="开启" value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.type"
+            placeholder="请选择订单类型"
+            clearable
+          >
+            <el-option label="个人" value="personal"></el-option>
+            <el-option label="公用" value="common"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="danger" native-type="submit">搜索</el-button>
+          <el-button native-type="reset" type="primary">重置</el-button>
+          <el-button
+            @click="exportSporad"
+            v-permission="'export/sporadicChargeInfo'"
+            >导出</el-button
+          >
+        </el-form-item>
+      </save-form>
+      <el-button
+        v-permission="'sporadicChargeInfo/add'"
+        @click="newVisible"
+        type="primary"
+        style="margin-bottom: 20px"
+      >
+        新增公用收费
+      </el-button>
+      <el-button
+        v-permission="'sporadicChargeInfo/add'"
+        @click="newVisible1"
+        type="primary"
+        style="margin-bottom: 20px"
+      >
+        新增个人收费
+      </el-button>
+      <div class="tableWrap">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column align="center" label="分部" prop="organName">
+            <template slot-scope="scope">
+              <div>
+                <copy-text>{{ scope.row.organName }}</copy-text>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="收费类型">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.chargeType | chargeTypeFilter }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="标题" prop="title">
+            <template slot-scope="scope">
+              <div>
+                <copy-text>{{ scope.row.title }}</copy-text>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="学生姓名" prop="userName">
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.userName }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="收费状态">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.openFlag ? "关闭" : "开启" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="金额" prop="amount">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.amount | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="时间">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.createTime | formatTimer }}
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column align="center" label="订单类型">
+            <template slot-scope="scope">
+              {{ scope.row.userId ? "个人" : "公用" }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="创建人" prop="operatorName">
+          </el-table-column>
+          <el-table-column align="center" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button
+                  type="text"
+                  v-if="scope.row.chargeType == 12"
+                  key="update"
+                  v-permission="'sporadicChargeInfo/update'"
+                  @click="lookVisible(scope.row)"
+                  >修改</el-button
+                >
+                <el-button
+                  type="text"
+                  v-else
+                  key="update"
+                  v-permission="'sporadicChargeInfo/look'"
+                  @click="lookVisible(scope.row)"
+                  >查看</el-button
+                >
+
+                <el-button
+                  type="text"
+                  v-permission="'sporadicChargeInfo/delete'"
+                  @click="removeItem(scope.row)"
+                  >删除</el-button
+                >
+                <el-button
+                  type="text"
+                  v-if="scope.row.openFlag"
+                  v-permission="'sporadicChargeInfo/updateOpenFlag'"
+                  @click="setSporadic(scope.row)"
+                  >开启</el-button
+                >
+                <el-button
+                  type="text"
+                  v-else
+                  v-permission="'sporadicChargeInfo/updateOpenFlag'"
+                  @click="setSporadic(scope.row)"
+                  >关闭</el-button
+                >
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog
+      :title="title"
+      :visible.sync="zeroVisible"
+      @close="onFormClose('maskForm')"
+      width="650px"
+    >
+      <el-form
+        :model="maskForm"
+        :rules="maskRules"
+        label-width="110px"
+        label-position="right"
+        :inline="true"
+        ref="maskForm"
+      >
+        <el-form-item label="标题" prop="title">
+          <el-input
+            v-model.trim="maskForm.title"
+            maxlength="50"
+            :disabled="!isNew"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="收费类型" prop="type">
+          <el-select
+            v-model.trim="maskForm.type"
+            :disabled="!isNew"
+            clearable
+            filterable
+            style="width: 180px !important"
+          >
+            <el-option
+              v-for="item in isNew ? orderType1 : orderType"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="金额" prop="money">
+          <el-input
+            v-model.trim="maskForm.money"
+            type="number"
+            @mousewheel.native.prevent
+            :disabled="!isNew"
+          ></el-input>
+        </el-form-item>
+        <el-form-item
+          label="是否开启限制"
+          prop="openMaxTerm"
+          :rules="[
+            {
+              required: true,
+              message: '请选择是否开启目标金额',
+              trigger: 'change',
+            },
+          ]"
+          v-if="maskForm.type == 12"
+        >
+          <el-select v-model.trim="maskForm.openMaxTerm" clearable>
+            <el-option :value="1" label="是"></el-option>
+            <el-option :value="0" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="目标金额"
+          prop="maxAmount"
+          :rules="[{ required: true, validator: validMaxNum, trigger: 'blur' }]"
+          v-if="maskForm.type == 12"
+        >
+          <el-input
+            v-model.trim="maskForm.maxAmount"
+            type="number"
+            @mousewheel.native.prevent
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="减免金额" v-if="maskForm.type == 6" prop="money">
+          <el-input
+            v-model.trim="maskForm.subMoney"
+            type="number"
+            @mousewheel.native.prevent
+            :disabled="!isNew"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="分部" prop="organId">
+          <el-select
+            v-model.trim="maskForm.organId"
+            :disabled="!isNew"
+            clearable
+            @change="onMusicGroupChange"
+            filterable
+            style="width: 180px !important"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="所属乐团"
+          v-if="maskForm.type != 12"
+          prop="musicGroupId"
+        >
+          <el-select
+            v-model.trim="maskForm.musicGroupId"
+            :disabled="!isNew || !maskForm.organId"
+            clearable
+            filterable
+            style="width: 180px !important"
+          >
+            <el-option
+              v-for="item in maskMusicList"
+              :key="item.musicGroupId"
+              :value="item.musicGroupId"
+              :label="item.musicGroupName"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="查看链接" v-if="!isNew">
+          <el-input
+            style="width: 400px !important"
+            :disabled="!isNew"
+            v-model.trim="maskForm.code"
+          ></el-input>
+          <el-button type="danger" @click="qrcodeStatus = true"
+            >二维码</el-button
+          >
+        </el-form-item>
+        <el-form-item label="收费详情" prop="desc">
+          <el-input
+            type="textarea"
+            :disabled="!isNew"
+            v-model.trim="maskForm.desc"
+            style="width: 490px"
+            maxlength="300"
+            :autosize="{ minRows: 5 }"
+          ></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="zeroVisible = false">取 消</el-button>
+        <el-button type="primary" v-if="isNew" @click="addZero"
+          >确 定</el-button
+        >
+        <el-button v-if="!isNew" type="primary" @click="updateZero"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+
+    <el-dialog
+      :title="title1"
+      :visible.sync="zeroVisible1"
+      @close="onFormClose('maskForm1')"
+      width="650px"
+    >
+      <el-form
+        :model="maskForm1"
+        :rules="maskRules1"
+        label-width="100px"
+        label-position="right"
+        :inline="true"
+        ref="maskForm1"
+      >
+        <el-form-item label="标题" prop="title">
+          <el-input
+            v-model.trim="maskForm1.title"
+            maxlength="50"
+            :disabled="!isNew1"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="收费类型" prop="type">
+          <el-select
+            v-model.trim="maskForm1.type"
+            :disabled="!isNew1"
+            clearable
+            filterable
+            style="width: 180px !important"
+          >
+            <template v-for="item in isNew1 ? orderType1 : orderType">
+              <el-option
+                v-if="item.value != 12"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </template>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="学员编号" prop="studentId">
+          <el-input
+            v-model.trim="maskForm1.studentId"
+            @blur="onStudentChange"
+            type="number"
+            maxlength="10"
+            @mousewheel.native.prevent
+            :disabled="!isNew1"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="金额" prop="money">
+          <el-input
+            v-model.trim="maskForm1.money"
+            type="number"
+            @mousewheel.native.prevent
+            :disabled="!isNew1"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="学员姓名" prop="studentName">
+          <el-input
+            v-model.trim="maskForm1.studentName"
+            :disabled="true"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="所属乐团" prop="musicGroupId">
+          <el-select
+            v-model.trim="maskForm1.musicGroupId"
+            :disabled="!isNew1"
+            clearable
+            filterable
+            style="width: 180px !important"
+          >
+            <el-option
+              v-for="(item, index) in maskMusicList1"
+              :key="index"
+              :value="item.musicGroupId"
+              :label="item.musicGroupName"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="查看链接" v-if="!isNew1">
+          <el-input
+            style="width: 400px !important"
+            :disabled="!isNew1"
+            v-model.trim="maskForm1.code"
+          ></el-input>
+          <el-button type="danger" @click="qrcodeStatus = true"
+            >二维码</el-button
+          >
+        </el-form-item>
+        <el-form-item label="收费详情" prop="desc">
+          <el-input
+            type="textarea"
+            :disabled="!isNew1"
+            v-model.trim="maskForm1.desc"
+            style="width: 490px"
+            maxlength="300"
+            :autosize="{ minRows: 5 }"
+          ></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="zeroVisible1 = false">取 消</el-button>
+        <el-button type="primary" v-if="isNew1" @click="addZero1"
+          >确 定</el-button
+        >
+        <el-button v-if="!isNew1" type="primary" @click="zeroVisible1 = false"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="qrcodeStatus"
+      center
+      width="300px"
+      title="缴费链接"
+    >
+      <div class="right-code">
+        <!-- <h2 class="title">缴费链接</h2> -->
+        <vue-qr :text="qrCodeUrl" style="width: 100%" :margin="0"></vue-qr>
+
+        <!-- <div id="qrcode"
+             class="qrcode code"
+             ref="qrCodeUrl"></div> -->
+        <!-- <p class="code-url"
+           v-if="codeUrl2">{{ codeUrl2 }}</p> -->
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { getAgreement } from "@/api/buildTeam";
+import pagination from "@/components/Pagination/index";
+import { vaildStudentUrl } from "@/utils/validate";
+import cleanDeep from "clean-deep";
+import {
+  addZero,
+  getZero,
+  updateZero,
+  removeZero,
+  getBasic,
+  updateOpenFlag,
+  queryOrganMusicInfos,
+  queryUserMusicInfos,
+} from "@/api/zeroManager";
+import axios from "axios";
+import qs from "qs";
+import { getToken, getTenantId } from "@/utils/auth";
+import load from "@/utils/loading";
+// import QRCode from 'qrcodejs2'
+import vueQr from "vue-qr";
+let validMaxNum = (rule, value, callback) => {
+  if ((value == "" && typeof value == "string") || value == null) {
+    callback(new Error("请输入缴费金额"));
+  } else if (value < 0) {
+    callback(new Error("输入缴费金额必须大于0"));
+  } else {
+    callback();
+  }
+};
+export default {
+  name: "sporadicList",
+  components: { pagination, vueQr },
+  data() {
+    return {
+      validMaxNum: validMaxNum,
+      zeroVisible: false,
+      qrCodeUrl: null,
+      searchForm: {
+        organId: null,
+        chargeType: null,
+        type: null,
+        search: null,
+        openFlag: null,
+      },
+      tableList: [],
+      organList: [],
+      orderType: [
+        { label: "考级", value: 1 },
+        { label: "声部更改", value: 2 },
+        { label: "乐器更换", value: 3 },
+        { label: "配件销售", value: 4 },
+        { label: "维修费", value: 5 },
+        { label: "福袋活动", value: 6 },
+        { label: "双十一活动", value: 12 },
+        { label: "上门费", value: 7 },
+        { label: "账户充值", value: 9 },
+        // { label: "乐保服务", value: 10 },
+        // { label: "网基课活动", value: 13 },
+        // { label: "团练宝购买", value: 15 },
+        { label: "其它", value: 11 },
+      ],
+      orderType1: [
+        { label: "考级", value: 1 },
+        // { label: "声部更改", value: 2 },
+        // { label: '乐器更换', value: 3 },
+        // { label: '配件销售', value: 4 },
+        // { label: '双十一活动', value: 12 },
+        { label: "上门费", value: 7 },
+        { label: "账户充值", value: 9 },
+        { label: "其它", value: 11 },
+        // { label: "乐保服务", value: 10 },
+        // { label: "网基课活动", value: 13 },
+        // { label: "团练宝购买", value: 15 },
+      ],
+      maskForm: {
+        organId: "",
+        type: "",
+        money: "",
+        desc: "",
+        title: "",
+        code: "",
+        musicGroupId: "",
+        maxAmount: null,
+        openMaxTerm: null,
+        subMoney: "",
+      },
+      maskMusicList: [],
+      maskRules: {
+        organId: [{ required: true, message: "请选择分部", trigger: "change" }],
+        // musicGroupId: [{ required: true, message: '请选择所属乐团', trigger: 'change' }],
+        type: [
+          { required: true, message: "请选择收费类型", trigger: "change" },
+        ],
+        money: [
+          { required: true, message: "请输入收费金额", trigger: "change" },
+        ],
+        title: [
+          { required: true, message: "请输入标题名称", trigger: "change" },
+        ],
+        desc: [{ required: true, message: "请输入收费详情" }],
+      },
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      isNew: false,
+      title: "新增收费",
+      qrcodeStatus: false,
+      qrcodes: true,
+      activeRow: null,
+      title1: "新增收费",
+      activeRow1: null,
+      zeroVisible1: false,
+      maskForm1: {
+        type: null,
+        money: null,
+        desc: null,
+        title: null,
+        code: null,
+        musicGroupId: null,
+        studentId: null,
+        studentName: null,
+      },
+      isNew1: false,
+      maskMusicList1: [],
+      maskRules1: {
+        organId: [{ required: true, message: "请选择分部", trigger: "change" }],
+        // musicGroupId: [{ required: true, message: '请选择所属乐团', trigger: 'change' }],
+        type: [
+          { required: true, message: "请选择收费类型", trigger: "change" },
+        ],
+        money: [
+          { required: true, message: "请输入收费金额", trigger: "change" },
+        ],
+        title: [
+          { required: true, message: "请输入标题名称", trigger: "change" },
+        ],
+        studentId: [
+          { required: true, message: "请输入学员编号", trigger: "blur" },
+        ],
+        desc: [{ required: true, message: "请输入收费详情" }],
+      },
+    };
+  },
+  mounted() {
+    // getEmployeeOrgan().then(res => {
+    //   if (res.code == 200) {
+    //     this.organList = res.data;
+    //   }
+    // })
+    this.$store.dispatch("setBranchs");
+    this.getList();
+    this.getAgreement ()
+  },
+  methods: {
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.searchForm = {
+        organId: null,
+        chargeType: null,
+        type: null,
+        search: null,
+      };
+      this.search();
+    },
+    getList() {
+      let searchForm = this.searchForm;
+      let params = {
+        organId: searchForm.organId ? searchForm.organId : null,
+        chargeType: searchForm.chargeType ? searchForm.chargeType : null,
+        type: searchForm.type ? searchForm.type : null,
+        search: searchForm.search ? searchForm.search : null,
+        openFlag: searchForm.openFlag ? searchForm.openFlag * 1 : null,
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit,
+      };
+
+      getZero(params).then((res) => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
+        }
+      });
+    },
+    onFormClose(formName) {
+      // 关闭弹窗重置验证
+      if (formName == "maskForm") {
+        this.maskForm = {
+          organId: null,
+          musicGroupId: null,
+          type: null,
+          money: null,
+          maxAmount: null,
+          openMaxTerm: null,
+          desc: null,
+          title: null,
+          code: null,
+        };
+      } else if (formName == "maskForm1") {
+        this.maskForm1 = {
+          type: null,
+          musicGroupId: null,
+          money: null,
+          desc: null,
+          title: null,
+          code: null,
+          studentId: null,
+          studentName: null,
+        };
+      }
+      if (this.$refs[formName]) {
+        this.$refs[formName].resetFields();
+      }
+    },
+    newVisible() {
+      this.isNew = true;
+      this.zeroVisible = true;
+      this.title = "新增公用收费";
+    },
+    newVisible1() {
+      this.isNew1 = true;
+      this.zeroVisible1 = true;
+      this.title1 = "新增个人收费";
+    },
+    async getAgreement() {
+      try {
+        const res = await getAgreement();
+        if (!res.data) {
+          this.$bus.$emit("showguide", ["agreement"]);
+        }
+      } catch (e) {}
+    },
+    lookVisible(row) {
+      let maskForm = null;
+      if (row.userId) {
+        maskForm = this.maskForm1;
+        this.isNew1 = false;
+        this.zeroVisible1 = true;
+        this.title1 = "查看个人收费";
+        let url =
+          vaildStudentUrl() +
+          `/#/sporadicPay?id=${row.id}&userId=${row.userId}`;
+        this.qrCodeUrl = url;
+        maskForm.code = url;
+        maskForm.studentId = row.userId;
+        maskForm.studentName = row.userName;
+      } else {
+        maskForm = this.maskForm;
+        this.isNew = false;
+        this.zeroVisible = true;
+        this.title = "查看公用收费";
+        let url = vaildStudentUrl() + `/#/sporadicLogin?id=${row.id}`;
+        this.qrCodeUrl = url;
+        maskForm.code = url;
+      }
+      maskForm.type = parseInt(row.chargeType);
+      maskForm.id = row.id;
+      maskForm.desc = row.detail;
+      maskForm.title = row.title;
+      maskForm.organId = row.organId;
+      maskForm.money = row.amount;
+      maskForm.subMoney = row.discountAmount;
+      maskForm.maxAmount = row.maxAmount;
+      maskForm.openMaxTerm = row.openMaxTerm;
+      maskForm.musicGroupId = row.musicGroupId ? row.musicGroupId : null;
+      if (row.userId) {
+        queryUserMusicInfos({ userId: row.userId }).then((studentInfo) => {
+          if (studentInfo.code == 200) {
+            this.maskMusicList1 = studentInfo.data;
+          }
+        });
+      } else {
+        this.onMusicGroupChange(true);
+      }
+    },
+    onMusicGroupChange(status) {
+      let maskForm = this.maskForm;
+      if (!maskForm.organId) {
+        return;
+      }
+      if (!status) {
+        maskForm.musicGroupId = null; // 重置可能已经选中的乐团
+      }
+      queryOrganMusicInfos({ organId: maskForm.organId }).then((res) => {
+        if (res.code == 200) {
+          this.maskMusicList = res.data;
+        }
+      });
+    },
+    updateZero() {
+      let maskForm = this.maskForm;
+      if (maskForm.type != 12) {
+        this.zeroVisible = false;
+        return;
+      }
+      this.$refs["maskForm"].validate((item) => {
+        if (item) {
+          updateZero(
+            cleanDeep({
+              id: maskForm.id,
+              maxAmount: maskForm.maxAmount,
+              openMaxTerm: maskForm.openMaxTerm,
+            })
+          ).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("更新成功");
+              this.zeroVisible = false;
+              this.getList();
+            }
+          });
+        }
+      });
+    },
+    addZero() {
+      this.$refs["maskForm"].validate((item) => {
+        if (item) {
+          let maskForm = this.maskForm;
+          let obj = {
+            chargeType: maskForm.type,
+            detail: maskForm.desc,
+            title: maskForm.title,
+            organId: maskForm.organId,
+            amount: maskForm.money,
+            musicGroupId: maskForm.musicGroupId,
+            discountAmount: maskForm.subMoney,
+          };
+
+          if (maskForm.type == 12) {
+            (obj.maxAmount = maskForm.maxAmount),
+              (obj.openMaxTerm = maskForm.openMaxTerm);
+          }
+          addZero(obj).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("新增成功");
+              this.zeroVisible = false;
+              this.getList();
+            }
+          });
+        }
+      });
+    },
+    addZero1() {
+      this.$refs["maskForm1"].validate((item) => {
+        if (item) {
+          let maskForm1 = this.maskForm1;
+          if (!maskForm1.studentName) {
+            this.$message.error("学员信息不存在");
+            return;
+          }
+          let obj = {
+            chargeType: maskForm1.type,
+            detail: maskForm1.desc,
+            title: maskForm1.title,
+            musicGroupId: this.maskForm1.musicGroupId,
+            userId: maskForm1.studentId,
+            amount: maskForm1.money,
+          };
+          addZero(obj).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("新增成功");
+              this.zeroVisible1 = false;
+              this.getList();
+            }
+          });
+        }
+      });
+    },
+    async onStudentChange() {
+      let studentId = this.maskForm1.studentId;
+      // 判断学生编号是否存在
+      if (!studentId) {
+        return;
+      }
+
+      if (studentId.length > 10) {
+        this.$message.error("学员编号不合法");
+        return;
+      }
+
+      await getBasic({ userId: studentId }).then((res) => {
+        if (res.code == 200) {
+          if (res.data) {
+            this.maskForm1.studentName = res.data.name;
+            queryUserMusicInfos({ userId: studentId }).then((studentInfo) => {
+              if (studentInfo.code == 200) {
+                this.maskMusicList1 = studentInfo.data;
+              }
+            });
+          } else {
+            this.maskForm1.studentName = null;
+          }
+        }
+      });
+    },
+    removeItem(row) {
+      this.$confirm("是否删除该收费", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          removeZero({ id: row.id }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.zeroVisible = false;
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    setSporadic(row) {
+      // openFlag
+      let str = "";
+      let openFlag = "";
+      if (row.openFlag) {
+        // 关闭=>开启 1是关闭
+        openFlag = 0;
+        str = "开启";
+      } else {
+        // 开启=>关闭 0是开启
+        openFlag = 1;
+        str = "关闭";
+      }
+
+      this.$confirm(`是否${str}该收费`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          updateOpenFlag({ sporadicId: row.id, openFlag }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success(`${str}成功`);
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    exportSporad() {
+      let url = "/api-web/export/sporadicChargeInfo";
+      let data = this.searchForm;
+      const options = {
+        method: "get",
+        headers: {
+          Authorization: getToken(),
+          tenantId: getTenantId(),
+        },
+        params: data,
+        url,
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出零星缴费列表", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
+
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  if (json.code == 403) {
+                    this.$message.error(`登录过期,请重新登录!`);
+                    setTimeout(() => {
+                      this.$store.dispatch("user/resetToken").then(() => {
+                        location.reload();
+                      });
+                    }, 1000);
+                    return;
+                  }
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate();
+                  let fname = ymd + "零星缴费.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
+        })
+        .catch(() => {});
+    },
+  },
+  watch: {
+    zeroVisible(val) {
+      if (!val) {
+        this.maskForm = {
+          organId: "",
+          type: "",
+          money: "",
+          desc: "",
+          title: "",
+          maxAmount: null,
+          openMaxTerm: null,
+          code: "",
+        };
+        // this.$refs['maskForm'].resetFields()
+        // console.log(this.$refs['zeroForm'].resetFields)
+      }
+    },
+  },
+  filters: {
+    chargeTypeFilter(val) {
+      let template = {
+        1: "考级",
+        2: "声部更改",
+        3: "乐器更换",
+        4: "配件销售",
+        5: "维修费",
+        6: "福袋活动",
+        7: "上门费",
+        9: "账户充值",
+        10: "乐保服务",
+        11: "其它",
+        12: "双十一活动",
+        13: "网基课活动",
+        15: "团练宝购买",
+      };
+      return template[val];
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.right-code {
+  // width: 50%;
+  // float: left;
+  .title {
+    font-size: 18px;
+    text-align: center;
+    padding-bottom: 8px;
+  }
+}
+.newBand {
+  display: inline-block;
+}
+
+.el-input {
+  width: 180px !important;
+}
+/deep/.el-select {
+  width: auto !important;
+}
+</style>