Explorar el Código

查看信息与设置用户权限

dsy hace 2 meses
padre
commit
24f8f91e87

+ 2 - 5
src/api/article.js

@@ -44,9 +44,6 @@ export function getSysConfig() {
 }
 
 // 音频字幕打点-火山
-export function getWordTimes (data) {
-  return http.post(
-    `${process.env.VUE_APP_EepServer}?MethodName=tool-AudioTextDot_OldFormat`,
-    data,
-  );
+export function getWordTimes(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=tool-AudioTextDot_OldFormat`, data);
 }

+ 28 - 0
src/api/popedom.js

@@ -0,0 +1,28 @@
+import { http } from '@/utils/http';
+
+/**
+ * 得到系统权限列表
+ * @param {object} data
+ */
+export function GetSysPopedomList(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=popedom_manager-GetSysPopedomList`, data);
+}
+
+/**
+ * 设置用户权限
+ * @param {object} data
+ * @param {string} data.user_id 用户ID
+ * @param {string} data.popedom_code_list 权限编码列表
+ */
+export function SetUserPopedom(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=popedom_manager-SetUserPopedom`, data);
+}
+
+/**
+ * 得到用户权限列表
+ * @param {object} data
+ * @param {string} data.user_id 用户ID
+ */
+export function GetUserPopedomList(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=popedom_manager-GetUserPopedomList`, data);
+}

+ 45 - 20
src/views/personal_workbench/project/ProjectInfoManage.vue

@@ -1,6 +1,13 @@
 <template>
   <div class="project-info">
-    <MenuPage cur-key="/personal_workbench/project" />
+    <template
+      v-if="['/personal_workbench/project', '/project_manage/book', '/project_manage/project'].includes(backPath)"
+    >
+      <MenuPage :cur-key="backPath" />
+    </template>
+    <template v-if="['org/book', 'org/final', 'org/project'].includes(backPath)">
+      <ProjectMenu :cur-key="backPath" />
+    </template>
 
     <div class="project-info__header">
       <div class="menu-container">
@@ -9,7 +16,7 @@
       <div class="courseware">
         <span class="name-path"></span>
         <div class="operator">
-          <span class="link" @click="$router.push({ path: `/personal_workbench/project` })">返回项目列表</span>
+          <span class="link" @click="$router.push({ path: backPath })">返回项目列表</span>
         </div>
       </div>
     </div>
@@ -19,12 +26,12 @@
         <span class="label">项目名称</span>
         <div class="project-item">
           <span>{{ project.name }}</span>
-          <span class="link" @click="showUpdateField('name', project.name)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('name', project.name)">更改</span>
         </div>
         <span class="label">项目分类</span>
         <div class="project-item">
           <span>{{ project.category }}</span>
-          <span class="link" @click="showUpdateField('category', project.category)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('category', project.category)">更改</span>
         </div>
 
         <span class="label" style="line-height: 290px">教材封面</span>
@@ -33,7 +40,12 @@
             <img :src="project.cover_image_file_url" alt="cover image" />
           </div>
           <div v-else></div>
-          <span class="link" @click="showUpdateField('cover_image_file_url', project.cover_image_file_url)">更改</span>
+          <span
+            v-if="isManage"
+            class="link"
+            @click="showUpdateField('cover_image_file_url', project.cover_image_file_url)"
+            >更改</span
+          >
         </div>
 
         <div class="label label-list">
@@ -46,12 +58,12 @@
         <div class="project-item info-list">
           <div class="info-item">
             <span>{{ project.language }}</span>
-            <span class="link" @click="showUpdateField('language', project.language)">更改</span>
+            <span v-if="isManage" class="link" @click="showUpdateField('language', project.language)">更改</span>
           </div>
 
           <div class="info-item">
             <span>{{ project.publisher }}</span>
-            <span class="link" @click="showUpdateField('publisher', project.publisher)">更改</span>
+            <span v-if="isManage" class="link" @click="showUpdateField('publisher', project.publisher)">更改</span>
           </div>
 
           <div class="info-item">
