|  | @@ -1,53 +1,573 @@
 | 
	
		
			
				|  |  | -import OHeader from '@/components/o-header'
 | 
	
		
			
				|  |  | +import OPopup from '@/components/o-popup'
 | 
	
		
			
				|  |  |  import { sendType } from '@/constant'
 | 
	
		
			
				|  |  | -import { state } from '@/state'
 | 
	
		
			
				|  |  | -import { ActionSheet, Cell, CellGroup, Field, Uploader } from 'vant'
 | 
	
		
			
				|  |  | -import { defineComponent, reactive } from 'vue'
 | 
	
		
			
				|  |  | +import request from '@/helpers/request'
 | 
	
		
			
				|  |  | +import { getOssUploadUrl } from '@/state'
 | 
	
		
			
				|  |  | +import dayjs from 'dayjs'
 | 
	
		
			
				|  |  | +import umiRequest from 'umi-request'
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  ActionSheet,
 | 
	
		
			
				|  |  | +  Button,
 | 
	
		
			
				|  |  | +  Cell,
 | 
	
		
			
				|  |  | +  CellGroup,
 | 
	
		
			
				|  |  | +  closeToast,
 | 
	
		
			
				|  |  | +  DatePicker,
 | 
	
		
			
				|  |  | +  Field,
 | 
	
		
			
				|  |  | +  Icon,
 | 
	
		
			
				|  |  | +  Image,
 | 
	
		
			
				|  |  | +  PickerGroup,
 | 
	
		
			
				|  |  | +  Popup,
 | 
	
		
			
				|  |  | +  showLoadingToast,
 | 
	
		
			
				|  |  | +  showToast,
 | 
	
		
			
				|  |  | +  TimePicker,
 | 
	
		
			
				|  |  | +  Uploader
 | 
	
		
			
				|  |  | +} from 'vant'
 | 
	
		
			
				|  |  | +import { computed, defineComponent, getCurrentInstance, onMounted, reactive, watch } from 'vue'
 | 
	
		
			
				|  |  |  import styles from './index.module.less'
 | 
	
		
			
				|  |  | +import SelectSned from './select-sned'
 | 
	
		
			
				|  |  | +import iconStudent from '@common/images/icon_student.png'
 | 
	
		
			
				|  |  | +import iconTeacher from '@common/images/icon_teacher.png'
 | 
	
		
			
				|  |  | +import ODialog from '@/components/o-dialog'
 | 
	
		
			
				|  |  | +import OSticky from '@/components/o-sticky'
 | 
	
		
			
				|  |  | +import { useRoute, useRouter } from 'vue-router'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'create-message',
 | 
	
		
			
				|  |  |    setup() {
 | 
	
		
			
				|  |  | +    const router = useRouter()
 | 
	
		
			
				|  |  | +    const route = useRoute()
 | 
	
		
			
				|  |  |      const forms = reactive({
 | 
	
		
			
				|  |  | +      id: route.query.id,
 | 
	
		
			
				|  |  | +      type: 'ADD',
 | 
	
		
			
				|  |  | +      bucket: 'daya',
 | 
	
		
			
				|  |  |        sendStatus: false,
 | 
	
		
			
				|  |  |        sendType: null as any,
 | 
	
		
			
				|  |  | -      textMessage: null
 | 
	
		
			
				|  |  | +      textMessage: null,
 | 
	
		
			
				|  |  | +      sendTime: null as any,
 | 
	
		
			
				|  |  | +      sendTimeStatus: false,
 | 
	
		
			
				|  |  | +      maxDate: dayjs(new Date()).add(60, 'day').toDate(),
 | 
	
		
			
				|  |  | +      currentDate: [],
 | 
	
		
			
				|  |  | +      currentTime: [dayjs().format('HH'), dayjs().format('mm')],
 | 
	
		
			
				|  |  | +      attachments: [] as any, //群发消息附件
 | 
	
		
			
				|  |  | +      receives: [] as any, // 群发消息对象
 | 
	
		
			
				|  |  | +      selectStatus: false,
 | 
	
		
			
				|  |  | +      selectList: {} as any, // 选中发送的信息
 | 
	
		
			
				|  |  | +      delSelectItem: {} as any,
 | 
	
		
			
				|  |  | +      delStatus: false,
 | 
	
		
			
				|  |  | +      sureLoading: false,
 | 
	
		
			
				|  |  | +      updateLoading: false,
 | 
	
		
			
				|  |  | +      closeLoading: false
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const beforeRead = (file: any) => {
 | 
	
		
			
				|  |  | +      // console.log(file, 'beforeRead')
 | 
	
		
			
				|  |  | +      const isLt2M = file.size / 1024 / 1024 < 5
 | 
	
		
			
				|  |  | +      if (!isLt2M) {
 | 
	
		
			
				|  |  | +        showToast(`上传文件大小不能超过 5MB`)
 | 
	
		
			
				|  |  | +        return false
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return true
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const beforeDelete = (file: any, detail: { index: any }) => {
 | 
	
		
			
				|  |  | +      // this.dataModel.splice(detail.index, 1)
 | 
	
		
			
				|  |  | +      return true
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const afterRead = async (file: any, detail: any) => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        file.status = 'uploading'
 | 
	
		
			
				|  |  | +        file.message = '上传中...'
 | 
	
		
			
				|  |  | +        await uploadFile(file)
 | 
	
		
			
				|  |  | +      } catch (error) {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +        closeToast()
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const uploadFile = async (files: any) => {
 | 
	
		
			
				|  |  | +      // 上传文件
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        console.log(files, 'files')
 | 
	
		
			
				|  |  | +        const file = files.file
 | 
	
		
			
				|  |  | +        // 获取签名
 | 
	
		
			
				|  |  | +        const signUrl = '/api-school/open/getUploadSign'
 | 
	
		
			
				|  |  | +        const tempName = file.name || ''
 | 
	
		
			
				|  |  | +        const fileName = tempName && tempName.replace(/ /gi, '_')
 | 
	
		
			
				|  |  | +        const key = new Date().getTime() + fileName
 | 
	
		
			
				|  |  | +        showLoadingToast({
 | 
	
		
			
				|  |  | +          message: '加载中...',
 | 
	
		
			
				|  |  | +          forbidClick: true,
 | 
	
		
			
				|  |  | +          loadingType: 'spinner',
 | 
	
		
			
				|  |  | +          duration: 0
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        const res = await request.post(signUrl, {
 | 
	
		
			
				|  |  | +          hideLoading: true,
 | 
	
		
			
				|  |  | +          data: {
 | 
	
		
			
				|  |  | +            filename: fileName,
 | 
	
		
			
				|  |  | +            bucketName: forms.bucket,
 | 
	
		
			
				|  |  | +            postData: {
 | 
	
		
			
				|  |  | +              filename: fileName,
 | 
	
		
			
				|  |  | +              acl: 'public-read',
 | 
	
		
			
				|  |  | +              key: key,
 | 
	
		
			
				|  |  | +              unknowValueField: []
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        // setTimeout(() => {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // }, 100)
 | 
	
		
			
				|  |  | +        const obj = {
 | 
	
		
			
				|  |  | +          policy: res.data.policy,
 | 
	
		
			
				|  |  | +          signature: res.data.signature,
 | 
	
		
			
				|  |  | +          key: key,
 | 
	
		
			
				|  |  | +          KSSAccessKeyId: res.data.kssAccessKeyId,
 | 
	
		
			
				|  |  | +          acl: 'public-read',
 | 
	
		
			
				|  |  | +          name: fileName
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        const formData = new FormData()
 | 
	
		
			
				|  |  | +        for (const key in obj) {
 | 
	
		
			
				|  |  | +          formData.append(key, obj[key])
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        formData.append('file', file, fileName)
 | 
	
		
			
				|  |  | +        await umiRequest(getOssUploadUrl(forms.bucket), {
 | 
	
		
			
				|  |  | +          method: 'POST',
 | 
	
		
			
				|  |  | +          data: formData
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        // console.log(getOssUploadUrl(state.bucket) + key)
 | 
	
		
			
				|  |  | +        const uploadUrl = getOssUploadUrl(forms.bucket) + key
 | 
	
		
			
				|  |  | +        closeToast()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // state.fileList.push({ url: uploadUrl })
 | 
	
		
			
				|  |  | +        files.url = uploadUrl
 | 
	
		
			
				|  |  | +        files.status = 'done'
 | 
	
		
			
				|  |  | +      } catch (error) {
 | 
	
		
			
				|  |  | +        files.status = 'failed'
 | 
	
		
			
				|  |  | +        closeToast()
 | 
	
		
			
				|  |  | +        console.log(error, 'uploadFile')
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const onSubmit = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        if (!forms.sendType) {
 | 
	
		
			
				|  |  | +          showToast('请选择发送方式')
 | 
	
		
			
				|  |  | +          return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (!forms.textMessage) {
 | 
	
		
			
				|  |  | +          showToast('请输入发送内容')
 | 
	
		
			
				|  |  | +          return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (forms.receives.length <= 0) {
 | 
	
		
			
				|  |  | +          showToast('请选择发送对象')
 | 
	
		
			
				|  |  | +          return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        const tempAttachments: any = []
 | 
	
		
			
				|  |  | +        forms.attachments.forEach((item: any) => {
 | 
	
		
			
				|  |  | +          tempAttachments.push({
 | 
	
		
			
				|  |  | +            imgUrl: item.url,
 | 
	
		
			
				|  |  | +            imgMessage: item.url
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const tempReceives: any = []
 | 
	
		
			
				|  |  | +        forms.receives.forEach((item: any) => {
 | 
	
		
			
				|  |  | +          tempReceives.push({
 | 
	
		
			
				|  |  | +            receiveType: item.receiveType,
 | 
	
		
			
				|  |  | +            receiveId: item.receiveId
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const params: any = {
 | 
	
		
			
				|  |  | +          sendType: forms.sendType,
 | 
	
		
			
				|  |  | +          textMessage: forms.textMessage,
 | 
	
		
			
				|  |  | +          attachments: tempAttachments,
 | 
	
		
			
				|  |  | +          receives: tempReceives,
 | 
	
		
			
				|  |  | +          sendTime: forms.sendTime
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        console.log(params, 'params')
 | 
	
		
			
				|  |  | +        if (forms.id) {
 | 
	
		
			
				|  |  | +          forms.updateLoading = true
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          forms.sureLoading = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (forms.id) {
 | 
	
		
			
				|  |  | +          params.id = forms.id
 | 
	
		
			
				|  |  | +          await request.post('/api-school/imMessageBatchSending/update', {
 | 
	
		
			
				|  |  | +            data: params
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          await request.post('/api-school/imMessageBatchSending/save', {
 | 
	
		
			
				|  |  | +            data: params
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          showToast(forms.id ? '修改成功' : '添加成功')
 | 
	
		
			
				|  |  | +        }, 100)
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          router.replace('/mass-message')
 | 
	
		
			
				|  |  | +          forms.sureLoading = false
 | 
	
		
			
				|  |  | +          forms.updateLoading = false
 | 
	
		
			
				|  |  | +        }, 1100)
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +        forms.sureLoading = false
 | 
	
		
			
				|  |  | +        forms.updateLoading = false
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const getDetails = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        if (!forms.id) return
 | 
	
		
			
				|  |  | +        const { data } = await request.get('/api-school/imMessageBatchSending/detail/' + forms.id)
 | 
	
		
			
				|  |  | +        forms.sendType = data.sendType
 | 
	
		
			
				|  |  | +        forms.textMessage = data.textMessage
 | 
	
		
			
				|  |  | +        const receives = data.receives || []
 | 
	
		
			
				|  |  | +        const tempList: any = {
 | 
	
		
			
				|  |  | +          class: [] as any,
 | 
	
		
			
				|  |  | +          teacher: [] as any,
 | 
	
		
			
				|  |  | +          student: [] as any,
 | 
	
		
			
				|  |  | +          manage: [] as any
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        receives.forEach((item: any) => {
 | 
	
		
			
				|  |  | +          const temp = {
 | 
	
		
			
				|  |  | +            receiveType: item.receiveType,
 | 
	
		
			
				|  |  | +            receiveId: item.receiveId,
 | 
	
		
			
				|  |  | +            receiveName: item.receiveName,
 | 
	
		
			
				|  |  | +            avatar: item.avatar
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          forms.receives.push(temp)
 | 
	
		
			
				|  |  | +          const temp2 = {
 | 
	
		
			
				|  |  | +            id: item.receiveId,
 | 
	
		
			
				|  |  | +            value: item.receiveName,
 | 
	
		
			
				|  |  | +            avatar: item.avatar
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (item.receiveType === 'CLASS') {
 | 
	
		
			
				|  |  | +            tempList.class.push(temp2)
 | 
	
		
			
				|  |  | +          } else if (item.receiveType === 'STUDENT') {
 | 
	
		
			
				|  |  | +            tempList.student.push(temp2)
 | 
	
		
			
				|  |  | +          } else if (item.receiveType === 'TEACHER') {
 | 
	
		
			
				|  |  | +            tempList.teacher.push(temp2)
 | 
	
		
			
				|  |  | +          } else if (item.receiveType === 'SCHOOL') {
 | 
	
		
			
				|  |  | +            tempList.school.push(temp2)
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        forms.selectList = tempList
 | 
	
		
			
				|  |  | +        const attachments = data.attachments || []
 | 
	
		
			
				|  |  | +        const tempAtt: any = []
 | 
	
		
			
				|  |  | +        attachments.forEach((item: any) => {
 | 
	
		
			
				|  |  | +          tempAtt.push({
 | 
	
		
			
				|  |  | +            url: item.imgUrl || item.imgMessage
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        forms.attachments = tempAtt
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        forms.sendTime = data.sendTime
 | 
	
		
			
				|  |  | +        forms.type = data.sendStatus
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 判断是否是查看
 | 
	
		
			
				|  |  | +    const formDisabled = computed(() => forms.type === 'SEND')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const onClose = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        forms.closeLoading = true
 | 
	
		
			
				|  |  | +        await request.post('/api-school/imMessageBatchSending/remove', {
 | 
	
		
			
				|  |  | +          requestType: 'form',
 | 
	
		
			
				|  |  | +          data: {
 | 
	
		
			
				|  |  | +            id: forms.id
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          showToast('撤销成功')
 | 
	
		
			
				|  |  | +        }, 100)
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          router.replace('/mass-message')
 | 
	
		
			
				|  |  | +          forms.closeLoading = false
 | 
	
		
			
				|  |  | +        }, 1100)
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +        forms.closeLoading = false
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    onMounted(() => {
 | 
	
		
			
				|  |  | +      getDetails()
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      return () => (
 | 
	
		
			
				|  |  |        <div class={styles['create-message']}>
 | 
	
		
			
				|  |  | -        <OHeader />
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        {/* <OHeader /> */}
 | 
	
		
			
				|  |  |          <CellGroup inset class={styles.cellGroup}>
 | 
	
		
			
				|  |  | -          {/* <Cell title="发送方式" value={sendType[forms.sendType]} isLink /> */}
 | 
	
		
			
				|  |  |            <Field
 | 
	
		
			
				|  |  |              inputAlign="right"
 | 
	
		
			
				|  |  |              label="发送方式"
 | 
	
		
			
				|  |  |              modelValue={sendType[forms.sendType]}
 | 
	
		
			
				|  |  |              placeholder="请选择发送方式"
 | 
	
		
			
				|  |  | -            onClick={() => (forms.sendStatus = true)}
 | 
	
		
			
				|  |  | +            onClick={() => {
 | 
	
		
			
				|  |  | +              if (formDisabled.value) return
 | 
	
		
			
				|  |  | +              forms.sendStatus = true
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +            readonly
 | 
	
		
			
				|  |  | +            isLink={!formDisabled.value}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  | -          <Cell title="发送时间" value={''} isLink />
 | 
	
		
			
				|  |  | +          {/* 定时发送才会有时间 */}
 | 
	
		
			
				|  |  | +          {forms.sendType === 'SCHEDULED' && (
 | 
	
		
			
				|  |  | +            <Field
 | 
	
		
			
				|  |  | +              inputAlign="right"
 | 
	
		
			
				|  |  | +              label="发送时间"
 | 
	
		
			
				|  |  | +              modelValue={forms.sendTime}
 | 
	
		
			
				|  |  | +              placeholder="请选择发送时间"
 | 
	
		
			
				|  |  | +              onClick={() => {
 | 
	
		
			
				|  |  | +                if (formDisabled.value) return
 | 
	
		
			
				|  |  | +                forms.sendTimeStatus = true
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +              readonly
 | 
	
		
			
				|  |  | +              isLink
 | 
	
		
			
				|  |  | +            />
 | 
	
		
			
				|  |  | +          )}
 | 
	
		
			
				|  |  |            <Cell title="发送内容">
 | 
	
		
			
				|  |  |              {{
 | 
	
		
			
				|  |  |                label: () => (
 | 
	
		
			
				|  |  |                  <Field
 | 
	
		
			
				|  |  | -                  style={{ padding: '0' }}
 | 
	
		
			
				|  |  | +                  style={{ padding: '0', marginTop: '12px' }}
 | 
	
		
			
				|  |  |                    placeholder="请输入发送内容"
 | 
	
		
			
				|  |  |                    v-model={forms.textMessage}
 | 
	
		
			
				|  |  |                    type="textarea"
 | 
	
		
			
				|  |  |                    rows={3}
 | 
	
		
			
				|  |  | +                  showWordLimit
 | 
	
		
			
				|  |  | +                  maxlength={400}
 | 
	
		
			
				|  |  | +                  readonly={formDisabled.value}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                )
 | 
	
		
			
				|  |  |              }}
 | 
	
		
			
				|  |  |            </Cell>
 | 
	
		
			
				|  |  | -          <Cell title="上传辅件">
 | 
	
		
			
				|  |  | -            <Uploader />
 | 
	
		
			
				|  |  | +          <Cell title="上传附件">
 | 
	
		
			
				|  |  | +            {{
 | 
	
		
			
				|  |  | +              label: () => (
 | 
	
		
			
				|  |  | +                <Uploader
 | 
	
		
			
				|  |  | +                  style={{ marginTop: '12px' }}
 | 
	
		
			
				|  |  | +                  v-model={forms.attachments}
 | 
	
		
			
				|  |  | +                  afterRead={afterRead}
 | 
	
		
			
				|  |  | +                  beforeRead={beforeRead}
 | 
	
		
			
				|  |  | +                  beforeDelete={beforeDelete}
 | 
	
		
			
				|  |  | +                  accept="image/*"
 | 
	
		
			
				|  |  | +                  maxCount={9}
 | 
	
		
			
				|  |  | +                  disabled={formDisabled.value}
 | 
	
		
			
				|  |  | +                />
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  |            </Cell>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          <Cell title="发送对象"></Cell>
 | 
	
		
			
				|  |  | +          <Field
 | 
	
		
			
				|  |  | +            label="发送对象"
 | 
	
		
			
				|  |  | +            readonly
 | 
	
		
			
				|  |  | +            inputAlign="right"
 | 
	
		
			
				|  |  | +            placeholder={formDisabled.value ? '' : '请选择发送对象'}
 | 
	
		
			
				|  |  | +            isLink={!formDisabled.value}
 | 
	
		
			
				|  |  | +            border={false}
 | 
	
		
			
				|  |  | +            onClick={() => {
 | 
	
		
			
				|  |  | +              if (formDisabled.value) return
 | 
	
		
			
				|  |  | +              forms.selectStatus = true
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +          {forms.receives.map((item: any) => {
 | 
	
		
			
				|  |  | +            let img: any = iconStudent
 | 
	
		
			
				|  |  | +            if (item.receiveType === 'CLASS') {
 | 
	
		
			
				|  |  | +              img = ''
 | 
	
		
			
				|  |  | +            } else if (item.receiveType === 'STUDENT') {
 | 
	
		
			
				|  |  | +              img = iconStudent
 | 
	
		
			
				|  |  | +            } else if (item.receiveType === 'TEACHER' || item.receiveType === 'SCHOOL') {
 | 
	
		
			
				|  |  | +              img = iconTeacher
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            return (
 | 
	
		
			
				|  |  | +              <Cell class={styles.receives} title={item.receiveName} center border={false}>
 | 
	
		
			
				|  |  | +                {{
 | 
	
		
			
				|  |  | +                  icon: () => <Image class={styles.img} src={item.avatar || img} />,
 | 
	
		
			
				|  |  | +                  extra: () =>
 | 
	
		
			
				|  |  | +                    !formDisabled.value && (
 | 
	
		
			
				|  |  | +                      <Icon
 | 
	
		
			
				|  |  | +                        name="clear"
 | 
	
		
			
				|  |  | +                        color="#d7d7d7"
 | 
	
		
			
				|  |  | +                        size={20}
 | 
	
		
			
				|  |  | +                        onClick={() => {
 | 
	
		
			
				|  |  | +                          forms.delSelectItem = item
 | 
	
		
			
				|  |  | +                          forms.delStatus = true
 | 
	
		
			
				|  |  | +                        }}
 | 
	
		
			
				|  |  | +                      />
 | 
	
		
			
				|  |  | +                    )
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              </Cell>
 | 
	
		
			
				|  |  | +            )
 | 
	
		
			
				|  |  | +          })}
 | 
	
		
			
				|  |  |          </CellGroup>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        {/* <ActionSheet v-model:show={} /> */}
 | 
	
		
			
				|  |  | +        <OSticky position="bottom">
 | 
	
		
			
				|  |  | +          {forms.type === 'ADD' && (
 | 
	
		
			
				|  |  | +            <div class={'btnGroup'}>
 | 
	
		
			
				|  |  | +              <Button
 | 
	
		
			
				|  |  | +                round
 | 
	
		
			
				|  |  | +                block
 | 
	
		
			
				|  |  | +                type="primary"
 | 
	
		
			
				|  |  | +                size="large"
 | 
	
		
			
				|  |  | +                onClick={onSubmit}
 | 
	
		
			
				|  |  | +                disabled={forms.sureLoading}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                确认发送
 | 
	
		
			
				|  |  | +              </Button>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          )}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          {forms.type === 'WAIT' && (
 | 
	
		
			
				|  |  | +            <div class={['btnGroup', 'btnMore']}>
 | 
	
		
			
				|  |  | +              <Button
 | 
	
		
			
				|  |  | +                round
 | 
	
		
			
				|  |  | +                type="primary"
 | 
	
		
			
				|  |  | +                size="large"
 | 
	
		
			
				|  |  | +                onClick={onSubmit}
 | 
	
		
			
				|  |  | +                disabled={forms.updateLoading}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                修改
 | 
	
		
			
				|  |  | +              </Button>
 | 
	
		
			
				|  |  | +              <Button
 | 
	
		
			
				|  |  | +                round
 | 
	
		
			
				|  |  | +                color="#64A9FF"
 | 
	
		
			
				|  |  | +                size="large"
 | 
	
		
			
				|  |  | +                onClick={onClose}
 | 
	
		
			
				|  |  | +                disabled={forms.closeLoading}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                撤销
 | 
	
		
			
				|  |  | +              </Button>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          )}
 | 
	
		
			
				|  |  | +        </OSticky>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <ActionSheet
 | 
	
		
			
				|  |  | +          v-model:show={forms.sendStatus}
 | 
	
		
			
				|  |  | +          cancelText="取消"
 | 
	
		
			
				|  |  | +          actions={
 | 
	
		
			
				|  |  | +            [
 | 
	
		
			
				|  |  | +              { name: '即时发送', value: 'IMMEDIATELY' },
 | 
	
		
			
				|  |  | +              { name: '定时发送', value: 'SCHEDULED' }
 | 
	
		
			
				|  |  | +            ] as any
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          onSelect={(val: any) => {
 | 
	
		
			
				|  |  | +            console.log(val)
 | 
	
		
			
				|  |  | +            forms.sendType = val.value
 | 
	
		
			
				|  |  | +            forms.sendStatus = false
 | 
	
		
			
				|  |  | +          }}
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <Popup v-model:show={forms.sendTimeStatus} position="bottom" round>
 | 
	
		
			
				|  |  | +          <PickerGroup
 | 
	
		
			
				|  |  | +            title="发送时间"
 | 
	
		
			
				|  |  | +            tabs={['选择日期', '选择时间']}
 | 
	
		
			
				|  |  | +            onCancel={() => (forms.sendTimeStatus = false)}
 | 
	
		
			
				|  |  | +            onConfirm={(val: any) => {
 | 
	
		
			
				|  |  | +              const first = val[0].selectedValues.join('-')
 | 
	
		
			
				|  |  | +              const second = val[1].selectedValues.join(':')
 | 
	
		
			
				|  |  | +              forms.sendTime = dayjs(first + ' ' + second).format('YYYY-MM-DD HH:mm:ss')
 | 
	
		
			
				|  |  | +              forms.sendTimeStatus = false
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +            <DatePicker minDate={new Date()} maxDate={forms.maxDate} v-model={forms.currentDate} />
 | 
	
		
			
				|  |  | +            <TimePicker v-model={forms.currentTime} />
 | 
	
		
			
				|  |  | +          </PickerGroup>
 | 
	
		
			
				|  |  | +        </Popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <OPopup v-model:modelValue={forms.selectStatus}>
 | 
	
		
			
				|  |  | +          <SelectSned
 | 
	
		
			
				|  |  | +            v-model:selectList={forms.selectList}
 | 
	
		
			
				|  |  | +            onClose={() => (forms.selectStatus = false)}
 | 
	
		
			
				|  |  | +            onConfirm={(val: any) => {
 | 
	
		
			
				|  |  | +              const classList = val.class || []
 | 
	
		
			
				|  |  | +              const studentList = val.student || []
 | 
	
		
			
				|  |  | +              const teacherList = val.teacher || []
 | 
	
		
			
				|  |  | +              const manageList = val.manage || []
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              const tempList: any = []
 | 
	
		
			
				|  |  | +              classList.forEach((item: any) => {
 | 
	
		
			
				|  |  | +                tempList.push({
 | 
	
		
			
				|  |  | +                  receiveType: 'CLASS',
 | 
	
		
			
				|  |  | +                  receiveId: item.id,
 | 
	
		
			
				|  |  | +                  receiveName: item.value,
 | 
	
		
			
				|  |  | +                  avatar: item.avatar
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +              })
 | 
	
		
			
				|  |  | +              studentList.forEach((item: any) => {
 | 
	
		
			
				|  |  | +                tempList.push({
 | 
	
		
			
				|  |  | +                  receiveType: 'STUDENT',
 | 
	
		
			
				|  |  | +                  receiveId: item.id,
 | 
	
		
			
				|  |  | +                  receiveName: item.value,
 | 
	
		
			
				|  |  | +                  avatar: item.avatar
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +              })
 | 
	
		
			
				|  |  | +              teacherList.forEach((item: any) => {
 | 
	
		
			
				|  |  | +                tempList.push({
 | 
	
		
			
				|  |  | +                  receiveType: 'TEACHER',
 | 
	
		
			
				|  |  | +                  receiveId: item.id,
 | 
	
		
			
				|  |  | +                  receiveName: item.value,
 | 
	
		
			
				|  |  | +                  avatar: item.avatar
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +              })
 | 
	
		
			
				|  |  | +              manageList.forEach((item: any) => {
 | 
	
		
			
				|  |  | +                tempList.push({
 | 
	
		
			
				|  |  | +                  receiveType: 'SCHOOL',
 | 
	
		
			
				|  |  | +                  receiveId: item.id,
 | 
	
		
			
				|  |  | +                  receiveName: item.value,
 | 
	
		
			
				|  |  | +                  avatar: item.avatar
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +              })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              forms.receives = tempList
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </OPopup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <ODialog
 | 
	
		
			
				|  |  | +          v-model:show={forms.delStatus}
 | 
	
		
			
				|  |  | +          showCancelButton
 | 
	
		
			
				|  |  | +          message="您是否删除该数据"
 | 
	
		
			
				|  |  | +          onConfirm={() => {
 | 
	
		
			
				|  |  | +            const selectList = forms.selectList
 | 
	
		
			
				|  |  | +            if (forms.delSelectItem.receiveType === 'CLASS') {
 | 
	
		
			
				|  |  | +              const tempClass = selectList.class || []
 | 
	
		
			
				|  |  | +              const sIndex = tempClass.findIndex(
 | 
	
		
			
				|  |  | +                (item: any) => item.id === forms.delSelectItem.receiveId
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +              tempClass.splice(sIndex, 1)
 | 
	
		
			
				|  |  | +            } else if (forms.delSelectItem.receiveType === 'SCHOOL') {
 | 
	
		
			
				|  |  | +              const tempSchool = selectList.school || []
 | 
	
		
			
				|  |  | +              const sIndex = tempSchool.findIndex(
 | 
	
		
			
				|  |  | +                (item: any) => item.id === forms.delSelectItem.receiveId
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +              tempSchool.splice(sIndex, 1)
 | 
	
		
			
				|  |  | +            } else if (forms.delSelectItem.receiveType === 'TEACHER') {
 | 
	
		
			
				|  |  | +              const tempTeacher = selectList.teacher || []
 | 
	
		
			
				|  |  | +              const sIndex = tempTeacher.findIndex(
 | 
	
		
			
				|  |  | +                (item: any) => item.id === forms.delSelectItem.receiveId
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +              tempTeacher.splice(sIndex, 1)
 | 
	
		
			
				|  |  | +            } else if (forms.delSelectItem.receiveType === 'STUDENT') {
 | 
	
		
			
				|  |  | +              const tempStudent = selectList.student || []
 | 
	
		
			
				|  |  | +              const sIndex = tempStudent.findIndex(
 | 
	
		
			
				|  |  | +                (item: any) => item.id === forms.delSelectItem.receiveId
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +              tempStudent.splice(sIndex, 1)
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            forms.selectList = selectList
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            const index = forms.receives.findIndex(
 | 
	
		
			
				|  |  | +              (item: any) => item.receiveId === forms.delSelectItem.receiveId
 | 
	
		
			
				|  |  | +            )
 | 
	
		
			
				|  |  | +            forms.receives.splice(index, 1)
 | 
	
		
			
				|  |  | +          }}
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |      )
 | 
	
		
			
				|  |  |    }
 |