xuqiang 4 年 前
コミット
f4dcfc1e24

+ 569 - 0
src/main/vue/src/components/ProgrammeLog.vue

@@ -0,0 +1,569 @@
+<template>
+    <el-dialog
+        v-loading="saving"
+        @close="closeDialog"
+        title="节目详情"
+        center
+        :visible.sync="dialogVisible"
+        width="980px"
+    >
+        <div class="edit-view">
+            <el-form
+                :model="formData"
+                :rules="rules"
+                ref="form"
+                label-width="80px"
+                label-position="right"
+                size="small"
+                style="max-width: 500px;"
+            >
+                <el-timeline>
+                    <el-timeline-item placement="top" size="normal" timestamp="节目信息">
+                        <el-card shadow="hover" :body-style="{ padding: '20px' }">
+                            <el-form-item prop="name" label="节目名称">
+                                <el-input v-model="formData.name" class="width" readonly></el-input>
+                            </el-form-item>
+                            <el-form-item prop="specialtyId" label="参赛专业">
+                                <el-cascader
+                                    class="width"
+                                    ref="artCascader"
+                                    v-model="formData.specialtyId"
+                                    :props="optionProps"
+                                    :options="artTypes"
+                                    :show-all-levels="false"
+                                    placeholder="请选择专业"
+                                    disabled
+                                >
+                                </el-cascader>
+                            </el-form-item>
+                            <el-form-item prop="competitionGroup" label="参赛组别">
+                                <el-select
+                                    v-model="formData.competitionGroup"
+                                    class="width"
+                                    clearable
+                                    filterable
+                                    placeholder="请选择"
+                                    disabled
+                                >
+                                    <el-option
+                                        v-for="item in competitionGroupOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value"
+                                    >
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item prop="levelSettingId" label="参赛级别" v-if="formData.competitionGroup">
+                                <el-select
+                                    v-model="formData.levelSettingId"
+                                    clearable
+                                    filterable
+                                    placeholder="请选择"
+                                    class="width"
+                                    v-if="formData.competitionGroup == 'SINGLE'"
+                                    disabled
+                                >
+                                    <el-option
+                                        v-for="item in levelSingleOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value"
+                                    >
+                                        <span style="float: left">{{ item.label }}</span>
+                                        <span style="float: right; color: #8492a6; font-size: 13px">{{
+                                            item.desc
+                                        }}</span>
+                                    </el-option>
+                                </el-select>
+                                <el-select
+                                    v-model="formData.levelSettingId"
+                                    clearable
+                                    filterable
+                                    placeholder="请选择"
+                                    class="width"
+                                    v-else
+                                    disabled
+                                >
+                                    <el-option
+                                        v-for="item in levelCollectiveOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value"
+                                    >
+                                        <span style="float: left">{{ item.label }}</span>
+                                        <span style="float: right; color: #8492a6; font-size: 13px">{{
+                                            item.desc
+                                        }}</span>
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item
+                                prop="durationOfWork"
+                                label="作品时长"
+                                v-if="
+                                    formData.specialtyId !== 187 &&
+                                        formData.specialtyId !== 188 &&
+                                        formData.specialtyId !== 189 &&
+                                        formData.specialtyId !== 190 &&
+                                        formData.specialtyId !== 191 &&
+                                        formData.specialtyId !== 192 &&
+                                        formData.specialtyId !== 193 &&
+                                        formData.specialtyId !== 194 &&
+                                        formData.specialtyId !== 589 &&
+                                        formData.specialtyId !== 590 &&
+                                        formData.specialtyId !== 591 &&
+                                        formData.specialtyId !== 592 &&
+                                        formData.specialtyId !== 593 &&
+                                        formData.specialtyId !== 594 &&
+                                        formData.specialtyId !== 595 &&
+                                        formData.specialtyId !== 596 &&
+                                        formData.specialtyId !== 597 &&
+                                        formData.specialtyId !== 598 &&
+                                        formData.specialtyId !== 599 &&
+                                        formData.specialtyId !== 600 &&
+                                        formData.specialtyId !== 601 &&
+                                        formData.specialtyId !== 602 &&
+                                        formData.specialtyId !== 603 &&
+                                        formData.specialtyId !== 604 &&
+                                        formData.specialtyId !== 605
+                                "
+                            >
+                                <el-input v-model="formData.durationOfWork" class="width" readonly></el-input>
+                            </el-form-item>
+                            <el-form-item prop="instructor" label="指导老师">
+                                <el-input v-model="formData.instructor" class="width" readonly></el-input>
+                            </el-form-item>
+                            <el-form-item
+                                prop="annex"
+                                label="作品图片"
+                                v-if="
+                                    formData.specialtyId == 187 ||
+                                        formData.specialtyId == 188 ||
+                                        formData.specialtyId == 189 ||
+                                        formData.specialtyId == 190 ||
+                                        formData.specialtyId == 191 ||
+                                        formData.specialtyId == 192 ||
+                                        formData.specialtyId == 193 ||
+                                        formData.specialtyId == 194 ||
+                                        formData.specialtyId == 589 ||
+                                        formData.specialtyId == 590 ||
+                                        formData.specialtyId == 591 ||
+                                        formData.specialtyId == 592 ||
+                                        formData.specialtyId == 593 ||
+                                        formData.specialtyId == 594 ||
+                                        formData.specialtyId == 595 ||
+                                        formData.specialtyId == 596 ||
+                                        formData.specialtyId == 597 ||
+                                        formData.specialtyId == 598 ||
+                                        formData.specialtyId == 599 ||
+                                        formData.specialtyId == 600 ||
+                                        formData.specialtyId == 601 ||
+                                        formData.specialtyId == 602 ||
+                                        formData.specialtyId == 603 ||
+                                        formData.specialtyId == 604 ||
+                                        formData.specialtyId == 605
+                                "
+                            >
+                                <img class="imgBox" :src="formData.annex" alt="" />
+                            </el-form-item>
+                            <el-form-item prop="video" label="作品视频" v-else>
+                                <video-upload v-model="formData.video" class="width" :readonly="true"></video-upload>
+                            </el-form-item>
+                        </el-card>
+                    </el-timeline-item>
+
+                    <el-timeline-item placement="top" size="normal" timestamp="单位信息">
+                        <el-card shadow="hover" :body-style="{ padding: '20px' }">
+                            <el-form-item prop="gradingOrganizationId" label="考级机构">
+                                <el-select
+                                    v-model="formData.gradingOrganizationId"
+                                    clearable
+                                    filterable
+                                    placeholder="请选择"
+                                    class="width"
+                                    disabled
+                                >
+                                    <el-option
+                                        v-for="item in gradingOrganizationIdOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value"
+                                    >
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item prop="organizationId" label="承办单位">
+                                <el-select
+                                    v-model="formData.organizationId"
+                                    clearable
+                                    filterable
+                                    placeholder="请选择"
+                                    class="width"
+                                    disabled
+                                >
+                                    <el-option
+                                        v-for="item in organizationIdOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value"
+                                    >
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item prop="examPoint" label="考级点">
+                                <el-input v-model="formData.examPoint" class="width" readonly></el-input>
+                            </el-form-item>
+                            <el-form-item prop="contact" label="联系人">
+                                <el-input v-model="formData.contact" class="width" readonly></el-input>
+                            </el-form-item>
+                            <el-form-item prop="phone" label="联系电话">
+                                <el-input v-model="formData.phone" class="width" readonly></el-input>
+                            </el-form-item>
+                        </el-card>
+                    </el-timeline-item>
+
+                    <el-timeline-item placement="top" size="normal" timestamp="参演人员">
+                        <el-card shadow="hover" :body-style="{ padding: '20px' }">
+                            <el-table
+                                :data="participants"
+                                ref="table"
+                                header-row-class-name="table-header-row"
+                                header-cell-class-name="table-header-cell"
+                                row-class-name="table-row"
+                                cell-class-name="table-cell"
+                            >
+                                <el-table-column prop="img" label="证件照">
+                                    <template slot-scope="{ row }">
+                                        <el-image
+                                            style="width: 30px; height: 30px;"
+                                            :src="row.img"
+                                            fit="cover"
+                                            :preview-src-list="[row.img]"
+                                        ></el-image>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="name" label="姓名" min-width="80"> </el-table-column>
+                                <el-table-column prop="birthday" label="出生年月" min-width="100"> </el-table-column>
+                                <el-table-column prop="sex" label="性别" min-width="70"> </el-table-column>
+                                <el-table-column prop="phone" label="联系方式" min-width="100"> </el-table-column>
+                                <el-table-column prop="certificate" label="考级证书">
+                                    <template slot-scope="{ row }">
+                                        <el-image
+                                            style="width: 30px; height: 30px;"
+                                            :src="row.certificate"
+                                            fit="cover"
+                                            :preview-src-list="[row.certificate]"
+                                        ></el-image>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="idNo" label="身份证号" min-width="100"> </el-table-column>
+                            </el-table>
+                        </el-card>
+                    </el-timeline-item>
+                </el-timeline>
+                <!-- <el-form-item> </el-form-item> -->
+            </el-form>
+            <!-- <div class="btn">
+                <el-button @click="$router.go(-1)">返回</el-button>
+            </div> -->
+        </div>
+    </el-dialog>
+</template>
+<script>
+import delChild from '@/mixins/delChild';
+import { mapState } from 'vuex';
+export default {
+    name: 'ProgrammeShow',
+    mixins: [delChild],
+    props: ['dialogVisible'],
+    created() {},
+    data() {
+        return {
+            saving: false,
+            formData: {},
+            show: false,
+            level: '',
+            rules: {
+                phone: [
+                    {
+                        pattern: /^1[3-9]\d{9}$/,
+                        message: '请输入正确的手机号',
+                        trigger: 'blur'
+                    }
+                ]
+            },
+            competitionGroupOptions: [
+                { label: '个人', value: 'SINGLE' },
+                { label: '集体', value: 'COLLECTIVE' }
+            ],
+            levelSingleOptions: [],
+            levelCollectiveOptions: [],
+            gradingOrganizationIdOptions: [],
+            organizationIdOptions: [],
+            artTypes: [],
+            optionProps: {
+                value: 'id',
+                label: 'name',
+                children: 'children',
+                multiple: false,
+                emitPath: false,
+                checkStrictly: true,
+                expandTrigger: 'hover'
+            },
+            participants: [],
+            programmeId: ''
+        };
+    },
+    computed: {
+        ...mapState(['organization']),
+        saveOtherJson() {
+            return [...this.participants]
+                .filter(item => {
+                    return !!item.name || !!item.sex || !!item.phone;
+                })
+                .map(item => {
+                    return {
+                        ...item,
+                        programmeId: this.programmeId
+                    };
+                });
+
+            // return JSON.stringify(participants);
+        }
+    },
+    methods: {
+        init(id) {
+            if (id) {
+                this.$http
+                    .get('programme/get/' + id)
+                    .then(res => {
+                        this.formData = res;
+                        console.log(res);
+                        this.$http
+                            .post('/participant/all', { size: 100, query: { programmeId: id } }, { body: 'json' })
+                            .then(res => {
+                                this.participants = res.content;
+                            });
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
+            } else if (this.organization) {
+                this.formData.organizationId = this.organization.id;
+                this.formData.contact = this.organization.owner;
+                this.formData.phone = this.organization.ownerPhone;
+                if (this.organization.gradingOrganizationId.length > 0) {
+                    this.formData.gradingOrganizationId = this.organization.gradingOrganizationId[0];
+                }
+            }
+            this.$http
+                .post('/setting/byFlag', { flag: 3 })
+                .then(res => {
+                    if (res.length > 0) {
+                        res.forEach(item => {
+                            this.levelSingleOptions.push({
+                                label: item.name,
+                                value: item.id,
+                                desc: item.formData.specialtyId
+                            });
+                        });
+                    }
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+            this.$http
+                .post('/setting/byFlag', { flag: 4 })
+                .then(res => {
+                    if (res.length > 0) {
+                        res.forEach(item => {
+                            this.levelCollectiveOptions.push({
+                                label: item.name,
+                                value: item.id,
+                                desc: item.formData.specialtyId
+                            });
+                        });
+                    }
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+            this.$http
+                .post('/gradingOrganization/all', { size: 1000, query: { del: false } }, { body: 'json' })
+                .then(res => {
+                    if (res.content.length > 0) {
+                        res.content.forEach(item => {
+                            this.gradingOrganizationIdOptions.push({
+                                label: item.name,
+                                value: item.id
+                            });
+                        });
+                    }
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+            this.$http
+                .post('/organization/all', { size: 1000, query: { del: false } }, { body: 'json' })
+                .then(res => {
+                    if (res.content.length > 0) {
+                        res.content.forEach(item => {
+                            this.organizationIdOptions.push({
+                                label: item.name,
+                                value: item.id
+                            });
+                        });
+                    }
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+            this.$http
+                .post('/artType/allList')
+                .then(res => {
+                    console.log(res);
+                    this.artTypes = this.delChild(res);
+                })
+                .catch(e => {
+                    console.log(e);
+                });
+        },
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
+            this.saving = true;
+            this.$http
+                .post('/programme/save', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+
+                    this.programmeId = res.id;
+                    this.$nextTick(() => {
+                        this.$http.post('/participant/batchSave', this.saveOtherJson, { body: 'json' });
+                    });
+                    this.$message.success('成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/programme/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        },
+        closeDialog() {
+            this.$emit('close');
+            this.$parent.hh();
+        },
+        onAddOtherForm() {
+            console.log(this.participants.length);
+            if (this.formData.competitionGroup == 'SINGLE' && this.participants.length > 0) {
+                this.$alert('单人组别只能添加一个参赛人员信息', '提示', {
+                    confirmButtonText: '确定',
+                    callback: action => {
+                        this.$message({
+                            type: 'info',
+                            message: '添加失败'
+                        });
+                    }
+                });
+            } else {
+                this.participants.push({
+                    name: '',
+                    sex: '',
+                    birthday: '',
+                    phone: '',
+                    img: ''
+                });
+            }
+        },
+        onDeleteOtherForm(info, index) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'warning' })
+                .then(() => {
+                    const schedules = [...this.schedules];
+                    if (info.id) {
+                        info.del = true;
+                        schedules[index] = info;
+                    } else {
+                        schedules.splice(index, 1);
+                    }
+                    this.schedules = schedules;
+                    this.$message.success('删除成功');
+                })
+                .catch(e => {});
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.edit-view {
+    padding: 0 0;
+    background-color: transparent;
+}
+.width {
+    width: 260px;
+}
+/deep/ .el-timeline-item {
+    padding-bottom: 35px;
+}
+.imgBox {
+    width: 178px;
+    height: 178px;
+    border-radius: 4px;
+}
+.btn {
+    position: fixed;
+    bottom: 0;
+    width: 100%;
+    background: #ffffff;
+    height: 50px;
+    line-height: 50px;
+    z-index: 999;
+    margin-left: -20px;
+    padding-left: 20px;
+}
+/deep/.el-input.is-disabled .el-input__inner {
+    background-color: #ffffff;
+    color: #606266;
+}
+/deep/.el-timeline-item__timestamp {
+    color: #0561d9;
+    line-height: 1;
+    font-size: 14px;
+}
+/deep/.el-timeline-item__node {
+    background-color: #5b9bed;
+}
+/deep/.el-timeline-item__tail {
+    border-left: 2px solid #7cace9;
+}
+</style>

+ 16 - 4
src/main/vue/src/views/Admin.vue

@@ -30,9 +30,16 @@
                         <el-breadcrumb-item :to="{ path: '/dashboard' }">
                         <el-breadcrumb-item :to="{ path: '/dashboard' }">
                             首页
                             首页
                         </el-breadcrumb-item>
                         </el-breadcrumb-item>
-                        <el-breadcrumb-item v-if="$route.name !== 'dashboard'">{{
-                            $route.meta.title || $route.name
-                        }}</el-breadcrumb-item>
+                        <!-- <el-breadcrumb-item :to="{ path: paths }" v-if="$route.name !== 'dashboard'">{{ -->
+                        <!-- $route.meta.title || $route.name
+                        }}</el-breadcrumb-item> -->
+                        <div
+                            style="cursor:pointer"
+                            v-if="$route.meta.title !== '基本信息' && $route.meta.title !== '首页'"
+                            @click="$router.go(-1)"
+                        >
+                            {{ $route.meta.title || $route.name }}
+                        </div>
                     </el-breadcrumb>
                     </el-breadcrumb>
                 </div>
                 </div>
 
 
@@ -97,6 +104,7 @@ import { mapState } from 'vuex';
 export default {
 export default {
     name: 'admin',
     name: 'admin',
     created() {
     created() {
+        console.log(this.paths);
         this.getMenus();
         this.getMenus();
         let fn = () => {
         let fn = () => {
             this.isFullscreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
             this.isFullscreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
@@ -178,7 +186,11 @@ export default {
         };
         };
     },
     },
     computed: {
     computed: {
-        ...mapState(['userInfo', 'psdEsay'])
+        ...mapState(['userInfo', 'psdEsay']),
+        paths() {
+            return this.$route;
+        }
+        // :to="{ path: '/$route.meta.title' }"
     },
     },
     methods: {
     methods: {
         findActiveMenu() {
         findActiveMenu() {

+ 1 - 1
src/main/vue/src/views/performance/ProgrammeEdit.vue

@@ -547,7 +547,7 @@ export default {
     methods: {
     methods: {
         change(e) {
         change(e) {
             this.code = e;
             this.code = e;
-            // console.log(this.code);
+            console.log(this.code);
         },
         },
         onSave(isSubmit) {
         onSave(isSubmit) {
             if (isSubmit) {
             if (isSubmit) {

+ 11 - 8
src/main/vue/src/views/performance/ProgrammeList.vue

@@ -241,6 +241,7 @@
                 您的浏览器不支持 video 标签。
                 您的浏览器不支持 video 标签。
             </video>
             </video>
         </el-dialog>
         </el-dialog>
+        <programme-log :dialogVisible="isShow" @close="closeDialog" ref="public"></programme-log>
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
@@ -248,7 +249,7 @@ import delChild from '@/mixins/delChild';
 import { mapState } from 'vuex';
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
 import pageableTable from '@/mixins/pageableTable';
 import QrcodeVue from 'qrcode.vue';
 import QrcodeVue from 'qrcode.vue';
-
+import ProgrammeLog from '../../components/ProgrammeLog.vue';
 export default {
 export default {
     name: 'ProgrammeList',
     name: 'ProgrammeList',
     mixins: [pageableTable, delChild],
     mixins: [pageableTable, delChild],
@@ -267,6 +268,8 @@ export default {
             levelCollectiveOptions: [],
             levelCollectiveOptions: [],
             dialogUrl: '',
             dialogUrl: '',
             dialogCode: false,
             dialogCode: false,
+            isShow: false,
+            IDs: 0,
             gradingOrganizationIdOptions: [],
             gradingOrganizationIdOptions: [],
             organizationIdOptions: [],
             organizationIdOptions: [],
             performanceId: '',
             performanceId: '',
@@ -393,7 +396,8 @@ export default {
             });
             });
     },
     },
     components: {
     components: {
-        QrcodeVue
+        QrcodeVue,
+        ProgrammeLog
     },
     },
     computed: {
     computed: {
         selection() {
         selection() {
@@ -447,13 +451,12 @@ export default {
                 }
                 }
             });
             });
         },
         },
+        closeDialog() {
+            this.isShow = false;
+        },
         showRow(row) {
         showRow(row) {
-            this.$router.push({
-                path: '/programmeShow',
-                query: {
-                    id: row.id
-                }
-            });
+            this.isShow = true;
+            this.$refs.public.init(row.id);
         },
         },
         download() {
         download() {
             this.downloading = true;
             this.downloading = true;