@@ -60,17 +72,17 @@
                 {{ label }}{{ index < project.label_list.length - 1 ? ',' : '' }}
               </span>
             </span>
-            <span class="link" @click="showUpdateField('label_list', project.label_list)">更改</span>
+            <span v-if="isManage" class="link" @click="showUpdateField('label_list', project.label_list)">更改</span>
           </div>
 
           <div class="info-item">
             <span>{{ project.topic }}</span>
-            <span class="link" @click="showUpdateField('topic', project.topic)">更改</span>
+            <span v-if="isManage" class="link" @click="showUpdateField('topic', project.topic)">更改</span>
           </div>
 
           <div class="info-item">
             <span>{{ project.editor }}</span>
-            <span class="link" @click="showUpdateField('editor', project.editor)">更改</span>
+            <span v-if="isManage" class="link" @click="showUpdateField('editor', project.editor)">更改</span>
           </div>
         </div>
       </div>
@@ -79,17 +91,19 @@
         <span class="label">内容简介</span>
         <div class="project-item">
           <span>{{ project.content_intro }}</span>
-          <span class="link" @click="showUpdateField('content_intro', project.content_intro)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('content_intro', project.content_intro)">
+            更改
+          </span>
         </div>
         <span class="label">选题背景</span>
         <div class="project-item">
           <span>{{ project.background }}</span>
-          <span class="link" @click="showUpdateField('background', project.background)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('background', project.background)">更改</span>
         </div>
         <span class="label">作者简介</span>
         <div class="project-item">
           <span>{{ project.author_intro }}</span>
-          <span class="link" @click="showUpdateField('author_intro', project.author_intro)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('author_intro', project.author_intro)">更改</span>
         </div>
       </div>
 
@@ -97,32 +111,38 @@
         <span class="label" style="line-height: 16px">预计容量<br />(课数)</span>
         <div class="project-item">
           <span>{{ project.content_count_YG }}</span>
-          <span class="link" @click="showUpdateField('content_count_YG', project.content_count_YG)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('content_count_YG', project.content_count_YG)">
+            更改</span
+          >
         </div>
         <span class="label">预计字数</span>
         <div class="project-item">
           <span>{{ project.word_count_YG }}</span>
-          <span class="link" @click="showUpdateField('word_count_YG', project.word_count_YG)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('word_count_YG', project.word_count_YG)">
+            更改</span
+          >
         </div>
         <span class="label">计划出版日期</span>
         <div class="project-item">
           <span>{{ project.plan_publish_date }}</span>
-          <span class="link" @click="showUpdateField('plan_publish_date', project.plan_publish_date)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('plan_publish_date', project.plan_publish_date)">
+            更改</span
+          >
         </div>
         <span class="label">读者对象</span>
         <div class="project-item">
           <span>{{ project.reader }}</span>
-          <span class="link" @click="showUpdateField('reader', project.reader)">更改</span>
+          <span v-if="isManage" class="link" @click="showUpdateField('reader', project.reader)">更改</span>
         </div>
         <span class="label">项目组长</span>
         <div class="project-item">
           <span>{{ project.leader_name_desc }}</span>
-          <span class="link" @click="selectLeader">更改</span>
+          <span v-if="isManage" class="link" @click="selectLeader">更改</span>
         </div>
         <span class="label">项目成员</span>
         <div class="project-item">
           <span>{{ project.member_name_desc }}</span>
-          <span class="link" @click="selectMembers">更改</span>
+          <span v-if="isManage" class="link" @click="selectMembers">更改</span>
         </div>
         <span class="label">创建人</span>
         <div class="project-item">
@@ -165,6 +185,7 @@ import { GetUserList_ID } from '@/api/user';
 import SelectMembers from '@/views/create_project/selectProjectMembers.vue';
 import MenuPage from '@/views/personal_workbench/common/menu.vue';
 import UpdateProjectField from './components/UpdateProjectField.vue';
