123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- import ColCropper from '@/components/col-cropper'
- import styles from './index.module.less'
- import request from '@/helpers/request'
- import { verifyNumberIntegerAndFloat } from '@/helpers/toolsValidate'
- import {
- ElButton,
- ElCol,
- ElForm,
- ElFormItem,
- ElImage,
- ElInput,
- ElOption,
- ElRadio,
- ElRadioGroup,
- ElRow,
- ElSelect,
- ElTabPane,
- ElTabs
- } from 'element-plus'
- import { defineComponent } from 'vue'
- import { createState } from '../createState'
- import { scrollAnimation } from '@/util/scroll'
- export default defineComponent({
- name: 'course-info',
- data() {
- return {
- url: '',
- calcRatePrice: 0 as any
- }
- },
- computed: {
- choiceSubjectIds() {
- // 选择的科目编号
- let ids = createState.lessonGroup.lessonSubject
- ? Number(createState.lessonGroup.lessonSubject)
- : null
- return ids ? [ids] : []
- },
- subjectList() {
- // 学科列表
- return createState.subjectList || []
- },
- lessonSubjectName() {
- // 选择的科目
- let tempStr = ''
- this.subjectList.forEach((item: any) => {
- if (this.choiceSubjectIds.includes(item.id)) {
- tempStr = item.name
- }
- })
- return tempStr
- }
- // calcRatePrice() {
- // // 计算手续费
- // let rate = createState.rate || 0
- // let price = createState.lessonGroup.lessonPrice || 0
- // return (price - (rate / 100) * price).toFixed(2)
- // }
- },
- async mounted() {
- try {
- if (createState.subjectList.length <= 0) {
- const res = await request.post('/api-website/teacher/querySubject')
- createState.subjectList = res.data || []
- }
- const rate = createState.rate || 0
- const price = createState.lessonGroup.lessonPrice || 0
- this.calcRatePrice = (price - (rate / 100) * price).toFixed(2)
- // setInterval(() => {
- // console.log(
- // createState.lessonGroup.lessonCoverTemplateUrl,
- // 'createState.lessonGroup.lessonCoverTemplateUrl'
- // )
- // }, 1000)
- } catch {
- //
- }
- },
- methods: {
- // onChoice(id: number) {
- // createState.lessonGroup.lessonSubject = id
- // this.subjectStatus = false
- // },
- onFormatter(e: any) {
- e.target.value = verifyNumberIntegerAndFloat(e.target.value)
- // 计算手续费
- let rate = createState.rate || 0
- let price = e.target.value || 0
- this.calcRatePrice = (price - (rate / 100) * price).toFixed(2)
- },
- tabChange(name: number) {
- ;(this as any).$refs.form.clearValidate('lessonCoverTemplateUrl')
- ;(this as any).$refs.form.clearValidate('lessonCoverUrl')
- createState.tabIndex = name
- },
- selectImg(val: string) {
- createState.lessonGroup.lessonCoverUrl = ''
- createState.lessonGroup.lessonCoverTemplateUrl = val
- }
- },
- render() {
- return (
- <div class={styles.courseInfo}>
- <ElForm
- class="px-6 pb-10 pt-7"
- size="large"
- ref="form"
- labelWidth={'120px'}
- labelPosition="left"
- model={createState.lessonGroup}
- >
- <ElFormItem
- label="课程名称"
- prop="lessonName"
- rules={[
- {
- required: true,
- message: '请输入课程名称'
- }
- ]}
- >
- <ElInput
- v-model={createState.lessonGroup.lessonName}
- maxlength={50}
- placeholder="请输入课程名称"
- />
- </ElFormItem>
- <ElFormItem
- label="课程声部"
- prop="lessonSubject"
- rules={[
- {
- required: true,
- message: '请选择课程声部'
- }
- ]}
- >
- <ElSelect
- class="w-full"
- v-model={createState.lessonGroup.lessonSubject}
- placeholder="请选择课程声部"
- >
- {createState.subjectList.map((item: any) => (
- <ElOption key={item.id} value={item.id} label={item.name} />
- ))}
- </ElSelect>
- </ElFormItem>
- <ElFormItem
- label="课程介绍"
- prop="lessonDesc"
- rules={[
- {
- required: true,
- message: '请输入课程介绍'
- }
- ]}
- >
- <ElInput
- placeholder="请输入课程介绍"
- v-model={createState.lessonGroup.lessonDesc}
- type="textarea"
- // @ts-ignore
- maxlength={200}
- rows={4}
- showWordLimit
- />
- </ElFormItem>
- <ElFormItem
- label="课程组售价"
- prop="lessonPrice"
- rules={[
- {
- required: true,
- message: '请输入课程组售价'
- }
- ]}
- >
- <ElInput
- placeholder="请输入课程组售价"
- v-model={createState.lessonGroup.lessonPrice}
- // @ts-ignore
- onKeyup={this.onFormatter}
- maxlength={9}
- v-slots={{
- suffix: () => <span class="text-base text-[#999]">元</span>
- }}
- />
- </ElFormItem>
- <div class="text-sm text-[#999] pl-[120px] leading-relaxed pb-2">
- <p>扣除手续费后您的课程预计收入为: </p>
- <p>
- 课程组总收入
- <span class="px-1 text-[#FF4E19]">{this.calcRatePrice}</span>元/人
- </p>
- <p>您的课程收入将在课程结束后结算到您的账户中 </p>
- </div>
- <ElFormItem label="课程封面" class="!mb-0" required>
- <ElTabs
- v-model={createState.tabIndex}
- class={styles.tabs}
- onTab-change={(name: any) => {
- this.tabChange(name)
- }}
- >
- <ElTabPane label="图片模板" name={1}></ElTabPane>
- <ElTabPane label="自定义模板" name={2}></ElTabPane>
- </ElTabs>
- </ElFormItem>
- {createState.tabIndex === 1 && (
- <ElFormItem
- prop="lessonCoverTemplateUrl"
- rules={[
- {
- required: true,
- message: '请上传课程封面'
- }
- ]}
- >
- <ElRadioGroup
- v-model={createState.lessonGroup.lessonCoverTemplateUrl}
- >
- <ElRow>
- {createState.templateList.map((item: any) => (
- <ElCol span={7} class="mb-3 cursor-pointer">
- <div
- class="w-[152px] relative rounded-xl overflow-hidden border"
- onClick={() => {
- this.selectImg(item)
- }}
- >
- <ElImage src={item} class="align-middle" />
- <ElRadio
- label={item}
- class="!absolute bottom-2 right-0 !h-auto z-10"
- >
- {''}
- </ElRadio>
- </div>
- </ElCol>
- ))}
- </ElRow>
- </ElRadioGroup>
- </ElFormItem>
- )}
- {createState.tabIndex === 2 && (
- <ElFormItem
- prop="lessonCoverUrl"
- rules={[
- {
- required: true,
- message: '请上传课程封面',
- trigger: 'change'
- }
- ]}
- >
- {/* <ColUpload
- v-model:modelValue={createState.lessonGroup.lessonCoverUrl}
- onChange={(value: any) => {
- createState.lessonGroup.lessonCoverTemplateUrl = ''
- }}
- /> */}
- <ColCropper
- modelValue={createState.lessonGroup.lessonCoverUrl}
- class={styles.imgCover}
- bucket="video-course"
- cropUploadSuccess={(data: any) => {
- createState.lessonGroup.lessonCoverUrl = data
- createState.lessonGroup.lessonCoverTemplateUrl = ''
- }}
- options={{
- // fixedNumber: [3, 2],
- // autoCropWidth: 300,
- // autoCropHeight: 200
- title: '课程封面',
- fixedNumber: [3.34, 2],
- autoCropWidth: 375,
- autoCropHeight: 212
- }}
- />
- </ElFormItem>
- )}
- </ElForm>
- <div class=" text-center pt-6 pb-7">
- <ElButton
- type="primary"
- round
- class="!w-44 !h-[48px] !text-base"
- onClick={() => {
- ;(this as any).$refs.form.validate(async (valid: boolean) => {
- if (valid) {
- createState.active = 1
- const currentY =
- document.documentElement.scrollTop ||
- document.body.scrollTop
- scrollAnimation(currentY, 0)
- } else {
- this.$nextTick(() => {
- let isError = document.getElementsByClassName('is-error')
- isError[0].scrollIntoView({
- block: 'center',
- behavior: 'smooth'
- })
- })
- return false
- }
- })
- }}
- >
- 下一步
- </ElButton>
- </div>
- </div>
- )
- }
- })
|