|
@@ -12,7 +12,8 @@ import {
|
|
|
Popup,
|
|
|
Radio,
|
|
|
RadioGroup,
|
|
|
- Tag
|
|
|
+ Tag,
|
|
|
+ showToast
|
|
|
} from 'vant';
|
|
|
import { activityStatus, programType } from '@/helpers/constant';
|
|
|
import MUploader from '@/components/m-uploader';
|
|
@@ -25,18 +26,83 @@ import MSticky from '@/components/m-sticky';
|
|
|
import { formatterDatePicker } from '@/helpers/utils';
|
|
|
import request from '@/helpers/request';
|
|
|
import InputTimer from './components/input-timer';
|
|
|
+import PerformanceTeam from './components/performance-team';
|
|
|
+import MPopup from '@/components/m-popup';
|
|
|
+import CastModal from './components/cast-modal';
|
|
|
+import dayjs from 'dayjs';
|
|
|
+import { useRoute, useRouter } from 'vue-router';
|
|
|
+
|
|
|
+type detailItemType = {
|
|
|
+ id: string | number | null;
|
|
|
+ name: string;
|
|
|
+ type: string;
|
|
|
+ musicGroupId: string | null;
|
|
|
+ musicGroupName: string | null;
|
|
|
+ subjectAllList: any[];
|
|
|
+ subjectIdList: any[];
|
|
|
+ time: number | null;
|
|
|
+ performerList: any[];
|
|
|
+ attachmentUrl: string[];
|
|
|
+ attachmentVideoUrl: string[];
|
|
|
+ attachmentImgUrl: string[];
|
|
|
+};
|
|
|
+
|
|
|
+const detailItem: detailItemType = {
|
|
|
+ id: null,
|
|
|
+ name: '',
|
|
|
+ type: '', // 节目类型
|
|
|
+ musicGroupId: null, // 表演乐团
|
|
|
+ musicGroupName: null, //
|
|
|
+ subjectAllList: [] as any, // 表演团队数据列表
|
|
|
+ subjectIdList: [] as any, // 表演团队
|
|
|
+ time: null, // 表演时间
|
|
|
+ performerList: [], // 演员列表
|
|
|
+ attachmentUrl: [] as string[],
|
|
|
+ attachmentVideoUrl: [] as string[], // 视频目录
|
|
|
+ attachmentImgUrl: [] as string[]
|
|
|
+};
|
|
|
+
|
|
|
+// 格式化时间
|
|
|
+export const formatterTimer = (timer: number) => {
|
|
|
+ if (!timer) {
|
|
|
+ return {
|
|
|
+ minute: null,
|
|
|
+ secord: null
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ const minute = Math.floor(timer / 60);
|
|
|
+ const secord = timer % 60;
|
|
|
+ return {
|
|
|
+ minute,
|
|
|
+ secord
|
|
|
+ };
|
|
|
+ }
|
|
|
+};
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'operation-page',
|
|
|
setup() {
|
|
|
+ const route = useRoute();
|
|
|
+ const router = useRouter();
|
|
|
const forms = reactive({
|
|
|
+ activityDetailId: route.query.id, // 活动编号
|
|
|
timerStatus: false,
|
|
|
- submitEvaluateStatus: null,
|
|
|
currentDate: [],
|
|
|
orchestraStatus: false, // 乐团列表状态
|
|
|
orchestraColumns: [] as any,
|
|
|
programType: '',
|
|
|
- programTimerStatus: true // 节目时长状态
|
|
|
+ programTimerStatus: false, // 节目时长状态
|
|
|
+ deleteStatus: false, // 删除弹窗
|
|
|
+ teamStatus: false, // 表演团队状态
|
|
|
+ castStatus: false, // 学员名称状态
|
|
|
+ selectOrchestra: [] as any, // 选中的乐团
|
|
|
+ // selectOrchestraIndex: 0, // index
|
|
|
+ deleteIndex: 0, // 删除的编号
|
|
|
+
|
|
|
+ startTime: dayjs().format('YYYY-MM-DD'),
|
|
|
+ name: '',
|
|
|
+ type: '',
|
|
|
+ detail: [{ ...detailItem }]
|
|
|
});
|
|
|
|
|
|
// 乐团列表
|
|
@@ -56,9 +122,165 @@ export default defineComponent({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // 获取表演团队和演员
|
|
|
+ const getUserList = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await request.post(
|
|
|
+ '/api-web/schoolActivity/userList',
|
|
|
+ {
|
|
|
+ data: {
|
|
|
+ activityDetailId: forms.activityDetailId,
|
|
|
+ musicGroupId: forms.selectOrchestra.musicGroupId,
|
|
|
+ subjectIds: []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ const tempData = data || [];
|
|
|
+ console.log(tempData, 'tempData');
|
|
|
+ forms.selectOrchestra.subjectAllList = tempData;
|
|
|
+ forms.selectOrchestra.performerList = tempData;
|
|
|
+
|
|
|
+ // 添加默认选中的编号
|
|
|
+ forms.selectOrchestra.subjectIdList = [];
|
|
|
+ tempData.forEach((item: any) => {
|
|
|
+ forms.selectOrchestra.subjectIdList.push(item.subjectId);
|
|
|
+ });
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 添加节目
|
|
|
+ const onAddItem = () => {
|
|
|
+ forms.detail.push({ ...detailItem });
|
|
|
+ };
|
|
|
+
|
|
|
+ // 删除节目
|
|
|
+ const onDelete = (index: number) => {
|
|
|
+ if (forms.detail.length <= 1) return;
|
|
|
+ forms.deleteIndex = index;
|
|
|
+ forms.deleteStatus = true;
|
|
|
+ };
|
|
|
+
|
|
|
+ // 格式化员工数量
|
|
|
+ const formatterStudents = (list: any) => {
|
|
|
+ let count = 0;
|
|
|
+ list.forEach((item: any) => {
|
|
|
+ count += item.studentCount;
|
|
|
+ });
|
|
|
+ return count;
|
|
|
+ };
|
|
|
+
|
|
|
+ // 格式化选中的演员
|
|
|
+ const formatterPerformer = (ids: any[]) => {
|
|
|
+ const tempList: any = [];
|
|
|
+ // 先从默认选中的数据中取
|
|
|
+ forms.selectOrchestra.performerList.forEach((item: any) => {
|
|
|
+ if (ids.includes(item.subjectId)) tempList.push(item);
|
|
|
+ });
|
|
|
+ // 在从总的里面取
|
|
|
+ forms.selectOrchestra.subjectAllList.forEach((item: any) => {
|
|
|
+ const tmpPerformanceIndex =
|
|
|
+ forms.selectOrchestra.performerList.findIndex(
|
|
|
+ (p: any) => p.subjectId == item.subjectId
|
|
|
+ );
|
|
|
+ if (ids.includes(item.subjectId) && tmpPerformanceIndex < 0) {
|
|
|
+ tempList.push(item);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ forms.selectOrchestra.performerList = tempList;
|
|
|
+ };
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
musicGroupPage();
|
|
|
});
|
|
|
+
|
|
|
+ const checkForms = () => {
|
|
|
+ if (!forms.name) {
|
|
|
+ showToast('请填写活动活动名称');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (forms.name.length < 3 || forms.name.length > 25) {
|
|
|
+ showToast('活动名称长度3~25');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!forms.type) {
|
|
|
+ showToast('请选择活动类别');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i = 0, j = forms.detail.length; i < j; i++) {
|
|
|
+ const tDetail = forms.detail[i];
|
|
|
+ if (!tDetail.name) {
|
|
|
+ showToast('节目名称不能为空');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!tDetail.type) {
|
|
|
+ showToast('请选择活动类型');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!tDetail.musicGroupId) {
|
|
|
+ showToast('请选择表演乐团');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (tDetail.subjectIdList.length <= 0) {
|
|
|
+ showToast('请选择表演团队');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (formatterStudents(tDetail.performerList) <= 0) {
|
|
|
+ showToast('请选择演员');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!tDetail.time) {
|
|
|
+ showToast('请输入节目时长');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ const onSubmit = async () => {
|
|
|
+ try {
|
|
|
+ // 校验
|
|
|
+ if (!checkForms()) return;
|
|
|
+
|
|
|
+ const params = {
|
|
|
+ startTime: forms.startTime,
|
|
|
+ endTime: forms.startTime + ' 23:59:59',
|
|
|
+ name: forms.name,
|
|
|
+ type: forms.type,
|
|
|
+ detail: [] as any[]
|
|
|
+ };
|
|
|
+ const tempDetail: any[] = [];
|
|
|
+ forms.detail.forEach((item: any, index: number) => {
|
|
|
+ tempDetail.push({
|
|
|
+ sort: index + 1,
|
|
|
+ name: item.name,
|
|
|
+ type: item.type,
|
|
|
+ musicGroupId: item.musicGroupId,
|
|
|
+ subjectIdList: item.subjectIdList,
|
|
|
+ studentNum: formatterStudents(item.performerList),
|
|
|
+ studentList: item.performerList,
|
|
|
+ time: item.time,
|
|
|
+ attachmentUrl: [
|
|
|
+ ...item.attachmentImgUrl,
|
|
|
+ ...item.attachmentUrl
|
|
|
+ ].join(',')
|
|
|
+ });
|
|
|
+ });
|
|
|
+ params.detail = tempDetail;
|
|
|
+
|
|
|
+ await request.post('/api-web/schoolActivity/save', {
|
|
|
+ hideLoading: false,
|
|
|
+ data: params
|
|
|
+ });
|
|
|
+
|
|
|
+ router.push('/activity-record');
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ };
|
|
|
return () => (
|
|
|
<div class={styles.operation}>
|
|
|
<MHeader />
|
|
@@ -70,6 +292,7 @@ export default defineComponent({
|
|
|
inputAlign="right"
|
|
|
readonly
|
|
|
clearable={false}
|
|
|
+ v-model={forms.startTime}
|
|
|
onClick={() => (forms.timerStatus = true)}
|
|
|
placeholder="请选择活动日期"></Field>
|
|
|
<Field
|
|
@@ -77,20 +300,16 @@ export default defineComponent({
|
|
|
inputAlign="right"
|
|
|
placeholder="请填写活动名称"
|
|
|
maxlength={25}
|
|
|
+ v-model={forms.name}
|
|
|
+ autocomplete="off"
|
|
|
/>
|
|
|
- <Field label="活动名称" labelAlign="top">
|
|
|
+ <Field label="活动类别" labelAlign="top">
|
|
|
{{
|
|
|
input: () => (
|
|
|
- <RadioGroup
|
|
|
- class={styles.searchTypeFlex}
|
|
|
- v-model={forms.submitEvaluateStatus}>
|
|
|
+ <RadioGroup class={styles.searchTypeFlex} v-model={forms.type}>
|
|
|
{Object.keys(activityStatus).map((item: string) => (
|
|
|
<Tag
|
|
|
- type={
|
|
|
- forms.submitEvaluateStatus === item
|
|
|
- ? 'primary'
|
|
|
- : 'default'
|
|
|
- }
|
|
|
+ type={forms.type === item ? 'primary' : 'default'}
|
|
|
round>
|
|
|
<Radio name={item} />
|
|
|
{activityStatus[item]}
|
|
@@ -102,113 +321,198 @@ export default defineComponent({
|
|
|
</Field>
|
|
|
</CellGroup>
|
|
|
|
|
|
- <CellGroup inset class={styles.topCellGroup}>
|
|
|
- <Cell center>
|
|
|
- {{
|
|
|
- icon: () => <Icon name={iconVideo} class={styles.iconImg} />,
|
|
|
- title: () => <div class={styles.topTitle}>节目二</div>,
|
|
|
- value: () => <Icon name={iconDelete} class={styles.iconImg} />
|
|
|
- }}
|
|
|
- </Cell>
|
|
|
- <Field
|
|
|
- label="节目名称"
|
|
|
- inputAlign="right"
|
|
|
- placeholder="请填写节目名称"
|
|
|
- maxlength={25}
|
|
|
- />
|
|
|
- <Field
|
|
|
- label="节目类型"
|
|
|
- inputAlign="right"
|
|
|
- placeholder="请填写节目"
|
|
|
- class={styles.programType}>
|
|
|
- {{
|
|
|
- input: () => (
|
|
|
- <RadioGroup
|
|
|
- class={[styles.searchTypeFlex, styles.small]}
|
|
|
- v-model={forms.programType}>
|
|
|
- {Object.keys(programType).map((item: string) => (
|
|
|
- <Tag
|
|
|
- type={forms.programType === item ? 'primary' : 'default'}
|
|
|
- round>
|
|
|
- <Radio name={item} />
|
|
|
- {programType[item]}
|
|
|
- </Tag>
|
|
|
- ))}
|
|
|
- </RadioGroup>
|
|
|
- )
|
|
|
- }}
|
|
|
- </Field>
|
|
|
- <Field
|
|
|
- isLink
|
|
|
- label="表演乐团"
|
|
|
- inputAlign="right"
|
|
|
- readonly
|
|
|
- clearable={false}
|
|
|
- onClick={() => (forms.orchestraStatus = true)}
|
|
|
- placeholder="请选择表演乐团"
|
|
|
- />
|
|
|
- <Field
|
|
|
- isLink
|
|
|
- label="表演团队"
|
|
|
- inputAlign="right"
|
|
|
- readonly
|
|
|
- clearable={false}
|
|
|
- placeholder="请选择表演团队"
|
|
|
- />
|
|
|
- <Field
|
|
|
- isLink
|
|
|
- label="演员"
|
|
|
- inputAlign="right"
|
|
|
- readonly
|
|
|
- clearable={false}
|
|
|
- placeholder="请选择演员"
|
|
|
- />
|
|
|
- <Field
|
|
|
- label="节目时长"
|
|
|
- inputAlign="right"
|
|
|
- onClick={() => (forms.programTimerStatus = true)}
|
|
|
- placeholder="请选择节目时长">
|
|
|
- {{
|
|
|
- input: () => (
|
|
|
- <div class={styles.programTimer}>
|
|
|
- <span>3</span>分<span>24</span>秒
|
|
|
- </div>
|
|
|
- )
|
|
|
- }}
|
|
|
- </Field>
|
|
|
- <Field label="上传附件" labelAlign="top">
|
|
|
- {{
|
|
|
- input: () => (
|
|
|
- <MUploader
|
|
|
- uploadIcon={iconUploadImg}
|
|
|
- maxCount={5}
|
|
|
- style={{ marginTop: '4px' }}>
|
|
|
- <MUploaderInside
|
|
|
- uploadIcon={iconUploadVideo}
|
|
|
- uploadType="VIDEO"
|
|
|
- accept=".mp4"
|
|
|
- maxCount={3}
|
|
|
+ {forms.detail.map((item: any, index: number) => (
|
|
|
+ <CellGroup inset class={styles.topCellGroup}>
|
|
|
+ <Cell center>
|
|
|
+ {{
|
|
|
+ icon: () => <Icon name={iconVideo} class={styles.iconImg} />,
|
|
|
+ title: () => <div class={styles.topTitle}>节目{index + 1}</div>,
|
|
|
+ value: () => (
|
|
|
+ <Icon
|
|
|
+ name={iconDelete}
|
|
|
+ class={[
|
|
|
+ styles.iconImg,
|
|
|
+ forms.detail.length <= 1 ? styles.disabled : ''
|
|
|
+ ]}
|
|
|
+ onClick={() => onDelete(index)}
|
|
|
/>
|
|
|
- </MUploader>
|
|
|
- )
|
|
|
- }}
|
|
|
- </Field>
|
|
|
- </CellGroup>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ <Field
|
|
|
+ label="节目名称"
|
|
|
+ inputAlign="right"
|
|
|
+ placeholder="请填写节目名称"
|
|
|
+ maxlength={25}
|
|
|
+ v-model={item.name}
|
|
|
+ autocomplete="off"
|
|
|
+ />
|
|
|
+ <Field
|
|
|
+ label="节目类型"
|
|
|
+ inputAlign="right"
|
|
|
+ placeholder="请填写节目"
|
|
|
+ class={styles.programType}>
|
|
|
+ {{
|
|
|
+ input: () => (
|
|
|
+ <RadioGroup
|
|
|
+ class={[styles.searchTypeFlex, styles.small]}
|
|
|
+ v-model={item.type}>
|
|
|
+ {Object.keys(programType).map((program: string) => (
|
|
|
+ <Tag
|
|
|
+ type={item.type === program ? 'primary' : 'default'}
|
|
|
+ round>
|
|
|
+ <Radio name={program} />
|
|
|
+ {programType[program]}
|
|
|
+ </Tag>
|
|
|
+ ))}
|
|
|
+ </RadioGroup>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Field>
|
|
|
+ <Field
|
|
|
+ isLink
|
|
|
+ label="表演乐团"
|
|
|
+ inputAlign="right"
|
|
|
+ readonly
|
|
|
+ clearable={false}
|
|
|
+ v-model={item.musicGroupName}
|
|
|
+ onClick={() => {
|
|
|
+ forms.orchestraStatus = true;
|
|
|
+ forms.selectOrchestra = [];
|
|
|
+ forms.selectOrchestra = item;
|
|
|
+ }}
|
|
|
+ placeholder="请选择表演乐团"
|
|
|
+ />
|
|
|
+ <Field
|
|
|
+ isLink
|
|
|
+ label="表演团队"
|
|
|
+ inputAlign="right"
|
|
|
+ readonly
|
|
|
+ clearable={false}
|
|
|
+ onClick={() => {
|
|
|
+ if (!item.musicGroupId) {
|
|
|
+ showToast('请选择表演乐团');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ forms.teamStatus = true;
|
|
|
+ forms.selectOrchestra = [];
|
|
|
+ forms.selectOrchestra = item;
|
|
|
+ }}
|
|
|
+ placeholder={
|
|
|
+ item.subjectIdList.length > 0 ? '' : '请选择表演乐团'
|
|
|
+ }
|
|
|
+ border={item.subjectIdList.length <= 0}
|
|
|
+ class={item.subjectIdList.length > 0 ? styles.teamCell : ''}
|
|
|
+ />
|
|
|
+ {item.subjectIdList.length > 0 && (
|
|
|
+ <Cell class={styles.tagCell} center>
|
|
|
+ {{
|
|
|
+ title: () =>
|
|
|
+ item.subjectIdList.map(
|
|
|
+ (subjectId: [number, string], index: number) => {
|
|
|
+ let subjectName = '';
|
|
|
+ item.subjectAllList.forEach((subject: any) => {
|
|
|
+ if (subject.subjectId === subjectId) {
|
|
|
+ subjectName = subject.subjectName;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return (
|
|
|
+ <Tag type="primary" plain class={styles.tagItem}>
|
|
|
+ {subjectName}
|
|
|
+ <Icon
|
|
|
+ name="cross"
|
|
|
+ class={styles.closeable}
|
|
|
+ onClick={() => {
|
|
|
+ item.subjectIdList.splice(index, 1);
|
|
|
+ formatterPerformer(item.subjectIdList);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Tag>
|
|
|
+ );
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ )}
|
|
|
|
|
|
+ <Field
|
|
|
+ isLink
|
|
|
+ label="演员"
|
|
|
+ inputAlign="right"
|
|
|
+ readonly
|
|
|
+ clearable={false}
|
|
|
+ onClick={() => {
|
|
|
+ if (item.subjectIdList.length <= 0) {
|
|
|
+ showToast('请选择表演团队');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ forms.castStatus = true;
|
|
|
+ }}
|
|
|
+ v-slots={{
|
|
|
+ input: () =>
|
|
|
+ formatterStudents(item.performerList) > 0 ? (
|
|
|
+ <div class={styles.performance}>
|
|
|
+ 共 <span>{formatterStudents(item.performerList)}</span> 名
|
|
|
+ </div>
|
|
|
+ ) : (
|
|
|
+ <div class={styles.placeholder}>请选择演员</div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <Field
|
|
|
+ label="节目时长"
|
|
|
+ inputAlign="right"
|
|
|
+ onClick={() => (forms.programTimerStatus = true)}
|
|
|
+ center
|
|
|
+ placeholder="请选择节目时长">
|
|
|
+ {{
|
|
|
+ input: () => {
|
|
|
+ const timers = formatterTimer(item.time);
|
|
|
+ return (
|
|
|
+ <div class={styles.programTimer}>
|
|
|
+ <span>{timers?.minute}</span>分
|
|
|
+ <span>{timers?.secord}</span>秒
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ </Field>
|
|
|
+ <Field label="上传附件" labelAlign="top">
|
|
|
+ {{
|
|
|
+ input: () => (
|
|
|
+ <MUploader
|
|
|
+ uploadIcon={iconUploadImg}
|
|
|
+ maxCount={5}
|
|
|
+ v-model:modelValue={item.attachmentImgUrl}
|
|
|
+ style={{ marginTop: '6px' }}>
|
|
|
+ <MUploaderInside
|
|
|
+ uploadIcon={iconUploadVideo}
|
|
|
+ uploadType="VIDEO"
|
|
|
+ accept=".mp4"
|
|
|
+ maxCount={3}
|
|
|
+ v-model:modelValue={item.attachmentVideoUrl}
|
|
|
+ />
|
|
|
+ </MUploader>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Field>
|
|
|
+ </CellGroup>
|
|
|
+ ))}
|
|
|
<div class={styles.addButtonGroup}>
|
|
|
<Button
|
|
|
icon="plus"
|
|
|
block
|
|
|
type="primary"
|
|
|
plain
|
|
|
- class={styles.addButton}>
|
|
|
+ class={styles.addButton}
|
|
|
+ onClick={onAddItem}>
|
|
|
添加节目
|
|
|
</Button>
|
|
|
</div>
|
|
|
|
|
|
<MSticky position="bottom">
|
|
|
<div class={['btnGroupFixed', styles.bottonGroup]}>
|
|
|
- <Button type="primary" round block>
|
|
|
+ <Button type="primary" round block onClick={onSubmit}>
|
|
|
确认
|
|
|
</Button>
|
|
|
</div>
|
|
@@ -218,8 +522,14 @@ export default defineComponent({
|
|
|
<Popup v-model:show={forms.timerStatus} round position="bottom">
|
|
|
<DatePicker
|
|
|
v-model={forms.currentDate}
|
|
|
+ minDate={new Date()}
|
|
|
formatter={formatterDatePicker}
|
|
|
onCancel={() => (forms.timerStatus = false)}
|
|
|
+ onConfirm={({ selectedValues }) => {
|
|
|
+ // console.log(val, 12);
|
|
|
+ forms.startTime = selectedValues.join('-');
|
|
|
+ forms.timerStatus = false;
|
|
|
+ }}
|
|
|
/>
|
|
|
</Popup>
|
|
|
|
|
@@ -228,6 +538,12 @@ export default defineComponent({
|
|
|
<Picker
|
|
|
columns={forms.orchestraColumns}
|
|
|
onCancel={() => (forms.orchestraStatus = false)}
|
|
|
+ onConfirm={({ selectedOptions }) => {
|
|
|
+ forms.selectOrchestra.musicGroupName = selectedOptions[0].text;
|
|
|
+ forms.selectOrchestra.musicGroupId = selectedOptions[0].value;
|
|
|
+ forms.orchestraStatus = false;
|
|
|
+ getUserList();
|
|
|
+ }}
|
|
|
/>
|
|
|
</Popup>
|
|
|
|
|
@@ -236,8 +552,82 @@ export default defineComponent({
|
|
|
v-model:show={forms.programTimerStatus}
|
|
|
round
|
|
|
style={{ width: '82%' }}>
|
|
|
- <InputTimer />
|
|
|
+ <InputTimer
|
|
|
+ show={forms.programTimerStatus}
|
|
|
+ time={forms.selectOrchestra.time}
|
|
|
+ onClose={() => (forms.programTimerStatus = false)}
|
|
|
+ onConfirm={(val: any) => {
|
|
|
+ const secords =
|
|
|
+ Number(val.minute || 0) * 60 + Number(val.second || 0);
|
|
|
+ forms.selectOrchestra.time = secords;
|
|
|
+ forms.programTimerStatus = false;
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Popup>
|
|
|
+
|
|
|
+ {/* 删除节目提示 */}
|
|
|
+ <Popup v-model:show={forms.deleteStatus} round style={{ width: '82%' }}>
|
|
|
+ <div class={styles.popupContainer}>
|
|
|
+ <h2 class={styles.popupTitle}>删除节目</h2>
|
|
|
+ <div class={styles.popupContent}>
|
|
|
+ <p class={styles.tipContent}>
|
|
|
+ 删除<span>《节目{forms.deleteIndex + 1}》</span>
|
|
|
+ ,删除后内容不可恢复
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <div class={['btnGroupPopup']}>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ round
|
|
|
+ onClick={() => {
|
|
|
+ forms.detail.splice(forms.deleteIndex, 1);
|
|
|
+ forms.deleteStatus = false;
|
|
|
+ }}>
|
|
|
+ 确定
|
|
|
+ </Button>
|
|
|
+ <Button round onClick={() => (forms.deleteStatus = false)}>
|
|
|
+ 取消
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </Popup>
|
|
|
+
|
|
|
+ {/* 表演团队 */}
|
|
|
+ <Popup
|
|
|
+ v-model:show={forms.teamStatus}
|
|
|
+ round
|
|
|
+ position="bottom"
|
|
|
+ closeable>
|
|
|
+ <PerformanceTeam
|
|
|
+ show={forms.teamStatus}
|
|
|
+ performances={forms.selectOrchestra.subjectAllList}
|
|
|
+ selectIds={forms.selectOrchestra.subjectIdList}
|
|
|
+ onClose={() => (forms.teamStatus = false)}
|
|
|
+ onConfirm={(ids: any[]) => {
|
|
|
+ forms.selectOrchestra.subjectIdList = ids;
|
|
|
+ formatterPerformer(ids);
|
|
|
+ forms.teamStatus = false;
|
|
|
+ }}
|
|
|
+ />
|
|
|
</Popup>
|
|
|
+
|
|
|
+ {/* 演员名单 */}
|
|
|
+ <MPopup v-model:modelValue={forms.castStatus}>
|
|
|
+ <CastModal
|
|
|
+ subjectAllList={forms.selectOrchestra.subjectAllList}
|
|
|
+ v-model:performerList={forms.selectOrchestra.performerList}
|
|
|
+ onClose={() => (forms.castStatus = false)}
|
|
|
+ onConfirm={(val: any) => {
|
|
|
+ const subjects = val || [];
|
|
|
+ // 选中的声部编号
|
|
|
+ const ids: any = [];
|
|
|
+ subjects.forEach((subject: any) => {
|
|
|
+ ids.push(subject.subjectId);
|
|
|
+ });
|
|
|
+ forms.selectOrchestra.subjectIdList = ids || [];
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </MPopup>
|
|
|
</div>
|
|
|
);
|
|
|
}
|