| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- <template>
- <div class="teamCourseList">
- <p class="coreTitle">
- 管乐AI学练宝
- <el-form-item
- label="是否展示"
- prop="isShowMemberForPay"
- v-if="allCourseCurrentPrice == 0"
- class="titleFormItem"
- >
- <el-select
- style="width: 100% !important"
- v-model="form.isShowMemberForPay"
- placeholder="请选择是否展示学练宝费用"
- size="mini"
- >
- <el-option label="是" :value="true"> </el-option>
- <el-option label="否" :value="false"> </el-option>
- </el-select>
- </el-form-item>
- <el-button
- icon="el-icon-plus"
- size="mini"
- plain
- class="addBtn"
- @click="$listeners.create"
- v-if="!isDisabled"
- >新增学练宝</el-button
- >
- </p>
- <el-table
- class="courseTable"
- :data="form.memberList"
- style="width: 100% !important; background: #f9f9f9"
- :header-cell-style="{ background: '#F9F9F9', color: '#444' }"
- >
- <el-table-column
- width="170px"
- label="学练宝版本"
- prop="memberRankSettingId"
- key="memberRankSettingId"
- >
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.memberRankSettingId'"
- :rules="{
- required: true,
- message: '请选择学练宝版本',
- trigger: 'change'
- }"
- >
- <!-- <el-select
- style="width: 90% !important"
- v-model="form.memberList[scope.$index].memberRankSettingId"
- placeholder="学练宝版本"
- >
- <el-option
- :value="item.id"
- :label="item.name"
- v-for="item in memberRankList"
- :key="item.id"
- ></el-option>
- </el-select> -->
- <el-cascader
- filterable
- style="width: 90% !important"
- v-model="form.memberList[scope.$index].memberRankSettingId"
- clearable
- placeholder="请选择学练宝版本"
- :options="memberRankList"
- :props="{ value: 'id', label: 'name' }"
- @change="(val) => changeMember(val, scope.$index)"
- @visible-change="(value) => onVisibleChange(value, form.memberList[scope.$index].memberRankSettingId)"
- ></el-cascader>
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column
- label="是否必选"
- prop="optionalFlag"
- key="optionalFlag"
- width="170px"
- >
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.optionalFlag'"
- :rules="{
- required: true,
- message: '请选择是否必选',
- trigger: 'change'
- }"
- >
- <el-select
- style="width: 90% !important"
- v-model="form.memberList[scope.$index].optionalFlag"
- placeholder="是否必选"
- :disabled="!(form.memberList[scope.$index].memberRankSettingId && form.memberList[scope.$index].memberRankSettingId.length > 0)"
- clearable
- >
- <el-option
- v-for="(item, index) in boolOptionsOptions"
- :key="index"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column
- label="自动激活"
- prop="autoActivationFlag"
- key="autoActivationFlag"
- width="170px"
- >
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.autoActivationFlag'"
- :rules="{
- required: true,
- message: '请选择是否自动激活',
- trigger: 'change'
- }"
- >
- <el-select
- style="width: 90% !important"
- v-model="form.memberList[scope.$index].autoActivationFlag"
- placeholder="请选择是否自动激活"
- :disabled="!(form.memberList[scope.$index].memberRankSettingId && form.memberList[scope.$index].memberRankSettingId.length > 0) || !(form.memberList[scope.$index].memberRankSettingId && showAutoActivationFlag[form.memberList[scope.$index].memberRankSettingId[form.memberList[scope.$index].memberRankSettingId.length - 1]])"
- clearable
- >
- <el-option
- v-for="(item, index) in boolOptionsOptions"
- :key="index"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column label="会员周期" prop="num" key="num" width="170px">
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.num'"
- :rules="[
- {
- required: true,
- message: '请选择会员周期',
- trigger: 'blur'
- }
- ]"
- >
- <el-input-number
- style="width: 90% !important"
- class="number-input"
- v-model="form.memberList[scope.$index].num"
- :controls="false"
- :precision="0"
- :min="1"
- @change="
- changeMemberperiodEnum(form.memberList[scope.$index].period, scope.$index)
- "
- placeholder="会员周期"
- :disabled="!(form.memberList[scope.$index].memberRankSettingId && form.memberList[scope.$index].memberRankSettingId.length > 0)"
- />
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column
- label="周期单位"
- prop="period"
- key="period"
- width="170px"
- >
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.period'"
- :rules="[
- {
- required: true,
- message: '请选择周期单位',
- trigger: 'blur'
- }
- ]"
- >
- <el-select
- v-model="form.memberList[scope.$index].period"
- style="width: 90% !important"
- @change="(val) => changeMemberperiodEnum(val, scope.$index)"
- :disabled="!(form.memberList[scope.$index].memberRankSettingId && form.memberList[scope.$index].memberRankSettingId.length > 0)"
- >
- <el-option
- :label="item.label"
- :value="item.value"
- v-for="item in memberEnumList"
- :key="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column
- label="售价(元)"
- prop="actualAmount"
- key="actualAmount"
- width="170px"
- v-if="form.calenderFeeType != 'TEACHER'"
- >
- <template slot="header">
- <p style="position: relative">
- 售价(元)
- <el-tooltip placement="top" popper-class="mTooltip">
- <div slot="content">学生实际缴费金额</div>
- <i
- class="el-icon-question"
- style="font-size: 18px; color: #f56c6c;top:2px;position: relative"
- ></i>
- </el-tooltip>
- </p>
- </template>
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.actualAmount'"
- :rules="[
- {
- required: true,
- message: '请输入售价',
- trigger: 'blur'
- },
- { validator: validateMember, index: scope.$index, trigger: 'blur' }
- ]"
- >
- <!-- $listeners.moneyChange -->
- <el-input-number
- style="width: 90% !important"
- class="number-input"
- v-model="form.memberList[scope.$index].actualAmount"
- :controls="false"
- :precision="0"
- :min="0"
- @change="change"
- :disabled="
- !form.memberList[scope.$index].period ||
- !form.memberList[scope.$index].num
- "
- placeholder="请输入售价"
- />
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column
- label="原价(元)"
- prop="originalAmount"
- key="originalAmount"
- width="170px"
- >
- <template slot-scope="scope">
- <el-form-item
- :prop="'memberList.' + scope.$index + '.originalAmount'"
- :rules="{
- required: true,
- message: '请输入原价',
- trigger: 'blur'
- }"
- >
- <!-- $listeners.moneyChange -->
- <el-input-number
- style="width: 90% !important"
- class="number-input"
- v-model="form.memberList[scope.$index].originalAmount"
- :controls="false"
- :precision="0"
- :min="0"
- @change="change"
- :disabled="true"
- placeholder="请输入原价"
- />
- </el-form-item>
- </template>
- </el-table-column>
- <el-table-column prop="close" key="close">
- <template slot-scope="scope">
- <div
- style="color: #fa6400; cursor: pointer; display: inline-block;"
- v-if=" form.memberList.length > 1"
- @click="() => onRemove(scope.$index)"
- >
- <i class="el-icon-error"></i>
- 删除
- </div>
- </template>
- </el-table-column>
- </el-table>
- </div>
- </template>
- <script>
- import { courseType, boolOptions } from "@/constant";
- import { objectToOptions } from "@/utils";
- import { memberEnumList } from "@/utils/searchArray";
- import { getMemberFee } from "../api";
- export default {
- props: [
- "form",
- "memberRankList",
- "organId",
- "rulesForm",
- "showAutoActivationFlag"
- ],
- data() {
- return {
- charges: [],
- clearable: false,
- isDisabled: false,
- courseUnitPriceSettingsByType: [],
- boolOptionsOptions: objectToOptions(boolOptions),
- memberEnumList,
- memberPrice: {},
- memberPriceList: [],
- getMemberFeeFlag: true
- };
- },
- async mounted() {
- this.form.memberList.forEach(async (item, index) => {
- await this.changeMember(item.memberRankSettingId, index)
- })
- },
- methods: {
- onVisibleChange(value, id) {
- if(!value) return
- const tempId = id ? id[id.length - 1] : null
- const ids = []
- this.form.memberList.forEach(item => {
- const itemId = item.memberRankSettingId ? item.memberRankSettingId[item.memberRankSettingId.length - 1] : null
- if(itemId !== tempId) {
- ids.push(itemId)
- }
- })
- // console.log(ids, 'ids')
- // console.log(value, id, 'teachList', this.memberRankList)
- this.memberRankList.forEach((item) => {
- if(ids.includes(item.id)) {
- item.disabled = true;
- } else {
- item.disabled = false;
- }
- if(item.children && item.children.length > 0) {
- item.children.forEach(child => {
- if(ids.includes(child.id)) {
- child.disabled = true;
- } else {
- child.disabled = false;
- }
- })
- }
- })
- this.$forceUpdate();
- },
- changeMemberperiodEnum(val, index) {
- // console.log(this.memberPriceList, val, index, "changeMemberperiodEnum");
- if (val == "DAY") {
- this.$set(
- this.form.memberList[index],
- "actualAmount",
- this.memberPriceList[index].groupPurchaseDayFee * this.form.memberList[index].num
- );
- this.$set(
- this.form.memberList[index],
- "originalAmount",
- this.memberPriceList[index].originalDayFee * this.form.memberList[index].num
- );
- }
- if (val == "MONTH") {
- this.$set(
- this.form.memberList[index],
- "actualAmount",
- this.memberPriceList[index].groupPurchaseMonthFee * this.form.memberList[index].num
- );
- this.$set(
- this.form.memberList[index],
- "originalAmount",
- this.memberPriceList[index].originalMonthFee * this.form.memberList[index].num
- );
- }
- if (val == "QUARTERLY") {
- this.$set(
- this.form.memberList[index],
- "actualAmount",
- this.memberPriceList[index].groupPurchaseQuarterlyFee *
- this.form.memberList[index].num
- );
- this.$set(
- this.form.memberList[index],
- "originalAmount",
- this.memberPriceList[index].originalQuarterlyFee * this.form.memberList[index].num
- );
- }
- if (val == "YEAR_HALF") {
- this.$set(
- this.form.memberList[index],
- "actualAmount",
- this.memberPriceList[index].groupPurchaseHalfYearFee *
- this.form.memberList[index].num
- );
- this.$set(
- this.form.memberList[index],
- "originalAmount",
- this.memberPriceList[index].originalHalfYearFee * this.form.memberList[index].num
- );
- }
- if (val == "YEAR") {
- this.$set(
- this.form.memberList[index],
- "actualAmount",
- this.memberPriceList[index].groupPurchaseYearFee * this.form.memberList[index].num
- );
- this.$set(
- this.form.memberList[index],
- "originalAmount",
- this.memberPriceList[index].originalYearFee * this.form.memberList[index].num
- );
- }
- },
- async changeMember(val, index) {
- if (val && val.length > 0) {
- if (this.getMemberFeeFlag) {
- this.getMemberFeeFlag = false;
- try {
- const res = await getMemberFee({
- rankId: val[val.length - 1],
- organId: this.organId
- });
- this.memberPriceList[index] = res.data
- this.getMemberFeeFlag = true;
- if (!res.data) {
- this.$bus.$emit("showguide", ["memberList"]);
- return;
- }
- } catch (e) {
- console.log(e);
- this.getMemberFeeFlag = true;
- }
- }
- }
- },
- validateMember(rule, value, callback) {
- const one = Number(value);
- let min = 0;
- let max = 0;
- switch (this.form.memberList[rule.index]?.period) {
- case "MONTH": {
- min =
- Number(this.rulesForm.minMonthFee) * this.form.memberList[rule.index].num;
- max =
- Number(this.rulesForm.maxMonthFee) * this.form.memberList[rule.index].num;
- break;
- }
- case "QUARTERLY": {
- min =
- Number(this.rulesForm.minQuarterlyFee) *
- this.form.memberList[rule.index].num;
- max =
- Number(this.rulesForm.maxQuarterlyFee) *
- this.form.memberList[rule.index].num;
- // console.log(
- // this.form.memberList[rule.index]?.period,
- // min,
- // max,
- // this.rulesForm
- // );
- break;
- }
- case "YEAR_HALF": {
- min =
- Number(this.rulesForm.minHalfYearFee) * this.form.memberList[rule.index].num;
- max =
- Number(this.rulesForm.maxHalfYearFee) * this.form.memberList[rule.index].num;
- break;
- }
- case "YEAR": {
- min = Number(this.rulesForm.minYearFee) * this.form.memberList[rule.index].num;
- max = Number(this.rulesForm.maxYearFee) * this.form.memberList[rule.index].num;
- break;
- }
- }
- if (one >= min && one <= max) {
- return callback();
- }
- return callback(new Error(`定价应在${min}-${max}之间`));
- },
- onRemove(index) {
- this.memberPriceList.splice(index, 1)
- this.$forceUpdate();
- this.$listeners.remove && this.$listeners.remove(index)
- }
- },
- computed: {
- allCourseCurrentPrice() {
- let price = 0;
- this.form.memberList.forEach(element => {
- price += element.actualAmount;
- });
- if (price > 0) {
- this.form.isShowMemberForPay = true;
- }
- return price;
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- @import "~@/views/resetTeaming/modals/pay.scss";
- </style>
|