yujialong 2 months ago
parent ceb4845179
commit b6568bd97c
  1. 17
      src/components/editor.js
  2. 6
      src/pages/achievement/show/index.vue
  3. 1
      src/pages/match/manage/matchSignup.vue
  4. 321
      src/pages/student/list/index.vue

@ -4,7 +4,7 @@ export default {
//skin:'oxide-dark', //skin:'oxide-dark',
language: 'zh_CN', language: 'zh_CN',
language_url: './styles/tinymce/langs/zh_CN.js', language_url: './styles/tinymce/langs/zh_CN.js',
plugins: 'print powerpaste preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template advcode codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave autoresize formatpainter', plugins: 'print powerpaste preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template advcode codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autoresize formatpainter',
toolbar: 'code undo redo restoredraft | cut copy powerpaste pastetext | forecolor backcolor headings fontsize lineHeight bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify | \ toolbar: 'code undo redo restoredraft | cut copy powerpaste pastetext | forecolor backcolor headings fontsize lineHeight bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify | \
styleselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \ styleselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \
table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen | indent2em formatpainter', table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen | indent2em formatpainter',
@ -212,7 +212,8 @@ export default {
}, },
//为内容模板插件提供预置模板 //为内容模板插件提供预置模板
templates: [ templates: [
{ title: '个股分析报告', description: '', content: ` {
title: '个股分析报告', description: '', content: `
<div class="tiny-report"> <div class="tiny-report">
<h2>个股分析报告</h2> <h2>个股分析报告</h2>
<h6>1.引言</h6> <h6>1.引言</h6>
@ -271,7 +272,8 @@ export default {
` `
}, },
{ title: '行业数据分析报告', description: '', content: ` {
title: '行业数据分析报告', description: '', content: `
<div class="tiny-report"> <div class="tiny-report">
<h2>行业数据分析报告</h2> <h2>行业数据分析报告</h2>
<h6>1.引言</h6> <h6>1.引言</h6>
@ -344,7 +346,8 @@ export default {
` `
}, },
{ title: '宏观数据分析报告', description: '', content: ` {
title: '宏观数据分析报告', description: '', content: `
<div class="tiny-report"> <div class="tiny-report">
<h2>宏观数据分析报告</h2> <h2>宏观数据分析报告</h2>
<h6>1.引言</h6> <h6>1.引言</h6>
@ -403,7 +406,8 @@ export default {
` `
}, },
{ title: '可视化报告', description: '', content: ` {
title: '可视化报告', description: '', content: `
<div class="tiny-report"> <div class="tiny-report">
<h2>可视化报告</h2> <h2>可视化报告</h2>
<h6>1.封面</h6> <h6>1.封面</h6>
@ -474,7 +478,8 @@ export default {
` `
}, },
{ title: '数据分析报告', description: '', content: ` {
title: '数据分析报告', description: '', content: `
<div class="tiny-report"> <div class="tiny-report">
<h2>数据分析报告</h2> <h2>数据分析报告</h2>
<h6>1.引言</h6> <h6>1.引言</h6>

@ -169,8 +169,6 @@ export default {
this.loading = true this.loading = true
const { report, userScores } = await this.$get(`${this.api.reportDetail}?reportId=${this.reportId}`) const { report, userScores } = await this.$get(`${this.api.reportDetail}?reportId=${this.reportId}`)
this.form = report this.form = report
this.expData = userScores
this.isLc = this.expData.find(e => e.lcRuleRecords) // lcRuleRecords
let form = this.form; let form = this.form;
this.infoData = { this.infoData = {
workNumber: form.workNumber, workNumber: form.workNumber,
@ -184,16 +182,16 @@ export default {
className: form.className className: form.className
} }
const data = report.data const data = report.data
this.userScores = userScores
// data使 // data使
if (!data) { if (!data) {
this.userScores = userScores
this.handleList(userScores) this.handleList(userScores)
this.$post(this.api.editExperimentalData, { this.$post(this.api.editExperimentalData, {
reportId, reportId,
data: JSON.stringify(userScores) data: JSON.stringify(userScores)
}).then(res => { }).catch(err => { }) }).then(res => { }).catch(err => { })
} else { } else {
this.handleList(userScores.find(e => e.lcRuleRecords) ? userScores : JSON.parse(data)) this.handleList(JSON.parse(data))
} }
}, },
// //

@ -25,6 +25,7 @@
<div slot="content"> <div slot="content">
<p style="margin-bottom: 5px;">报名结束前设置的自动分配将在报名结束时触发一次系统自动分配取消则不触发</p> <p style="margin-bottom: 5px;">报名结束前设置的自动分配将在报名结束时触发一次系统自动分配取消则不触发</p>
<p>报名结束后也可以手动点击自动分配按钮来立即触发系统自动分配并且点击一次就触发一次</p> <p>报名结束后也可以手动点击自动分配按钮来立即触发系统自动分配并且点击一次就触发一次</p>
<p>自动分配仅对触发时已报名的人员进行对于分配后才报名的人员如需自动分配则需手动再次触发自动分配</p>
</div> </div>
<i class="el-icon-question" <i class="el-icon-question"
style="margin: 0 10px 0 5px;font-size: 16px;color: #8f8f8f;cursor: pointer;"></i> style="margin: 0 10px 0 5px;font-size: 16px;color: #8f8f8f;cursor: pointer;"></i>

@ -1,11 +1,9 @@
<template> <template>
<div class="flex"> <div class="flex">
<div class="page" <div class="page" style="width: 320px">
style="width: 320px">
<div class="m-b-20"> <div class="m-b-20">
<h6 class="p-title">学生</h6> <h6 class="p-title">学生</h6>
<el-radio-group v-model="studentType" <el-radio-group v-model="studentType" @change="changeStudentType">
@change="changeStudentType">
<div class="m-b-20"> <div class="m-b-20">
<el-radio :label="1">所有学生</el-radio> <el-radio :label="1">所有学生</el-radio>
</div> </div>
@ -17,39 +15,22 @@
<el-divider></el-divider> <el-divider></el-divider>
<div> <div>
<div class="flex-between m-b-20"> <div class="flex-between m-b-20">
<h6 class="p-title" <h6 class="p-title" style="margin-bottom: 0">学生组织架构</h6>
style="margin-bottom: 0">学生组织架构</h6> <el-button v-auth="'学生组织架构添加'" type="text" @click="handleAdd">添加</el-button>
<el-button v-auth="'学生组织架构添加'"
type="text"
@click="handleAdd">添加</el-button>
</div> </div>
<div style="height: 504px; max-height: 504px; overflow: auto"> <div style="height: 504px; max-height: 504px; overflow: auto">
<org-tree v-if="treeVisible" <org-tree v-if="treeVisible" default-expand-all ref="orgTree" node-key="id" highlight-current lazy
default-expand-all :load="loadNodeTree" :expand-on-click-node="false" @node-click="handleNodeClick"
ref="orgTree"
node-key="id"
highlight-current
lazy
:load="loadNodeTree"
:expand-on-click-node="false"
@node-click="handleNodeClick"
:current-node-key="architectureId" :current-node-key="architectureId"
:props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }"> :props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }">
<span class="custom-tree-node" <span class="custom-tree-node" slot-scope="{ node, data }">
slot-scope="{ node, data }"> <span class="name" :title="node.label">{{ node.label }}</span>
<span class="name"
:title="node.label">{{ node.label }}</span>
<span> <span>
<el-button v-auth="'学生组织架构编辑'" <el-button v-auth="'学生组织架构编辑'" type="text" icon="el-icon-edit-outline"
type="text"
icon="el-icon-edit-outline"
@click="() => handleEdit(node, data)"> @click="() => handleEdit(node, data)">
</el-button> </el-button>
<el-button v-auth="'学生组织架构添加'" <el-button v-auth="'学生组织架构添加'" v-if="node.level < 3" type="text" icon="el-icon-circle-plus-outline"
v-if="node.level < 3"
type="text"
icon="el-icon-circle-plus-outline"
@click="() => handleAdd(node, data)"> @click="() => handleAdd(node, data)">
</el-button> </el-button>
</span> </span>
@ -58,225 +39,113 @@
</div> </div>
</div> </div>
<el-dialog :title="orgTitle" <el-dialog :title="orgTitle" :visible.sync="orgVisible" :close-on-click-modal="false" width="50%"
:visible.sync="orgVisible"
:close-on-click-modal="false"
width="50%"
@close="handleClose"> @close="handleClose">
<el-form v-if="orgVisible" <el-form v-if="orgVisible" ref="orgForm" :model="orgForm" :rules="rules" label-width="100px">
ref="orgForm" <el-form-item :label="labelName" prop="organizationName">
:model="orgForm" <el-input v-model.trim="orgForm.organizationName" placeholder="请输入"></el-input>
:rules="rules"
label-width="100px">
<el-form-item :label="labelName"
prop="organizationName">
<el-input v-model.trim="orgForm.organizationName"
placeholder="请输入"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="上级部门"> <el-form-item label="上级部门">
<el-cascader v-if="showCascader" <el-cascader v-if="showCascader" v-model="cascaderValue" :props="cascaderProps"
v-model="cascaderValue" @change="handleChangeCascader" clearable style="width: 100%">
:props="cascaderProps"
@change="handleChangeCascader"
clearable
style="width: 100%">
</el-cascader> </el-cascader>
<span v-else>{{ orgForm.parentName }}</span> <span v-else>{{ orgForm.parentName }}</span>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button v-if="isAddOrg" @click="handleClose"> </el-button>
<el-button v-if="isAddOrg" <el-button v-if="!isAddOrg" type="danger" plain @click="handleDel">删除</el-button>
@click="handleClose"> </el-button> <el-button type="primary" @click="orgSubmit"> </el-button>
<el-button v-if="!isAddOrg"
type="danger"
plain
@click="handleDel">删除</el-button>
<el-button type="primary"
@click="orgSubmit"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
<div class="page flex-1 m-l-20" <div class="page flex-1 m-l-20" style="max-width: calc(100% - 320px)">
style="max-width: calc(100% - 320px)">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool"> <div class="tool">
<ul class="filter"> <ul class="filter">
<li> <li>
<el-input style="width: 250px;" <el-input style="width: 250px;" placeholder="请输入学生姓名/学号" prefix-icon="el-icon-search" v-model="keyWord"
placeholder="请输入学生姓名/学号"
prefix-icon="el-icon-search"
v-model="keyWord"
clearable></el-input> clearable></el-input>
</li> </li>
</ul> </ul>
<div> <div>
<el-button type="info" <el-button type="info" v-auth @click="addStudent">新增学生</el-button>
v-auth <el-button type="primary" v-auth @click="batchImport">批量导入</el-button>
@click="addStudent">新增学生</el-button> <el-button type="primary" v-auth @click="delAllSelection">批量删除</el-button>
<el-button type="primary"
v-auth
@click="batchImport">批量导入</el-button>
<el-button type="primary"
v-auth
@click="delAllSelection">批量删除</el-button>
</div> </div>
</div> </div>
<el-table :data="listData" <el-table :data="listData" class="table" ref="table" stripe header-align="center"
class="table" @selection-change="handleSelectionChange" :row-key="getRowKeys">
ref="table" <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
stripe <el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
header-align="center" <el-table-column prop="userName" label="学生姓名" align="center" min-width="100"></el-table-column>
@selection-change="handleSelectionChange" <el-table-column prop="workNumber" label="学生学号" align="center" min-width="100"></el-table-column>
:row-key="getRowKeys"> <el-table-column prop="className" label="班级" align="center" min-width="200"
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center"></el-table-column>
<el-table-column prop="userName"
label="学生姓名"
align="center"
min-width="100"></el-table-column>
<el-table-column prop="workNumber"
label="学生学号"
align="center"
min-width="100"></el-table-column>
<el-table-column prop="className"
label="班级"
align="center"
min-width="200"
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="countries" <el-table-column prop="countries" label="账号角色" align="center" width="100">
label="账号角色"
align="center"
width="100">
<template slot-scope="scope">学生</template> <template slot-scope="scope">学生</template>
</el-table-column> </el-table-column>
<el-table-column prop="loginNumber" <el-table-column prop="loginNumber" label="登录次数" align="center" width="100"></el-table-column>
label="登录次数" <el-table-column prop="lastLoginTime" label="上次登录时间" align="center" width="180"></el-table-column>
align="center" <el-table-column label="操作" align="center" width="300">
width="100"></el-table-column>
<el-table-column prop="lastLoginTime"
label="上次登录时间"
align="center"
width="180"></el-table-column>
<el-table-column label="操作"
align="center"
width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-auth <el-button v-auth v-if="isRemove" type="text" @click="removeStudent(scope.row)">移除</el-button>
v-if="isRemove" <el-button v-auth type="text" @click="editStudent(scope.row, true)">查看</el-button>
type="text" <el-button v-auth type="text" @click="editStudent(scope.row, false)">编辑</el-button>
@click="removeStudent(scope.row)">移除</el-button> <el-button v-auth type="text" @click="resetPassword(scope.row)">重置密码</el-button>
<el-button v-auth <el-button v-auth type="text" @click="handleDelete(scope.row)">删除</el-button>
type="text" <el-switch v-auth="'禁用'" v-model="scope.row.isEnable" :active-value="1" :inactive-value="0"
@click="editStudent(scope.row,true)">查看</el-button> style="margin: 0 5px" @change="switchOff(scope.row)"></el-switch>
<el-button v-auth
type="text"
@click="editStudent(scope.row,false)">编辑</el-button>
<el-button v-auth
type="text"
@click="resetPassword(scope.row)">重置密码</el-button>
<el-button v-auth
type="text"
@click="handleDelete(scope.row)">删除</el-button>
<el-switch v-auth="'禁用'"
v-model="scope.row.isEnable"
:active-value="1"
:inactive-value="0"
style="margin: 0 5px"
@change="switchOff(scope.row)"></el-switch>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background @current-change="currentChange" :current-page="page" layout="total, prev, pager, next"
@current-change="currentChange"
:current-page="page"
layout="total, prev, pager, next"
:total="total"></el-pagination> :total="total"></el-pagination>
</div> </div>
<el-dialog class="dialog" <el-dialog class="dialog" width="60%" :title="isDetail ? '查看学生' : (isAdd ? '新增学生' : '编辑学生')"
width="60%" :visible.sync="studentVisible" :close-on-click-modal="false" @close="closeStudent">
:title="isDetail ? '查看学生' : (isAdd ? '新增学生' : '编辑学生')" <el-form ref="form" :model="form" :rules="rules" :disabled="isDetail" label-width="100px">
:visible.sync="studentVisible"
:close-on-click-modal="false"
@close="closeStudent">
<el-form ref="form"
:model="form"
:rules="rules"
:disabled="isDetail"
label-width="100px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item prop="workNumber" <el-form-item prop="workNumber" label="学生学号">
label="学生学号"> <el-input v-model.trim="form.workNumber" placeholder="学生学号" @blur="workNumberChange"></el-input>
<el-input v-model.trim="form.workNumber"
placeholder="学生学号"
@blur="workNumberChange"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="userName" <el-form-item prop="userName" label="学生姓名">
label="学生姓名"> <el-input v-model.trim="form.userName" placeholder="请输入学生姓名"></el-input>
<el-input v-model.trim="form.userName"
placeholder="请输入学生姓名"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="roleId" <el-form-item prop="roleId" label="账号角色">
label="账号角色">
学生 学生
</el-form-item> </el-form-item>
<el-form-item prop="phone" <el-form-item prop="phone" label="手机号">
label="手机号"> <el-input v-model.trim="form.phone" placeholder="可用于登录平台,以及找回密码" maxlength="11"></el-input>
<el-input v-model.trim="form.phone"
placeholder="可用于登录平台,以及找回密码"
maxlength="11"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="email" <el-form-item prop="email" label="邮箱">
label="邮箱"> <el-input v-model.trim="form.email" placeholder="可用于登录平台,以及找回密码"></el-input>
<el-input v-model.trim="form.email"
placeholder="可用于登录平台,以及找回密码"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="uniqueIdentification" <el-form-item prop="uniqueIdentification" label="唯一标识">
label="唯一标识"> <el-input disabled v-model="form.uniqueIdentification"></el-input>
<el-input disabled
v-model="form.uniqueIdentification"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item prop="classId" <el-form-item prop="classId" label="所在班级">
label="所在班级"> <el-input placeholder="输入关键字进行过滤" v-model="filterText" style="margin-bottom: 10px">
<el-input placeholder="输入关键字进行过滤"
v-model="filterText"
style="margin-bottom: 10px">
</el-input> </el-input>
<div style="max-height: 245px; border: 1px solid #DCDFE6; border-radius: 4px; padding: 10px 10px 10px 0px; overflow: auto"> <div
<org-tree v-if="showTree && treeVisible" style="max-height: 245px; border: 1px solid #DCDFE6; border-radius: 4px; padding: 10px 10px 10px 0px; overflow: auto">
ref="classTree" <org-tree v-if="showTree && treeVisible" ref="classTree" show-checkbox node-key="id" highlight-current
show-checkbox default-expand-all lazy :load="loadClassTree" :default-checked-keys="defaultCheckedKeys"
node-key="id"
highlight-current
default-expand-all
lazy
:load="loadClassTree"
:default-checked-keys="defaultCheckedKeys"
:filter-node-method="filterNode" :filter-node-method="filterNode"
:props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }"> :props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }">
<span class="custom-tree-node" <span class="custom-tree-node" slot-scope="{ node, data }">
slot-scope="{ node, data }">
<span style="display: inline-block; margin-right: 20px">{{ node.label }}</span> <span style="display: inline-block; margin-right: 20px">{{ node.label }}</span>
<span> <span>
<el-button v-auth="'学生组织架构添加'" <el-button v-auth="'学生组织架构添加'" v-if="node.level < 3" type="text"
v-if="node.level < 3" icon="el-icon-circle-plus-outline" @click="() => handleAdd(node, data)">
type="text"
icon="el-icon-circle-plus-outline"
@click="() => handleAdd(node, data)">
</el-button> </el-button>
</span> </span>
</span> </span>
@ -287,55 +156,28 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer" v-if="!isDetail">
class="dialog-footer" <el-button type="primary" :disabled="disableds" @click="saveData(0)">保存</el-button>
v-if="!isDetail"> <el-button v-if="isAdd" type="primary" :disabled="disableds" @click="saveData(1)">保存并继续添加</el-button>
<el-button type="primary" <el-button size="small" @click="closeStudent">取消</el-button>
:disabled="disableds"
@click="saveData(0)">保存</el-button>
<el-button v-if="isAdd"
type="primary"
:disabled="disableds"
@click="saveData(1)">保存并继续添加</el-button>
<el-button size="small"
@click="closeStudent">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="批量导入" <el-dialog title="批量导入" :visible.sync="importVisible" width="24%" :close-on-click-modal="false">
:visible.sync="importVisible"
width="24%"
:close-on-click-modal="false">
<div style="text-align: center"> <div style="text-align: center">
<div style="margin-bottom: 10px;"> <div style="margin-bottom: 10px;">
<el-button type="primary" <el-button type="primary" @click="downLoad">模板下载<i class="el-icon-download el-icon--right"></i></el-button>
@click="downLoad">模板下载<i class="el-icon-download el-icon--right"></i></el-button>
</div> </div>
<el-upload name="file" <el-upload name="file" accept=".xls,.xlsx" :on-remove="handleRemove" :on-error="uploadError"
accept=".xls,.xlsx" :on-success="uploadSuccess" :before-remove="beforeRemove" :limit="1" :on-exceed="handleExceed"
:on-remove="handleRemove" :action="this.api.importStudent" :file-list="uploadList" :headers="headers">
:on-error="uploadError" <el-button type="primary" class="ml20">上传文件<i class="el-icon-upload2 el-icon--right"></i></el-button>
:on-success="uploadSuccess"
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:action="this.api.importStudent"
:file-list="uploadList"
:headers="headers">
<el-button type="primary"
class="ml20">上传文件<i class="el-icon-upload2 el-icon--right"></i></el-button>
</el-upload> </el-upload>
<el-link v-if="uploadFaild" <el-link v-if="uploadFaild" type="primary" @click="showFaild">部分数据导入失败查看失败原因</el-link>
type="primary"
@click="showFaild">部分数据导入失败查看失败原因</el-link>
</div> </div>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" @click="importVisible = false"> </el-button>
<el-button size="small" <el-button size="small" type="primary" @click="uploadSure"> </el-button>
@click="importVisible = false"> </el-button>
<el-button size="small"
type="primary"
@click="uploadSure"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -1119,6 +961,7 @@ export default {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
} }
.name { .name {
display: inline-block; display: inline-block;
max-width: 160px; max-width: 160px;

Loading…
Cancel
Save