3 Achegas 92e98883a5 ... fe2416457a

Autor SHA1 Mensaxe Data
  dsy fe2416457a Merge branch 'master' of http://60.205.254.193:3000/GCLS/eep_page hai 1 semana
  dsy a2edaf1db7 更新结构字段 hai 1 semana
  dsy 55b08a53ac 修改问题 hai 1 semana

+ 12 - 1
src/api/org.js

@@ -21,6 +21,17 @@ export function createUser(data) {
 }
 
 // 得到机构信息
-export function getOrgInfo(data) {
+export function GetOrgInfo(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=org_manager-GetOrgInfo`, data);
 }
+
+/**
+ * 更改机构指定字段的值
+ * @param {object} data 请求数据
+ * @param {string} data.org_id 机构 ID
+ * @param {string} data.field_name 字段名称
+ * @param {any} data.value 字段值
+ */
+export function UpdateOrgFieldValue(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=org_manager-UpdateOrgFieldValue`, data);
+}

+ 8 - 10
src/components/RichText.vue

@@ -205,7 +205,7 @@ export default {
               const formatName = `paragraphSpacing${config}_em`;
               editor.formatter.register(formatName, {
                 selector: 'p',
-                styles: { 'margin-bottom': config + 'em' },
+                styles: { 'margin-bottom': `${config}em` },
               });
             });
 
