wesmiler пре 2 месеци
родитељ
комит
f70ffb89c0
2 измењених фајлова са 402 додато и 0 уклоњено
  1. 398 0
      addons/admin/src/views/system/meeting/index.vue
  2. 4 0
      app/Services/Common/UserService.php

+ 398 - 0
addons/admin/src/views/system/meeting/index.vue

@@ -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>

+ 4 - 0
app/Services/Common/UserService.php

@@ -141,6 +141,10 @@ class UserService extends BaseService
             return message($error, false);
         }
 
+        if($data['type'] == 2){
+            $data['role_ids'] = [6];
+        }
+
         // 删除已存在的用户角色关系数据
         $userRoleService = new UserRoleService();
         $userRoleService->deleteUserRole($result);