+import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
 
 export default {
   name: 'ProjectInfoManage',
@@ -172,11 +193,15 @@ export default {
     SelectMembers,
     MenuPage,
     UpdateProjectField,
+    ProjectMenu,
   },
   data() {
+    console.log(this.$route.query);
+
     return {
       id: this.$route.params.id,
-      isManage: this.$route.query.isManage,
+      isManage: this.$route.query.isManage === 'true', // 是否为管理模式
+      backPath: this.$route.query.backPath || '/personal_workbench/project',
       labelInput: '',
       selectMembersTitle: '',
       visibleMembers: false,

+ 11 - 1
src/views/project_manage/book/index.vue

@@ -26,7 +26,17 @@
 
         <el-table-column label="操作" fixed="right" width="150" header-align="center">
           <template slot-scope="{ row }">
-            <span class="link">查看信息</span>
+            <span
+              class="link"
+              @click="
+                $router.push({
+                  path: `/personal_workbench/project_info/${row.id}`,
+                  query: { isManage: false, backPath: '/project_manage/book' },
+                })
+              "
+            >
+              查看信息
+            </span>
             <span class="link" @click="previewCourseware(row.id)">预览教材</span>
           </template>
         </el-table-column>

+ 11 - 1
src/views/project_manage/org/book/index.vue

@@ -26,7 +26,17 @@
 
         <el-table-column label="操作" fixed="right" width="260" align="center" header-align="center">
           <template slot-scope="{ row }">
-            <span class="link">查看信息</span>
+            <span
+              class="link"
+              @click="
+                $router.push({
+                  path: `/personal_workbench/project_info/${row.id}`,
+                  query: { isManage: false, backPath: 'org/book' },
+                })
+              "
+            >
+              查看信息
+            </span>
             <span class="link" @click="previewBook(row.id)">预览信息</span>
           </template>
         </el-table-column>

+ 10 - 1
src/views/project_manage/org/final/index.vue

@@ -20,7 +20,16 @@
 
         <el-table-column label="操作" fixed="right" width="240" align="center" header-align="center">
           <template slot-scope="{ row }">
-            <span class="link">查看信息</span>
+            <span
+              class="link"
+              @click="
+                $router.push({
+                  path: `/personal_workbench/project_info/${row.id}`,
+                  query: { isManage: false, backPath: 'org/final' },
+                })
+              "
+              >查看信息</span
+            >
             <span class="link" @click="previewProject(row.id)">预览项目</span>
             <span class="link">预览历史版本</span>
           </template>

+ 10 - 1
src/views/project_manage/org/project/index.vue

@@ -23,7 +23,16 @@
 
         <el-table-column fixed="right" label="操作" width="150" align="center" header-align="center">
           <template slot-scope="{ row }">
-            <span class="link">查看信息</span>
+            <span
+              class="link"
+              @click="
+                $router.push({
+                  path: `/personal_workbench/project_info/${row.id}`,
+                  query: { isManage: false, backPath: 'org/project' },
+                })
+              "
+              >查看信息</span
+            >
             <span class="link" @click="previewProject(row.id)">预览项目</span>
           </template>
         </el-table-column>

+ 10 - 1
src/views/project_manage/project/index.vue

@@ -25,7 +25,16 @@
 
         <el-table-column label="操作" fixed="right" width="400" align="center" header-align="center">
           <template slot-scope="{ row }">
-            <span class="link">查看信息</span>
+            <span
+              class="link"
+              @click="
+                $router.push({
+                  path: `/personal_workbench/project_info/${row.id}`,
+                  query: { isManage: false, backPath: '/project_manage/project' },
+                })
+              "
+              >查看信息</span
+            >
             <span class="link" @click="previewProject(row.id)">预览项目</span>
             <span class="link" @click="viewMindMap(row.id)">思维导图</span>
             <span class="link" @click="viewVisNetwork(row.id)">知识图谱</span>

+ 12 - 13
src/views/user_manage_org/AddPerson.vue

@@ -27,16 +27,16 @@
           :class="['rightimg']"
           src="@/assets/password1.png"
           alt=""
-          @click="lookParssowrd(1)"
+          @click="lookPassword(1)"
         />
         <img
           v-show="parsswordType == 'text'"
           :class="['rightimg']"
           src="@/assets/password2.png"
           alt=""
-          @click="lookParssowrd(1)"
+          @click="lookPassword(1)"
         />
-        <p :class="passwordError ? 'textRed' : 'psswordHint'">请输入8-12位大写字母、小写字母和数字组合。</p>
+        <p :class="passwordError ? 'textRed' : 'passwordHint'">请输入8-12位大写字母、小写字母和数字组合。</p>
       </el-form-item>
       <el-form-item prop="confirmPwd" label="重复密码">
         <el-input
@@ -51,19 +51,19 @@
           :class="['rightimg']"
           src="@/assets/password1.png"
           alt=""
-          @click="lookParssowrd(2)"
+          @click="lookPassword(2)"
         />
         <img
           v-show="twoPasswordType == 'text'"
           :class="['rightimg']"
           src="@/assets/password2.png"
           alt=""
-          @click="lookParssowrd(2)"
+          @click="lookPassword(2)"
         />
-        <p :class="passwordErrorTwo ? 'textRed' : 'psswordHint'">请再次输入密码。这两项必须相同。</p>
+        <p :class="passwordErrorTwo ? 'textRed' : 'passwordHint'">请再次输入密码。这两项必须相同。</p>
       </el-form-item>
       <el-form-item>
-        <el-button @click="handleCancle">取 消</el-button>
+        <el-button @click="handleCancale">取 消</el-button>
         <el-button :loading="loading" type="primary" @click="submitOrg">确 定</el-button>
       </el-form-item>
     </el-form>
@@ -128,7 +128,7 @@ export default {
       this.dataInfo[key] = this.dataInfo[key].trim();
     },
     // 查看密码
-    lookParssowrd(number) {
+    lookPassword(number) {
       if (number === 1) {
         if (this.parsswordType === 'text') {
           this.parsswordType = 'password';
@@ -144,7 +144,6 @@ export default {
     // 验证密码
     changeParssword() {
       if (this.dataInfo.password) {
-        // let reg = /^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*).{8,12}$/;
         let reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{8,12}$/;
         let result = reg.test(this.dataInfo.password);
         if (result) {
@@ -164,8 +163,8 @@ export default {
         this.passwordErrorTwo = false;
       }
     },
-    handleCancle() {
-      this.$emit('handleCancle');
+    handleCancale() {
+      this.$emit('handleCancale');
     },
     submitOrg() {
       this.loading = true;
@@ -182,7 +181,7 @@ export default {
             .then((res) => {
               if (res.status === 1) {
                 _this.loading = false;
-                _this.$emit('handleCancle');
+                _this.$emit('handleCancale');
                 _this.$emit('queryList');
                 _this.$message({
                   type: 'success',
@@ -224,7 +223,7 @@ export default {
   }
 }
 
-.psswordHint {
+.passwordHint {
   width: 334px;
   padding: 0;
   margin: 0;

+ 98 - 0
src/views/user_manage_org/SetPopedom.vue

@@ -0,0 +1,98 @@
+<template>
+  <el-dialog
+    :visible="visible"
+    width="420px"
+    :close-on-click-modal="false"
+    :append-to-body="true"
+    :title="`设置(${userName})的用户权限`"
+    @close="handleClose"
+  >
+    <div class="popedom_list">
+      <el-switch
+        v-for="item in popedom_list"
+        :key="item.popedom_code"
+        v-model="item.is_selected"
+        :active-text="item.popedom_name"
+      />
+    </div>
+    <div slot="footer">
+      <el-button @click="handleClose">取 消</el-button>
+      <el-button type="primary" @click="setUserPopedom">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { GetSysPopedomList, GetUserPopedomList, SetUserPopedom } from '@/api/popedom';
+
+export default {
+  name: 'SetPopedom',
+  props: {
+    visible: {
+      type: Boolean,
+      required: true,
+    },
+    userId: {
+      type: String,
+      required: true,
+    },
+    userName: {
+      type: String,
+      required: true,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      popedom_list: [],
+      initPopedomList: [],
+    };
+  },
+  watch: {
+    userId(newVal) {
+      if (newVal) {
+        GetUserPopedomList({ user_id: newVal }).then(({ popedom_list }) => {
+          popedom_list.forEach(({ popedom_code, is_selected }) => {
+            const popedom = this.popedom_list.find((item) => item.popedom_code === popedom_code);
+            if (popedom) {
+              popedom.is_selected = is_selected === 'true';
+            }
+          });
+        });
+      }
+    },
+  },
+  created() {
+    GetSysPopedomList().then(({ popedom_list }) => {
+      let list = popedom_list.map((item) => ({
+        ...item,
+        is_selected: false,
+      }));
+      this.popedom_list = list;
+      this.initPopedomList = JSON.parse(JSON.stringify(list));
+    });
+  },
+  methods: {
+    handleClose() {
+      this.$emit('update:visible', false);
+    },
+    setUserPopedom() {
+      SetUserPopedom({
+        user_id: this.userId,
+        popedom_code_list: this.popedom_list.filter((item) => item.is_selected).map((item) => item.popedom_code),
+      }).then(() => {
+        this.$message.success('设置权限成功');
+        this.handleClose();
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.popedom_list {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+}
+</style>

+ 21 - 5
src/views/user_manage_org/index.vue

@@ -78,7 +78,7 @@
         <el-table-column prop="operation" label="操作" fixed="right" width="200" align="center" header-align="center">
           <template slot-scope="{ row }">
             <span class="link" @click="setOrgUserStop(row)">{{ row.is_stop === 'true' ? '启用' : '停用' }}</span>
-            <span class="link" @click="setPower(row)">设置权限</span>
+            <span class="link" @click="setUserPopedom(row.id, row.user_name)">设置权限</span>
           </template>
         </el-table-column>
       </el-table>
@@ -93,24 +93,28 @@
       title="添加用户"
       :close-on-click-modal="false"
     >
-      <add-person @handleCancle="handleCancle" @queryList="queryList" />
+      <AddPerson @handleCancale="handleCancale" @queryList="queryList" />
     </el-dialog>
+
+    <SetPopedom :visible.sync="visibleSetPopedom" :user-id="curUserId" :user-name="curUserName" />
   </div>
 </template>
 
 <script>
 import PaginationPage from '@/components/PaginationPage.vue';
+import AddPerson from './AddPerson.vue';
+import SetPopedom from './SetPopedom.vue';
 
 import { queryOrgUserList } from '@/api/list.js';
 import { setOrgUserStop } from '@/api/org.js';
 import { getToken } from '@/utils/auth';
-import AddPerson from './AddPerson.vue';
 
 export default {
   name: 'UserManageOrg',
   components: {
     PaginationPage,
     AddPerson,
+    SetPopedom,
   },
   data() {
     const token = getToken();
@@ -169,6 +173,9 @@ export default {
           label: '未停用',
         },
       ],
+      visibleSetPopedom: false,
+      curUserId: '',
+      curUserName: '',
     };
   },
   mounted() {
@@ -194,10 +201,19 @@ export default {
     updateOrg() {
       this.orgAddFlag = true;
     },
-    handleCancle() {
+    handleCancale() {
       this.orgAddFlag = false;
     },
-    setPower(row) {},
+    /**
+     * 设置用户权限
+     * @param {string} user_id - 用户ID
+     * @param {string} user_name - 用户名
+     */
+    setUserPopedom(user_id, user_name) {
+      this.curUserId = user_id;
+      this.visibleSetPopedom = true;
+      this.curUserName = user_name;
+    },
     setOrgUserStop(row) {
       let data = {
         user_id_list: [row.id],