@@ -261,7 +261,7 @@ export default {
           // 添加段落间距下拉菜单
           editor.ui.registry.addMenuButton('paragraphSpacing', {
             icon: 'paragraph',
-            //text: '段落间距',
+            // text: '段落间距',
             tooltip: '段落间距',
             fetch: (callback) => {
               const items = [];
@@ -924,9 +924,7 @@ export default {
         }
         if (eleMathArs.length === 0) return;
         await this.$nextTick();
-        window.MathJax.typesetPromise(eleMathArs).catch((err) =>
-          /* eslint-disable */ console.error(...oo_tx(`483836707_818_65_818_101_11`, 'MathJax error:', err))
-        );
+        window.MathJax.typesetPromise(eleMathArs).catch((err) => console.error(err));
         this.mathEleIsInit = true;
       }
     },
@@ -1034,12 +1032,12 @@ export default {
         if (!styles.fontSize && computed.fontSize && computed.fontSize !== 'inherit') {
           const fontSize = computed.fontSize;
           const pxValue = parseFloat(fontSize);
-          if (!isNaN(pxValue)) {
+          if (isNaN(pxValue)) {
+            styles.fontSize = fontSize;
+          } else {
             // px转pt公式:pt = px * 3/4
             const ptValue = Math.round(pxValue * 0.75 * 10) / 10;
-            styles.fontSize = ptValue + 'pt';
-          } else {
-            styles.fontSize = fontSize;
+            styles.fontSize = `${ptValue}pt`;
           }
         }
 
@@ -1076,7 +1074,7 @@ export default {
         {
           acceptNode: (node) => (node.textContent.trim() ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT),
         },
-        false
+        false,
       );
       return walker.nextNode();
     },

+ 2 - 2
src/utils/mathjax.js

@@ -4,11 +4,11 @@ window.MathJax = {
   tex: {
     inlineMath: [
       ['$', '$'],
-      ['(', ')'],
+      ['\\(', '\\)'],
     ], // 行内公式选择符
     displayMath: [
       ['$$', '$$'],
-      ['[', ']'],
+      ['\\[', '\\]'],
     ], // 段内公式选择符
     // 增加 physics 宏包
     packages: { '[+]': ['ams', 'physics'] },

+ 1 - 1
src/views/book/courseware/create/components/base/rich_text/RichText.vue

@@ -246,7 +246,7 @@ export default {
     compareAnnotationAndSave(existingIds) {
       this.data.note_list.forEach((annotation) => {
         if (!existingIds.has(annotation.id)) {
-          // 从你的数据存储中移除这个注释
+          // 从数据存储中移除这个注释
           this.selectContentSetMemo(null, annotation.id);
         }
       });

+ 67 - 115
src/views/org_manage/OrgManageInfo.vue

@@ -17,27 +17,25 @@
         <span class="label">名称</span>
         <div class="project-item">
           <span>{{ org_info.name }}</span>
-          <span class="link">更改</span>
+          <span class="link" @click="showUpdateField('name', org_info.name)">更改</span>
         </div>
         <span class="label">最大用户量</span>
         <div class="project-item">
           <span>{{ org_info.user_count_max }}</span>
-          <span class="link">更改</span>
+          <span class="link" @click="showUpdateField('user_count_max', org_info.user_count_max)">更改</span>
         </div>
         <span class="label">已注册用户数</span>
         <div class="project-item">
           <span>{{ org_info.user_count }}</span>
-          <span class="link">更改</span>
         </div>
         <span class="label">已停用用户数</span>
         <div class="project-item">
           <span>{{ org_info.user_count_stop }}</span>
-          <span class="link">更改</span>
         </div>
         <span class="label">最大项目量</span>
         <div class="project-item">
           <span>{{ org_info.project_count_max }}</span>
-          <span class="link">更改</span>
+          <span class="link" @click="showUpdateField('project_count_max', org_info.project_count_max)">更改</span>
         </div>
         <span class="label">已创建项目数</span>
         <div class="project-item">
@@ -54,152 +52,106 @@
         <span class="label" style="line-height: 16px">教材编辑<br />使用期限</span>
         <div class="project-item">
           <span>{{ org_info.use_end_date_book_edit }}</span>
-          <span class="link">更改</span>
+          <span class="link" @click="showUpdateField('use_end_date_book_edit', org_info.use_end_date_book_edit)">
+            更改
+          </span>
         </div>
         <span class="label" style="line-height: 16px">教材仓库<br />使用期限</span>
         <div class="project-item">
           <span>{{ org_info.use_end_date_book_store }}</span>
-          <span class="link">更改</span>
+          <span class="link" @click="showUpdateField('use_end_date_book_store', org_info.use_end_date_book_store)">
+            更改
+          </span>
         </div>
-      </div>
-      <div class="table-twocolumn">
         <span class="label">机构管理员</span>
         <div class="project-item">
           <span>{{ org_info.org_manager_name_desc }}</span>
-          <span class="link">更改</span>
         </div>
-        <span class="label">机构权限</span>
+        <span class="label" style="line-height: 16px">语音引擎<br />剩余可用次数</span>
         <div class="project-item">
-          <span>{{ org_info.org_popedom_name_desc }}</span>
-          <span class="link">更改</span>
+          <span>{{ org_info.speech_engine_lave_can_use_count }}</span>
+          <span
+            class="link"
+            @click="showUpdateField('speech_engine_lave_can_use_count', org_info.speech_engine_lave_can_use_count)"
+            >更改</span
+          >
         </div>
+      </div>
+      <div class="table-twocolumn">
         <span class="label">备注</span>
         <div class="project-item">
           <span>{{ org_info.memo }}</span>
-          <span class="link">更改</span>
+          <span class="link" @click="showUpdateField('memo', org_info.memo)">更改</span>
         </div>
       </div>
-      <!-- <el-form-item label="名称" prop="name" class="link-item">
-        <el-input v-if="1 === 2" v-model="org_info.name" placeholder="请输入名称" maxlength="20" disabled />
-
-        <span>{{ org_info.name }}</span>
-        <span class="link">更改</span>
-      </el-form-item>
-      <el-form-item label="最大用户量" prop="user_count_max" class="link-item">
-        <el-input v-if="1 === 2" v-model="org_info.user_count_max" type="number" disabled />
-        <span class="link">更改</span>
-      </el-form-item>
-      <el-form-item label="已注册用户数" prop="user_count" class="label-input link-item">
-        <el-input v-if="1 === 2" v-model="org_info.user_count" type="text" disabled />
-        <span class="link"></span>
-      </el-form-item>
-      <el-form-item label="已停用用户数" prop="user_count_stop" class="link-item">
-        <el-input v-if="1 === 2" v-model="org_info.user_count_stop" type="text" disabled />
-        <span class="link"></span>
-      </el-form-item>
-      <el-form-item label="最大项目量" prop="project_count_max" class="link-item">
-        <el-input
-          v-if="1 === 2"
-          v-model="org_info.project_count_max"
-          type="number"
-          placeholder="请输入最大项目量"
-          disabled
-        />
-        <span class="link">更改</span>
-      </el-form-item>
-      <el-form-item label="已创建项目数" prop="project_count" class="link-item">
-        <el-input v-if="1 === 2" v-model="org_info.project_count" disabled />
-        <span class="link"></span>
-      </el-form-item>
-
-      <el-form-item label="已上架教材数" prop="book_count" class="link-item">
-        <el-input v-if="1 === 2" v-model="org_info.book_count" disabled />
-        <span class="link"></span>
-      </el-form-item>
-      <el-form-item label="创建时间" prop="create_time" class="link-item">
-        <el-date-picker v-if="1 === 2" v-model="org_info.create_time" disabled />
-        <span class="link"></span>
-      </el-form-item>
-      <el-form-item prop="use_end_date_book_edit" class="link-item">
-        <span slot="label">教材编辑<br />使用期限</span>
-        <el-date-picker
-          v-if="1 === 2"
-          v-model="org_info.use_end_date_book_edit"
-          format="yyyy-MM-dd"
-          value-format="yyyy-MM-dd"
-          placeholder="选择日期"
-          disabled
-        ></el-date-picker>
-
-        <span class="link">更改</span>
-      </el-form-item>
-      <el-form-item prop="use_end_date_book_store" class="link-item">
-        <span slot="label">教材仓库<br />使用期限</span>
-
-        <el-date-picker
-          v-if="1 === 2"
-          v-model="org_info.use_end_date_book_store"
-          format="yyyy-MM-dd"
-          value-format="yyyy-MM-dd"
-          placeholder="选择日期"
-          disabled
-        ></el-date-picker>
-        <span class="link">更改</span>
-      </el-form-item>
-      <el-form-item label="机构管理员" prop="org_manager_name_desc" class="link-item link-all">
-        <el-input v-if="1 === 2" v-model="org_info.org_manager_name_desc" type="text" disabled />
-        <span class="link">更改</span>
-      </el-form-item>
-      <el-form-item label="机构权限" prop="org_popedom_name_desc" class="link-item link-all">
-        <el-input
-          v-if="1 === 2"
-          v-model="org_info.org_popedom_name_desc"
-          type="text"
-          placeholder="请输入机构权限"
-          disabled
-        />
-        <span class="link">更改</span>
-      </el-form-item>
-
-      <el-form-item label="备注" prop="memo" class="link-item link-all">
-        <el-input
-          v-if="1 === 2"
-          v-model="org_info.memo"
-          type="textarea"
-          :autosize="{ minRows: 4 }"
-          maxlength="1500"
-          show-word-limit
-          placeholder="请输入备注"
-          disabled
-        />
-        <span class="link">更改</span>
-      </el-form-item> -->
     </main>
+
+    <UpdateOrgField
+      :field="curField"
+      :value="curFieldValue"
+      :org-id="id"
+      :visible.sync="visibleUpdateField"
+      @updateOrgFieldValue="updateOrgFieldValue"
+    />
   </div>
 </template>
 
 <script>
-import { getOrgInfo } from '@/api/org.js';
+import UpdateOrgField from './components/UpdateOrgField.vue';
+
+import { GetOrgInfo, UpdateOrgFieldValue } from '@/api/org.js';
 
 export default {
   name: 'OrgManageInfo',
-  components: {},
+  components: {
+    UpdateOrgField,
+  },
   data() {
     return {
       id: this.$route.params.id,
-
       org_info: null,
+      visibleUpdateField: false,
+      curField: '',
+      curFieldValue: '',
     };
   },
   created() {
-    this.getProjectInfo();
+    this.getOrgInfo();
   },
   methods: {
-    getProjectInfo() {
-      getOrgInfo({ id: this.id }).then(({ org_info }) => {
+    getOrgInfo() {
+      GetOrgInfo({ id: this.id }).then(({ org_info }) => {
         this.org_info = org_info;
       });
     },
+    /**
+     * 显示更新字段弹窗
+     * @param {string} field - 字段名称
+     * @param {any} value - 字段值
+     */
+    showUpdateField(field, value) {
+      this.curField = field;
+      this.curFieldValue = value;
+      this.visibleUpdateField = true;
+    },
+    /**
+     * 更新机构字段值
+     * @param {string} field_name - 字段名称
+     * @param {any} value - 新的字段值
+     */
+    updateOrgFieldValue(field_name, value) {
+      UpdateOrgFieldValue({
+        org_id: this.id,
+        field_name,
+        value,
+      })
+        .then(() => {
+          this.getOrgInfo();
+        })
+        .catch((error) => {
+          console.error('更新机构字段值失败:', error);
+        });
+    },
   },
 };
 </script>

+ 104 - 0
src/views/org_manage/components/UpdateOrgField.vue

@@ -0,0 +1,104 @@
+<template>
+  <el-dialog
+    :title="`更新${fieldObj[field]}`"
+    :visible="visible"
+    :width="dialogWidth"
+    :close-on-click-modal="false"
+    @close="handleClose"
+  >
+    <template v-if="['name'].includes(field)">
+      <el-input v-model="stringValue" type="text" />
+    </template>
+
+    <template v-if="['memo'].includes(field)">
+      <el-input v-model="stringValue" type="textarea" :autosize="{ minRows: 4 }" maxlength="1500" show-word-limit />
+    </template>
+
+    <template v-if="['use_end_date_book_edit', 'use_end_date_book_store'].includes(field)">
+      <el-date-picker
+        v-model="stringValue"
+        type="date"
+        placeholder="选择日期"
+        format="yyyy-MM-dd"
+        value-format="yyyy-MM-dd"
+      />
+    </template>
+
+    <template v-if="['user_count_max', 'project_count_max', 'speech_engine_lave_can_use_count'].includes(field)">
+      <el-input v-model="stringValue" type="number" />
+    </template>
+
+    <div slot="footer">
+      <el-button @click="handleClose">取消</el-button>
+      <el-button type="primary" @click="confirm">确定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  name: 'UpdateOrgField',
+  props: {
+    field: {
+      type: String,
+      required: true,
+    },
+    value: {
+      type: [String, Number, Array, Object],
+      required: true,
+    },
+    orgId: {
+      type: String,
+      required: true,
+    },
+    visible: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      fieldObj: {
+        name: '名称',
+        user_count_max: '最大用户量',
+        project_count_max: '最大项目量',
+        speech_engine_lave_can_use_count: '语音引擎剩余可用次数',
+        use_end_date_book_edit: '教材编辑使用期限',
+        use_end_date_book_store: '教材仓库使用期限',
+        memo: '备注',
+      },
+      stringValue: this.value,
+    };
+  },
+  computed: {
+    dialogWidth() {
+      if (['use_end_date_book_edit', 'use_end_date_book_store'].includes(this.field)) {
+        return '260px';
+      }
+      return '550px';
+    },
+  },
+  watch: {
+    value(newVal) {
+      this.stringValue = newVal;
+
+      if (['use_end_date_book_edit', 'use_end_date_book_store'].includes(this.field)) {
+        const date = new Date();
+        this.stringValue = newVal === '0-00-00' ? `${date.getFullYear()}-${date.getMonth()}-${date.getDay()}` : newVal;
+      }
+    },
+  },
+  methods: {
+    handleClose() {
+      this.$emit('update:visible', false);
+    },
+    confirm() {
+      this.$emit('updateOrgFieldValue', this.field, this.stringValue);
+
+      this.handleClose();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 3 - 0
src/views/personal_workbench/edit_task/edit/index.vue

@@ -112,6 +112,7 @@ export default {
         color: '#000000', // 文字颜色
         text_decoration: 'none', // 装饰线样式
         font_style: 'normal', // 字体样式
+        backgroundColor: 'transparent', // 背景颜色
       },
     };
   },
@@ -169,6 +170,7 @@ export default {
       this.format.text_decoration = style.textDecoration || 'none';
       this.format.font_style = style.fontStyle || 'normal';
       this.format.isCopy = true;
+      this.format.backgroundColor = style.backgroundColor || 'transparent';
     },
     // 粘贴格式
     pasteFormat() {
@@ -186,6 +188,7 @@ export default {
           color: this.format.color,
           'text-decoration': this.format.text_decoration,
           'font-style': this.format.font_style,
+          'background-color': this.format.backgroundColor,
         },
       });
       activeEditor.formatter.apply('customFormat');