liushengqiang пре 1 година
родитељ
комит
3b3f780056

+ 6 - 0
src/views/setting/api.ts

@@ -41,3 +41,9 @@ export const api_tenantInfoPage = (params: object) => {
     data: params
   });
 };
+/** 更新学校信息 */
+export const api_schoolUpdate = (params: object) => {
+  return request.post('/edu-app/school/update', {
+    data: params
+  });
+};

+ 2 - 0
src/views/setting/components/schoolInfo/index.module.less

@@ -2,6 +2,8 @@
     position: relative;
     width: 100Px;
     height: 100Px;
+    border-radius: 50%;
+    overflow: hidden;
 
     .changeHead {
         position: absolute;

+ 28 - 13
src/views/setting/components/schoolInfo/index.tsx

@@ -18,6 +18,7 @@ import { useUserStore } from '/src/store/modules/users';
 import UploadFile from '/src/components/upload-file';
 import { Add } from '@vicons/ionicons5';
 import {
+  api_schoolUpdate,
   api_teacherPage,
   api_tenantInfoUpdateStatus,
   api_userResetPassword
@@ -31,11 +32,12 @@ export default defineComponent({
     const user = useUserStore();
 
     const forms = reactive({
-      schoolName: user.info.schoolInfos?.[0]?.name,
-      avatar: user.info.schoolInfos?.[0]?.avatar || user.info.avatar
+      name: user.info.schoolInfos?.[0]?.name,
+      logo: user.info.schoolInfos?.[0]?.logo || user.info.avatar
     });
     const data = reactive({
       loading: false,
+      schoolLoading: true,
       dataList: [] as any[],
 
       modal: false,
@@ -166,31 +168,41 @@ export default defineComponent({
         }
       });
     };
+
+    const changeSchoolInfo = async () => {
+      data.schoolLoading = false;
+      await api_schoolUpdate({ ...user.info.schoolInfos?.[0], ...forms });
+      data.schoolLoading = true;
+      message.success('修改成功');
+    };
     return () => (
       <div class={styles.schoolInfo}>
         <NSpace wrapItem={false} align="center">
           <div class={styles.logo}>
             <NImage
-              previewDisabled
+              previewDisabled={false}
               width={100}
               height={100}
-              src={forms.avatar}
+              src={forms.logo}
             />
             <div class={styles.changeHead}>
               修改头像
-              <UploadFile
-                class={[styles.uploadFile]}
-                cropper
-                onUpdate:fileList={val => {
-                  forms.avatar = val;
-                }}
-              />
+              {data.schoolLoading && (
+                <UploadFile
+                  class={[styles.uploadFile]}
+                  cropper
+                  onUpdate:fileList={val => {
+                    forms.logo = val;
+                    changeSchoolInfo();
+                  }}
+                />
+              )}
             </div>
           </div>
           <NForm model={forms} style={{ paddingTop: '30px' }}>
             <NFormItem
               label="学校名称"
-              path="schoolName"
+              path="name"
               showRequireMark={false}
               rule={[
                 { required: true, message: '请填写学习名称', trigger: 'blur' }
@@ -198,7 +210,10 @@ export default defineComponent({
               <NInput
                 class={styles.input}
                 maxlength={20}
-                v-model:value={forms.schoolName}
+                v-model:value={forms.name}
+                onBlur={() => {
+                  changeSchoolInfo();
+                }}
               />
             </NFormItem>
           </NForm>

+ 7 - 3
src/views/setting/index.tsx

@@ -3,10 +3,12 @@ import styles from './index.module.less';
 import { NTabs, NTabPane } from 'naive-ui';
 import PersonInfo from './components/personInfo';
 import SchoolInfo from './components/schoolInfo/index';
+import { useUserStore } from '/src/store/modules/users';
 export default defineComponent({
   name: 'base-setting',
   setup(props, { emit, attrs }) {
     const activeTab = ref('person');
+    const user = useUserStore();
     return () => (
       <div class={styles.listWrap}>
         <NTabs
@@ -19,9 +21,11 @@ export default defineComponent({
           <NTabPane name="person" tab="个人信息">
             <PersonInfo></PersonInfo>
           </NTabPane>
-          <NTabPane name="school" tab="学校设置">
-            <SchoolInfo />
-          </NTabPane>
+          {user.info.isSuperAdmin && (
+            <NTabPane name="school" tab="学校设置">
+              <SchoolInfo />
+            </NTabPane>
+          )}
         </NTabs>
       </div>
     );

+ 8 - 0
src/views/xiaoku-ai/api.ts

@@ -0,0 +1,8 @@
+import request from '@/utils/request';
+
+/**
+ * 老师列表
+ */
+export const api_musicTagTree = () => {
+  return request.get('/edu-app/musicTag/tree');
+};

+ 43 - 54
src/views/xiaoku-ai/index.tsx

@@ -11,23 +11,43 @@ import TheSearch from '@/components/TheSearch';
 import { NButton, NImage, NSpace } from 'naive-ui';
 import { useRouter } from 'vue-router';
 import mock from './mock.json';
+import { api_musicTagTree } from './api';
 
 export default defineComponent({
   name: 'XiaokuAi',
   setup() {
     const router = useRouter();
     const data = reactive({
-      tags: [
-        { name: '全部', id: '0' },
-        { name: '人教版', id: '1' },
-        { name: '人音版', id: '2' }
-      ],
-      tagIndex: '0',
+      tags: [] as any[],
+      tagIndex: 0,
+      tagActive: {} as any,
       list: mock.list
     });
-    const _list = computed(() => {
-      if (data.tagIndex === '0') return data.list;
-      return data.list.filter(item => data.tagIndex === item.category);
+    const getTags = async () => {
+      const res = await api_musicTagTree();
+      if (Array.isArray(res?.data)) {
+        data.tags = res.data;
+        const list = renderTag(res.data);
+        console.log(list);
+      }
+    };
+
+    // 递归渲染标签
+    const renderTag = (_data: any[]): any => {
+      const item = {
+        columnName: _data[0].columnName,
+        list: _data.map((item: any) => {
+          return {
+            name: item.name,
+            list: Array.isArray(item.children) ? renderTag(item.children) : []
+          };
+        })
+      };
+
+      return item;
+    };
+    onMounted(() => {
+      getTags();
     });
     return () => (
       <div class={styles.container}>
@@ -36,57 +56,26 @@ export default defineComponent({
             <div class={styles.tags}>
               <NSpace size={[24, 12]}>
                 <NButton quaternary disabled>
-                  类型
-                </NButton>
-                {data.tags.map((item, index) => (
-                  <NButton
-                    round
-                    secondary={data.tagIndex !== item.id}
-                    type={data.tagIndex === item.id ? 'primary' : 'default'}
-                    class={[
-                      styles.tag,
-                      data.tagIndex === item.id ? styles.active : ''
-                    ]}
-                    onClick={() => (data.tagIndex = item.id)}>
-                    {item.name}
-                  </NButton>
-                ))}
-              </NSpace>
-            </div>
-            <div class={styles.tags}>
-              <NSpace size={[24, 12]}>
-                <NButton quaternary disabled>
-                  学段
-                </NButton>
-                <NButton round secondary type={'default'}>
-                  小学
-                </NButton>
-                <NButton round secondary type={'default'}>
-                  初中
+                  {data.tags[0]?.columnName}
                 </NButton>
-                <NButton round secondary type={'default'}>
-                  高中
-                </NButton>
-              </NSpace>
-            </div>
-            <div class={styles.tags}>
-              <NSpace size={[24, 12]}>
-                <NButton quaternary disabled>
-                  年级
-                </NButton>
-                {['一', '二', '三', '四', '五', '六'].map((item, index) => (
-                  <NButton secondary round>
-                    {item}年级
-                  </NButton>
-                ))}
+
+                {data.tags.map((item: any, index: number) => {
+                  return (
+                    <>
+                      <NButton round secondary type={'default'}>
+                        {item.name}
+                      </NButton>
+                    </>
+                  );
+                })}
               </NSpace>
             </div>
           </div>
           <TheSearch round />
         </div>
-        <div class={styles.content}>
+        {/* <div class={styles.content}>
           <NSpace size={[50, 40]}>
-            {_list.value.map((item, index) => {
+            {data.list.map((item, index) => {
               return (
                 <div
                   class={styles.item}
@@ -111,7 +100,7 @@ export default defineComponent({
               );
             })}
           </NSpace>
-        </div>
+        </div> */}
       </div>
     );
   }