|
|
@@ -0,0 +1,398 @@
|
|
|
+<template>
|
|
|
+ <div class="ele-body">
|
|
|
+ <el-card shadow="never">
|
|
|
+ <!-- 搜索表单 -->
|
|
|
+ <el-form :model="table.where" label-width="100px" class="ele-form-search"
|
|
|
+ @keyup.enter.native="$refs.table.reload()" @submit.native.prevent>
|
|
|
+ <el-row :gutter="15">
|
|
|
+ <el-col :md="5" :sm="12">
|
|
|
+ <el-form-item label="姓名/手机号:">
|
|
|
+ <el-input v-model="table.where.keyword" placeholder="姓名/手机号" clearable/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="4" :sm="12">
|
|
|
+ <el-form-item label="类型:">
|
|
|
+ <el-select v-model="table.where.type" placeholder="请选择类型" class="ele-fluid">
|
|
|
+ <el-option label="全部" :value="0"/>
|
|
|
+ <el-option label="专项导师" :value="1"/>
|
|
|
+ <el-option label="研究导师" :value="2"/>
|
|
|
+ <el-option label="发展导师" :value="3"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="4" :sm="12">
|
|
|
+ <el-form-item label="状态:">
|
|
|
+ <el-select v-model="table.where.status" placeholder="请选择" class="ele-fluid">
|
|
|
+ <el-option label="全部" :value="0"/>
|
|
|
+ <el-option label="正常" :value="1"/>
|
|
|
+ <el-option label="无效" :value="2"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="5" :sm="12">
|
|
|
+ <div class="ele-form-actions">
|
|
|
+ <el-button type="primary" @click="$refs.table.reload()" icon="el-icon-search" class="ele-btn-icon">查询
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="(table.where={type:0,status: 0})&&$refs.table.reload()">重置</el-button>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <!-- 操作按钮 -->
|
|
|
+ <div class="ele-table-tool ele-table-tool-default">
|
|
|
+ <el-button @click="showEdit=true" type="primary" icon="el-icon-plus" class="ele-btn-icon" size="small" v-if="permission.includes('sys:supervisors:add')">添加
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="remove()" type="danger" icon="el-icon-delete" class="ele-btn-icon" size="small" v-if="permission.includes('sys:supervisors:dall')">批量删除
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 数据表格 -->
|
|
|
+ <ele-data-table ref="table" :config="table" :choose.sync="choose" height="calc(100vh - 315px)" highlight-current-row>
|
|
|
+ <template slot-scope="{index}">
|
|
|
+ <el-table-column type="selection" width="45" align="center" fixed="left"/>
|
|
|
+ <el-table-column prop="id" label="ID" width="60" align="center" fixed="left" show-overflow-tooltip/>
|
|
|
+ <el-table-column label="头像" min-width="100" align="center">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <el-image v-if="row.avatar" shape="square" style="width: 60px;height: 68px;border-radius: 4px;" :src="row.avatar" lazy :preview-src-list="[row.avatar]"/>
|
|
|
+ <el-avatar v-else shape="square" lazy :size="60">{{(row.name).substr(-1,1)}}</el-avatar>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="name" label="姓名" min-width="100"/>
|
|
|
+ <el-table-column prop="mobile" label="手机号" min-width="120"/>
|
|
|
+ <el-table-column prop="type_name" label="类型" min-width="120"/>
|
|
|
+ <el-table-column prop="occupation" label="职业" min-width="120"/>
|
|
|
+ <el-table-column prop="training_count" label="培训项目数" width="100" align="center"/>
|
|
|
+ <el-table-column prop="guidance_hour" label="咨询时长/小时" width="120" align="center"/>
|
|
|
+ <el-table-column prop="consults_count" label="累计咨询人数" width="120" align="center">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <span class="ele-text-primary">{{row.guidance_count||row.consults_count}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="work_year" label="工作年限" width="100" align="center"/>
|
|
|
+ <el-table-column prop="sort" label="排序" sortable="custom" width="80" align="center"/>
|
|
|
+ <el-table-column prop="is_auth" label="认证" width="100" align="center">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <ele-dot :type="['danger', 'success','danger'][row.is_auth]" :ripple="row.status===0"
|
|
|
+ :text="['未认证','已认证','未认证'][row.status]"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="is_recommend" label="推荐" sortable="custom" width="100" align="center">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <ele-dot :type="['default', 'success','default'][row.is_recommend]" :ripple="row.is_recommend===0"
|
|
|
+ :text="['不推荐','推荐','不推荐'][row.is_recommend]"/>
|
|
|
+ <el-switch v-model="row.is_recommend" @change="editRecommend(row)" :active-value="1" :inactive-value="2"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="status" label="状态" width="100" align="center">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <ele-dot :type="['danger', 'success','danger'][row.status]" :ripple="row.status===0"
|
|
|
+ :text="['无效','正常','无效'][row.status]"/>
|
|
|
+ <el-switch v-model="row.status" @change="editStatus(row)" :active-value="1" :inactive-value="2"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="create_time_text" label="创建时间" min-width="160" align="center" show-overflow-tooltip/>
|
|
|
+ <el-table-column label="操作" width="200px" align="center" :resizable="false" fixed="right">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <el-link @click="edit(row)" icon="el-icon-edit" type="primary" :underline="false" v-if="permission.includes('sys:supervisors:edit')">修改</el-link>
|
|
|
+ <el-popconfirm title="确定要删除此导师吗?" @confirm="remove(row)" class="ele-action" v-if="permission.includes('sys:supervisors:delete')">
|
|
|
+ <el-link slot="reference" icon="el-icon-delete" type="danger" :underline="false" >删除</el-link>
|
|
|
+ </el-popconfirm>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </template>
|
|
|
+ </ele-data-table>
|
|
|
+ </el-card>
|
|
|
+ <!-- 编辑弹窗 -->
|
|
|
+ <el-dialog :title="editForm.id?'修改导师':'新增导师'" :visible.sync="showEdit" width="1200px"
|
|
|
+ @closed="editForm={confirm_status: 1,status:1}" :destroy-on-close="true" top="20px" :close-on-click-modal="false" custom-class="ele-dialog-form" :lock-scroll="false">
|
|
|
+ <el-form :model="editForm" ref="editForm" :rules="editRules" label-width="140px">
|
|
|
+ <el-row :gutter="15">
|
|
|
+ <el-col :sm="12">
|
|
|
+ <el-form-item label="头像:">
|
|
|
+ <uploadImage v-if="showEdit" :limit="1" v-model="editForm.avatar"></uploadImage>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="类型:">
|
|
|
+ <el-select v-model="editForm.type" placeholder="请选择类型" class="ele-fluid">
|
|
|
+ <el-option label="专项导师" :value="1"/>
|
|
|
+ <el-option label="研究导师" :value="2"/>
|
|
|
+ <el-option label="发展导师" :value="3"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="姓名:" prop="name">
|
|
|
+ <el-input v-model="editForm.name" placeholder="请输入姓名" maxlength="20" clearable/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="手机号:" prop="mobile">
|
|
|
+ <el-input v-model="editForm.mobile" placeholder="请输入手机号" maxlength="11" clearable/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="职业:" prop="occupation">
|
|
|
+ <el-input v-model="editForm.occupation" placeholder="请输入职业" maxlength="30" clearable/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="咨询时长:" prop="guidance_hour">
|
|
|
+ <el-input v-model="editForm.guidance_hour" type="number" placeholder="请输入咨询时长" maxlength="20" clearable>
|
|
|
+ <template v-slot:append>
|
|
|
+ <span>小时</span>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :sm="12">
|
|
|
+ <el-form-item label="累计培训项目数量:" prop="training_count">
|
|
|
+ <el-input v-model="editForm.training_count" type="number" placeholder="请输入累计培训项目数量" maxlength="10" clearable>
|
|
|
+ <template v-slot:append>
|
|
|
+ <span>项</span>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="累计咨询人数:" prop="guidance_count">
|
|
|
+ <el-input v-model="editForm.guidance_count" type="number" placeholder="请输入累计咨询人数" maxlength="20" clearable>
|
|
|
+ <template v-slot:append>
|
|
|
+ <span>人</span>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工作年限:" prop="work_year">
|
|
|
+ <el-input v-model="editForm.work_year" type="number" placeholder="请输入工作年限" maxlength="20" clearable>
|
|
|
+ <template v-slot:append>
|
|
|
+ <span>年</span>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="排序:" prop="sort">
|
|
|
+ <el-input v-model="editForm.sort" type="number" placeholder="请输入排序,倒序" maxlength="10" clearable>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="认证:" prop="is_auth">
|
|
|
+ <el-radio-group v-model="editForm.is_auth">
|
|
|
+ <el-radio :label="1">已认证</el-radio>
|
|
|
+ <el-radio :label="2">未认证</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="推荐:" prop="is_recommend">
|
|
|
+ <el-radio-group v-model="editForm.is_recommend">
|
|
|
+ <el-radio :label="1">推荐</el-radio>
|
|
|
+ <el-radio :label="2">不推荐</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态:" prop="status">
|
|
|
+ <el-radio-group v-model="editForm.status">
|
|
|
+ <el-radio :label="1">正常</el-radio>
|
|
|
+ <el-radio :label="2">无效</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :sm="24">
|
|
|
+ <el-form-item label="描述:" prop="description">
|
|
|
+ <el-input v-model="editForm.description" type="textarea" row="3" placeholder="请输入导师描述" maxlength="200" clearable/>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="个人简介:">
|
|
|
+ <tinymce-editor v-model="editForm.intro" :init="editContent"/>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="个人履历:">
|
|
|
+ <tinymce-editor v-model="editForm.resume" :init="editContent"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer">
|
|
|
+ <el-button @click="showEdit=false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="save">保存</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import uploadImage from '../../../components/uploadImage'
|
|
|
+import TinymceEditor from '@/components/TinymceEditor'
|
|
|
+import { mapGetters } from "vuex";
|
|
|
+export default {
|
|
|
+ name: "SysSupervisorsPackage",
|
|
|
+ components: {uploadImage,TinymceEditor},
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ avatar: require('@/assets/avatar.png'),
|
|
|
+ table: {url: '/supervisors/index', where: {type:0,status:0}}, // 表格配置
|
|
|
+ choose: [], // 表格选中数据
|
|
|
+ info: {id:0},
|
|
|
+ page: 1,
|
|
|
+ showEdit: false, // 是否显示表单弹窗
|
|
|
+ editForm: {
|
|
|
+ name: '',
|
|
|
+ status: 1,
|
|
|
+ is_auth: 2,
|
|
|
+ is_recommend: 2
|
|
|
+ }, // 表单数据
|
|
|
+ editRules: { // 表单验证规则
|
|
|
+ avatar: [
|
|
|
+ {required: true, message: '请上传导师头像', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ type: [
|
|
|
+ {required: true, message: '请选择导师类型', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ name: [
|
|
|
+ {required: true, message: '请输入导师姓名', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ mobile: [
|
|
|
+ {required: true, message: '请输入手机账号', trigger: 'blur'},
|
|
|
+ {pattern: /^1[2-9][0-9]{9}$/, message: '手机号码格式不正确',trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ occupation: [
|
|
|
+ {required: true, message: '请输入职业', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ guidance_hour: [
|
|
|
+ {required: true, message: '请输入咨询时长/小时', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ training_count: [
|
|
|
+ {required: true, message: '请输入累计培训项目数量', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ guidance_count: [
|
|
|
+ {required: true, message: '请输入累计咨询指导人数', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ work_year: [
|
|
|
+ {required: true, message: '请输入工作年限', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ description: [
|
|
|
+ {required: true, message: '请输入导师描述', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ status: [
|
|
|
+ {required: true, message: '请选择上架状态', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapGetters(["permission"]),
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /* 显示编辑 */
|
|
|
+ edit(row) {
|
|
|
+ this.editForm = Object.assign({}, row);
|
|
|
+ this.showEdit = true;
|
|
|
+ },
|
|
|
+ /* 保存编辑 */
|
|
|
+ save() {
|
|
|
+ this.$message.closeAll();
|
|
|
+ this.$refs['editForm'].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ const loading = this.$loading({lock: true});
|
|
|
+ this.$http.post('/supervisors/edit', this.editForm).then(res => {
|
|
|
+ loading.close();
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.showEdit = false;
|
|
|
+ this.$message({type: 'success', message: res.data.msg});
|
|
|
+ this.$refs.table.reload();
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.data.msg);
|
|
|
+ }
|
|
|
+ }).catch(e => {
|
|
|
+ loading.close();
|
|
|
+ this.$message.error(e.message);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /* 删除 */
|
|
|
+ remove(row) {
|
|
|
+ this.$message.closeAll();
|
|
|
+ if (!row) { // 批量删除
|
|
|
+ if (this.choose.length === 0) return this.$message.error('请至少选择一条数据');
|
|
|
+ let ids = this.choose.map(d => d.id);
|
|
|
+ this.$confirm('确定要删除选中的导师吗?', '提示', {type: 'warning'}).then(() => {
|
|
|
+ const loading = this.$loading({lock: true});
|
|
|
+ this.$http.post('/supervisors/delete', {id: ids}).then(res => {
|
|
|
+ loading.close();
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.$message({type: 'success', message: res.data.msg});
|
|
|
+ this.$refs.table.reload();
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.data.msg);
|
|
|
+ }
|
|
|
+ }).catch(e => {
|
|
|
+ loading.close();
|
|
|
+ this.$message.error(e.message);
|
|
|
+ });
|
|
|
+ }).catch(() => 0);
|
|
|
+ } else { // 单个删除
|
|
|
+ const loading = this.$loading({lock: true});
|
|
|
+ this.$http.post('/supervisors/delete', {id:row.id}).then(res => {
|
|
|
+ loading.close();
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.$message({type: 'success', message: res.data.msg});
|
|
|
+ this.$refs.table.reload();
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.data.msg);
|
|
|
+ }
|
|
|
+ }).catch(e => {
|
|
|
+ loading.close();
|
|
|
+ this.$message.error(e.message);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /* 更改状态 */
|
|
|
+ editStatus(row) {
|
|
|
+ this.$message.closeAll();
|
|
|
+ const loading = this.$loading({lock: true});
|
|
|
+ let params = Object.assign({}, row);
|
|
|
+ this.$http.post('/supervisors/status', params).then(res => {
|
|
|
+ loading.close();
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.$message({type: 'success', message: res.data.msg});
|
|
|
+ } else {
|
|
|
+ row.status = !row.status ? 2 : 1;
|
|
|
+ this.$message.error(res.data.msg);
|
|
|
+ }
|
|
|
+ }).catch(e => {
|
|
|
+ loading.close();
|
|
|
+ this.$message.error(e.message);
|
|
|
+ });
|
|
|
+ },/* 更改状态 */
|
|
|
+ editRecommend(row) {
|
|
|
+ this.$message.closeAll();
|
|
|
+ const loading = this.$loading({lock: true});
|
|
|
+ let params = Object.assign({}, row);
|
|
|
+ this.$http.post('/supervisors/recommend', params).then(res => {
|
|
|
+ loading.close();
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.$message({type: 'success', message: res.data.msg});
|
|
|
+ } else {
|
|
|
+ row.is_recommend = !row.is_recommend ? 2 : 1;
|
|
|
+ this.$message.error(res.data.msg);
|
|
|
+ }
|
|
|
+ }).catch(e => {
|
|
|
+ loading.close();
|
|
|
+ this.$message.error(e.message);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.ele-block >>> .el-upload, .ele-block >>> .el-upload-dragger {
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.el-divider {
|
|
|
+ margin: 15px 0 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.search-label {
|
|
|
+ padding: 15px 0 20px;
|
|
|
+}
|
|
|
+.goods-name {
|
|
|
+
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ .name {
|
|
|
+ margin-left: 5px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|