|  | @@ -8,8 +8,10 @@ import {
 | 
	
		
			
				|  |  |    Field,
 | 
	
		
			
				|  |  |    Icon,
 | 
	
		
			
				|  |  |    Image,
 | 
	
		
			
				|  |  | -  showConfirmDialog
 | 
	
		
			
				|  |  | +  showConfirmDialog,
 | 
	
		
			
				|  |  | +  showToast
 | 
	
		
			
				|  |  |  } from 'vant';
 | 
	
		
			
				|  |  | +import { postMessage } from '@/helpers/native-message';
 | 
	
		
			
				|  |  |  import MUploader from '@/components/m-uploader';
 | 
	
		
			
				|  |  |  import MPopup from '@/components/m-popup';
 | 
	
		
			
				|  |  |  import SelectSend from './select-send';
 | 
	
	
		
			
				|  | @@ -19,31 +21,100 @@ import iconContent from './images/icon-content.png';
 | 
	
		
			
				|  |  |  import iconFile from './images/icon-file.png';
 | 
	
		
			
				|  |  |  import iconUsers from './images/icon-users.png';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import badge1 from './images/badge-1.png';
 | 
	
		
			
				|  |  | -import class1 from './images/1.png';
 | 
	
		
			
				|  |  | +// import badge1 from './images/badge-1.png';
 | 
	
		
			
				|  |  | +// import class1 from './images/1.png';
 | 
	
		
			
				|  |  |  import MSticky from '@/components/m-sticky';
 | 
	
		
			
				|  |  | +import request from '@/helpers/request';
 | 
	
		
			
				|  |  | +import { useRouter } from 'vue-router';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'mass-message',
 | 
	
		
			
				|  |  |    setup() {
 | 
	
		
			
				|  |  | +    const router = useRouter();
 | 
	
		
			
				|  |  |      const forms = reactive({
 | 
	
		
			
				|  |  | -      textMessage: '',
 | 
	
		
			
				|  |  | -      attachments: [],
 | 
	
		
			
				|  |  | +      messageContent: '',
 | 
	
		
			
				|  |  | +      fileUrl: [] as any,
 | 
	
		
			
				|  |  |        selectStatus: false,
 | 
	
		
			
				|  |  | -      selectObject: []
 | 
	
		
			
				|  |  | +      receives: [] as any[],
 | 
	
		
			
				|  |  | +      selectObject: {} as any
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const onClose = () => {
 | 
	
		
			
				|  |  | +    const onClose = (item: any) => {
 | 
	
		
			
				|  |  |        showConfirmDialog({
 | 
	
		
			
				|  |  |          title: '提示',
 | 
	
		
			
				|  |  |          message: '您是否删除该数据'
 | 
	
		
			
				|  |  |        }).then(() => {
 | 
	
		
			
				|  |  |          //
 | 
	
		
			
				|  |  | +        const selectList = forms.selectObject;
 | 
	
		
			
				|  |  | +        if (item.receiveType === 'GROUPCHAT') {
 | 
	
		
			
				|  |  | +          const tempClass = selectList.groupChat || [];
 | 
	
		
			
				|  |  | +          const sIndex = tempClass.findIndex(
 | 
	
		
			
				|  |  | +            (child: any) => child.id === item.receiveId
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +          tempClass.splice(sIndex, 1);
 | 
	
		
			
				|  |  | +        } else if (item.receiveType === 'CONTACTS') {
 | 
	
		
			
				|  |  | +          const tempSchool = selectList.contcats || [];
 | 
	
		
			
				|  |  | +          const sIndex = tempSchool.findIndex(
 | 
	
		
			
				|  |  | +            (child: any) => child.id === item.receiveId
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +          tempSchool.splice(sIndex, 1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        forms.selectObject = selectList;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const index = forms.receives.findIndex(
 | 
	
		
			
				|  |  | +          (child: any) => child.receiveId === item.receiveId
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        forms.receives.splice(index, 1);
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const onSubmit = () => {
 | 
	
		
			
				|  |  | +    const checkForms = () => {
 | 
	
		
			
				|  |  | +      if (!forms.messageContent) {
 | 
	
		
			
				|  |  | +        showToast('请输入消息内容');
 | 
	
		
			
				|  |  | +        return false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      if (
 | 
	
		
			
				|  |  | +        forms.messageContent.length < 3 &&
 | 
	
		
			
				|  |  | +        forms.messageContent.length > 150
 | 
	
		
			
				|  |  | +      ) {
 | 
	
		
			
				|  |  | +        showToast('消息内容长度为3~150个字');
 | 
	
		
			
				|  |  | +        return false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      if (forms.receives.length <= 0) {
 | 
	
		
			
				|  |  | +        showToast('请选择发送对象');
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return true;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const onSubmit = async () => {
 | 
	
		
			
				|  |  |        console.log('onSubmit');
 | 
	
		
			
				|  |  | +      const targetIds = forms.selectObject.groupChat.map(
 | 
	
		
			
				|  |  | +        (item: any) => item.id
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      const userTargetIds = forms.selectObject.contacts.map(
 | 
	
		
			
				|  |  | +        (item: any) => item.id
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      console.log(targetIds, userTargetIds);
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        if (!checkForms()) return;
 | 
	
		
			
				|  |  | +        await request.post('/api-web/imSendGroupMessage/schoolSend', {
 | 
	
		
			
				|  |  | +          hideLoading: false,
 | 
	
		
			
				|  |  | +          data: {
 | 
	
		
			
				|  |  | +            messageContent: forms.messageContent,
 | 
	
		
			
				|  |  | +            messageType: 'IMG',
 | 
	
		
			
				|  |  | +            sendType: 'NOW',
 | 
	
		
			
				|  |  | +            fileUrl: forms.fileUrl.join(','),
 | 
	
		
			
				|  |  | +            targetIds: targetIds.join(','),
 | 
	
		
			
				|  |  | +            userTargetIds: userTargetIds.join(',')
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        postMessage({ api: 'back' });
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return () => (
 | 
	
	
		
			
				|  | @@ -63,7 +134,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                  <Field
 | 
	
		
			
				|  |  |                    style={{ padding: '0', marginTop: '12px' }}
 | 
	
		
			
				|  |  |                    placeholder="请输入您的消息内容"
 | 
	
		
			
				|  |  | -                  v-model={forms.textMessage}
 | 
	
		
			
				|  |  | +                  v-model={forms.messageContent}
 | 
	
		
			
				|  |  |                    type="textarea"
 | 
	
		
			
				|  |  |                    rows={3}
 | 
	
		
			
				|  |  |                    showWordLimit
 | 
	
	
		
			
				|  | @@ -85,7 +156,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                ),
 | 
	
		
			
				|  |  |                label: () => (
 | 
	
		
			
				|  |  |                  <MUploader
 | 
	
		
			
				|  |  | -                  v-model:modelValue={forms.attachments}
 | 
	
		
			
				|  |  | +                  v-model:modelValue={forms.fileUrl}
 | 
	
		
			
				|  |  |                    maxCount={5}
 | 
	
		
			
				|  |  |                    uploadIcon={iconUploader}
 | 
	
		
			
				|  |  |                  />
 | 
	
	
		
			
				|  | @@ -115,47 +186,30 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              }}
 | 
	
		
			
				|  |  |            </Field>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          <Cell center border={false}>
 | 
	
		
			
				|  |  | -            {{
 | 
	
		
			
				|  |  | -              icon: () => <Image src={class1} class={styles.imgLogo} />,
 | 
	
		
			
				|  |  | -              title: () => (
 | 
	
		
			
				|  |  | -                <div class={styles.infos}>
 | 
	
		
			
				|  |  | -                  <div class={styles.infoTitle}>长笛班</div>
 | 
	
		
			
				|  |  | -                  <div class={styles.infoContent}>
 | 
	
		
			
				|  |  | -                    武汉洪山区第二小学第一乐团
 | 
	
		
			
				|  |  | -                  </div>
 | 
	
		
			
				|  |  | -                </div>
 | 
	
		
			
				|  |  | -              ),
 | 
	
		
			
				|  |  | -              'right-icon': () => (
 | 
	
		
			
				|  |  | -                <Icon
 | 
	
		
			
				|  |  | -                  name={iconClose}
 | 
	
		
			
				|  |  | -                  class={styles.infoClose}
 | 
	
		
			
				|  |  | -                  onClick={onClose}
 | 
	
		
			
				|  |  | -                />
 | 
	
		
			
				|  |  | -              )
 | 
	
		
			
				|  |  | -            }}
 | 
	
		
			
				|  |  | -          </Cell>
 | 
	
		
			
				|  |  | -          {[1, 2, 3, 4, 5, 6].map(() => (
 | 
	
		
			
				|  |  | +          {forms.receives.map((item: any) => (
 | 
	
		
			
				|  |  |              <Cell center border={false}>
 | 
	
		
			
				|  |  |                {{
 | 
	
		
			
				|  |  |                  icon: () => (
 | 
	
		
			
				|  |  | -                  <Image src={class1} class={styles.imgLogo} fit="contain" />
 | 
	
		
			
				|  |  | +                  <Image
 | 
	
		
			
				|  |  | +                    src={item.avatar}
 | 
	
		
			
				|  |  | +                    class={styles.imgLogo}
 | 
	
		
			
				|  |  | +                    fit="contain"
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  |                  ),
 | 
	
		
			
				|  |  |                  title: () => (
 | 
	
		
			
				|  |  |                    <div class={styles.infos}>
 | 
	
		
			
				|  |  |                      <div class={styles.infoTitle}>
 | 
	
		
			
				|  |  | -                      长笛班 <img src={badge1} class={styles.iconBadge} />
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                    <div class={styles.infoContent}>
 | 
	
		
			
				|  |  | -                      武汉洪山区第二小学第一乐团
 | 
	
		
			
				|  |  | +                      {item.receiveName}
 | 
	
		
			
				|  |  | +                      {/* <img src={badge1} class={styles.iconBadge} /> */}
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  | +                    <div class={styles.infoContent}>{item.receiveText}</div>
 | 
	
		
			
				|  |  |                    </div>
 | 
	
		
			
				|  |  |                  ),
 | 
	
		
			
				|  |  |                  'right-icon': () => (
 | 
	
		
			
				|  |  |                    <Icon
 | 
	
		
			
				|  |  |                      name={iconClose}
 | 
	
		
			
				|  |  |                      class={styles.infoClose}
 | 
	
		
			
				|  |  | -                    onClick={onClose}
 | 
	
		
			
				|  |  | +                    onClick={() => onClose(item)}
 | 
	
		
			
				|  |  |                    />
 | 
	
		
			
				|  |  |                  )
 | 
	
		
			
				|  |  |                }}
 | 
	
	
		
			
				|  | @@ -175,6 +229,33 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            <SelectSend
 | 
	
		
			
				|  |  |              v-model:selectObject={forms.selectObject}
 | 
	
		
			
				|  |  |              onClose={() => (forms.selectStatus = false)}
 | 
	
		
			
				|  |  | +            onConfirm={(val: any) => {
 | 
	
		
			
				|  |  | +              const groupChat = val.groupChat;
 | 
	
		
			
				|  |  | +              const contacts = val.contacts;
 | 
	
		
			
				|  |  | +              const tempList: any = [];
 | 
	
		
			
				|  |  | +              console.log(groupChat, contacts, tempList);
 | 
	
		
			
				|  |  | +              groupChat.forEach((item: any) => {
 | 
	
		
			
				|  |  | +                tempList.push({
 | 
	
		
			
				|  |  | +                  receiveType: 'GROUPCHAT',
 | 
	
		
			
				|  |  | +                  receiveId: item.id,
 | 
	
		
			
				|  |  | +                  receiveName: item.value,
 | 
	
		
			
				|  |  | +                  receiveText: item.text,
 | 
	
		
			
				|  |  | +                  avatar: item.avatar
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +              });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              contacts.forEach((item: any) => {
 | 
	
		
			
				|  |  | +                tempList.push({
 | 
	
		
			
				|  |  | +                  receiveType: 'CONTACTS',
 | 
	
		
			
				|  |  | +                  receiveId: item.id,
 | 
	
		
			
				|  |  | +                  receiveName: item.value,
 | 
	
		
			
				|  |  | +                  receiveText: item.text,
 | 
	
		
			
				|  |  | +                  avatar: item.avatar
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +              });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              forms.receives = tempList;
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  |          </MPopup>
 | 
	
		
			
				|  |  |        </div>
 |