shaogen1995 hai 7 horas
pai
achega
b4d8e651bb

+ 4 - 4
后台管理/README.md

@@ -1,9 +1,9 @@
 1.使用 yarn。 npm 有问题
 
-2.测试后端文档地址:待完善
+2.测试后端文档地址:https://sit-yunnanguqiao.4dage.com/api/doc.html#/home
 
-3.测试堡垒机位置:
+3.测试堡垒机位置:/Default/阿里云/项目节点/项目测试/阿里云-四维时代-项目测试服务器-8.135.106.227/data/data01/museum_yunnan_bijiang_guqiao_data
 
-4:测试网址:
+4:测试网址:https://sit-yunnanguqiao.4dage.com/backstage/#/
 
-5:蓝湖地址:https://lanhuapp.com/web/#/item/project/product?tid=de3e5e3e-a489-4b19-862a-7c87ce113467&pid=ad933c2c-f106-4495-8393-98df8a3fc079&image_id=d1e2fd0d-fa26-4494-a40f-b119a0d176ba&docId=d1e2fd0d-fa26-4494-a40f-b119a0d176ba&docType=axure&versionId=86983a0b-977f-4808-82c8-43d54f773074&pageId=f92c3957af454884b7a1e0da86b72bd7&share_type=quickShare&parentId=0fd8353a-1464-402c-be92-6ce802d4fceb
+5:蓝湖地址:https://lanhuapp.com/web/#/item/project/product?tid=de3e5e3e-a489-4b19-862a-7c87ce113467&pid=45c0a8fc-a28e-4a2d-afd6-7788e55ef062&image_id=6fe0793a-9038-4204-a4a8-5c9458437f6f&docId=6fe0793a-9038-4204-a4a8-5c9458437f6f&docType=axure&versionId=a23af392-5eac-4247-99f1-ed34937840d4&pageId=ba4bf9062b464cbf8ed74eb56df3fc6d&parentId=e7d37e732ba846049f9c18d16bedf33d

+ 3 - 3
后台管理/src/pages/A1record/index.tsx

@@ -9,7 +9,7 @@ import MyTable from '@/components/MyTable'
 import { A1tableC } from '@/utils/tableData'
 import A1look from './A1look'
 
-const baseFromData = {
+export const A1baseFromData = {
   pageNum: 1,
   pageSize: 10,
   searchKey: '',
@@ -19,7 +19,7 @@ const baseFromData = {
 function A1record() {
   const dispatch = useDispatch()
 
-  const [fromData, setFromData] = useState(baseFromData)
+  const [fromData, setFromData] = useState(A1baseFromData)
 
   const getListFu = useCallback(() => {
     dispatch(A1_APIgetList(fromData))
@@ -55,7 +55,7 @@ function A1record() {
   // 点击重置
   const resetSelectFu = useCallback(() => {
     setInputKey(Date.now())
-    setFromData({ ...baseFromData })
+    setFromData({ ...A1baseFromData })
   }, [])
 
   // 点击查看

+ 6 - 0
后台管理/src/pages/A2disease/data.ts

@@ -0,0 +1,6 @@
+export type A2ListType = {
+  id: number
+  name: string
+  sceneCode: string
+  type: number
+}

+ 30 - 0
后台管理/src/pages/A2disease/index.module.scss

@@ -1,4 +1,34 @@
 .A2disease {
   :global {
+    .A2top {
+      padding: 15px 24px;
+      border-radius: 10px;
+      background-color: #fff;
+      display: flex;
+      justify-content: space-between;
+
+      .A2topLeft {
+        display: flex;
+
+        & > div {
+          margin-right: 24px;
+          .ant-btn {
+            margin-right: 10px;
+          }
+        }
+      }
+    }
+
+    .A2tableBox {
+      border-radius: 10px;
+      overflow: hidden;
+      margin-top: 15px;
+      height: calc(100% - 77px);
+      background-color: #fff;
+
+      .ant-table-cell {
+        padding: 8px !important;
+      }
+    }
   }
 }

+ 142 - 1
后台管理/src/pages/A2disease/index.tsx

@@ -1,9 +1,150 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
+import { useDispatch, useSelector } from 'react-redux'
+import { A1baseFromData } from '../A1record'
+import { A2_APIgetList, A2_APIgetToken } from '@/store/action/A2disease'
+import { RootState } from '@/store'
+import { Button, Input, Select } from 'antd'
+import { A1select1 } from '../A1record/data'
+import MyTable from '@/components/MyTable'
+import { envFlag } from '@/utils/http'
+import { A2ListType } from './data'
 function A2disease() {
+  const dispatch = useDispatch()
+
+  const [fromData, setFromData] = useState(A1baseFromData)
+
+  const getListFu = useCallback(() => {
+    dispatch(A2_APIgetList(fromData))
+  }, [dispatch, fromData])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu])
+
+  const tableInfo = useSelector((state: RootState) => state.A2disease.tableInfo)
+
+  // 作品名称的输入
+  const timeRef = useRef(-1)
+  const [inputKey, setInputKey] = useState(0)
+  const fromKeyChangeFu = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>, key: 'searchKey') => {
+      clearTimeout(timeRef.current)
+      timeRef.current = window.setTimeout(() => {
+        setFromData({ ...fromData, [key]: e.target.value, pageNum: 1 })
+      }, 500)
+    },
+    [fromData]
+  )
+
+  // 下拉框的改变
+  const selectChangeFu = useCallback(
+    (value: any, key: 'type') => {
+      setFromData({ ...fromData, [key]: value, pageNum: 1 })
+    },
+    [fromData]
+  )
+
+  // 点击重置
+  const resetSelectFu = useCallback(() => {
+    setInputKey(Date.now())
+    setFromData({ ...A1baseFromData })
+  }, [])
+
+  // 点击查看
+  const lookKK = useCallback((code: string) => {
+    window.open(
+      `${envFlag ? 'https://sit-yunnanguqiao.4dage.com' : ''}/scene/index.html/#/?m=${code}`,
+      '_blank'
+    )
+  }, [])
+
+  // 点击编辑
+  const editKK = useCallback(async (code: string) => {
+    const res = await A2_APIgetToken()
+    if (res.code === 0) {
+      const token = res.data
+
+      window.open(
+        `https://www.4dkankan.com/projects/yngc/epg.html?m=${code}&lang=zh&token=${token}#/tag`,
+        '_blank'
+      )
+    }
+  }, [])
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: A2ListType) => {
+          return (
+            <>
+              <Button size='small' type='text' onClick={() => lookKK(item.sceneCode)}>
+                查看
+              </Button>
+
+              <Button size='small' type='text' onClick={() => editKK(item.sceneCode)}>
+                编辑
+              </Button>
+            </>
+          )
+        }
+      }
+    ]
+  }, [editKK, lookKK])
+
   return (
     <div className={styles.A2disease}>
       <div className='pageTitle'>病害管理</div>
+
+      {/* 顶部筛选 */}
+      <div className='A2top'>
+        <div className='A2topLeft'>
+          <div>
+            <Input
+              key={inputKey}
+              maxLength={30}
+              showCount
+              style={{ width: 300 }}
+              placeholder='请输入古桥名称'
+              allowClear
+              onChange={e => fromKeyChangeFu(e, 'searchKey')}
+            />
+          </div>
+
+          <div>
+            <Select
+              allowClear
+              style={{ width: 150 }}
+              placeholder='结构类型'
+              value={fromData.type || null}
+              onChange={e => selectChangeFu(e, 'type')}
+              options={A1select1}
+            />
+          </div>
+        </div>
+
+        <div>
+          <Button onClick={resetSelectFu}>重置</Button>
+        </div>
+      </div>
+
+      {/* 表格主体 */}
+      <div className='A2tableBox'>
+        <MyTable
+          yHeight={645}
+          list={tableInfo.list}
+          columnsTemp={[
+            ['txt', '古桥名称', 'name'],
+            ['txt', '结构形式', 'type']
+          ]}
+          lastBtn={tableLastBtn}
+          pageNum={fromData.pageNum}
+          pageSize={fromData.pageSize}
+          total={tableInfo.total}
+          onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
+        />
+      </div>
     </div>
   )
 }

+ 3 - 3
后台管理/src/pages/Layout/data.ts

@@ -7,19 +7,19 @@ const tabLeftArr: RouterType = [
     name: '内容管理',
     son: [
       {
-        id: 101,
+        id: 200,
         name: '古桥档案',
         path: '/',
         Com: React.lazy(() => import('../A1record'))
       },
       {
-        id: 102,
+        id: 300,
         name: '病害管理',
         path: '/disease',
         Com: React.lazy(() => import('../A2disease'))
       },
       {
-        id: 103,
+        id: 400,
         name: '字典管理',
         path: '/dict',
         Com: React.lazy(() => import('../A3dict'))

+ 39 - 51
后台管理/src/pages/Layout/index.tsx

@@ -19,6 +19,8 @@ import tabLeftArr from './data'
 import MyPopconfirm from '@/components/MyPopconfirm'
 import { useDispatch } from 'react-redux'
 import { A3_APIgetList } from '@/store/action/A3dict'
+import { UserListType } from '../Z1user/Z1auth'
+import { Z1_APIgetAuthByUserId } from '@/store/action/Z1user'
 // import { Z1_APIgetAuthByUserId } from "@/store/action/Z1user";
 
 function Layout() {
@@ -46,63 +48,49 @@ function Layout() {
   const getUserAuthFu = useCallback(async () => {
     const userInfo = getTokenInfo().user
 
-    // const res = await Z1_APIgetAuthByUserId(userInfo.id);
-    // if (res.code === 0) {
-    // 这里后台返回的一层的数据。懒得改逻辑,手动修改成2级的数据
-    // res.data = [
-    //   {
-    //     id: Date.now(),
-    //     name: "",
-    //     children: res.data,
-    //   },
-    // ];
-
-    // 待完善
-    const isOkIdArr: number[] = [101, 102, 103, 104, 105]
-    // const tempList: UserListType[] = res.data || [];
-    // console.log(123, tempList);
-    // tempList.forEach((v) => {
-    //   if (v.children) {
-    //     v.children.forEach((c) => {
-    //       if (c.authority) isOkIdArr.push(c.id);
-    //     });
-    //   }
-    // });
-    // 是管理员
-    if (userInfo.isAdmin === 1) {
-      isOkIdArr.push(2100)
-      isOkIdArr.push(2200)
-    }
+    const res = await Z1_APIgetAuthByUserId(userInfo.id)
+    if (res.code === 0) {
+      const isOkIdArr: number[] = []
+      const tempList: UserListType[] = res.data.resources || []
+      // console.log(123, tempList);
+      tempList.forEach(v => {
+        if (v.perm) isOkIdArr.push(v.id)
+      })
+      // 是管理员
+      if (userInfo.isAdmin === 1) {
+        isOkIdArr.push(2100)
+        isOkIdArr.push(2200)
+      }
 
-    const tempArr: RouterTypeRow = []
+      const tempArr: RouterTypeRow = []
 
-    tabLeftArr.forEach(v1 => {
-      if (v1.son && v1.son[0]) {
-        v1.son.forEach(v2 => {
-          if (isOkIdArr.includes(v2.id)) {
-            tempArr.push(v2)
-          }
-        })
-      }
-    })
+      tabLeftArr.forEach(v1 => {
+        if (v1.son && v1.son[0]) {
+          v1.son.forEach(v2 => {
+            if (isOkIdArr.includes(v2.id)) {
+              tempArr.push(v2)
+            }
+          })
+        }
+      })
 
-    setRouterCom(tempArr)
+      setRouterCom(tempArr)
 
-    // 如果当前页面没有权限了,跳转有权限的第一个页面
-    const urlAll = window.location.hash
-    const isNowPath = urlAll.replace('#', '')
-    const pathArr = tempArr.map(v => v.path)
-    if (!pathArr.includes(isNowPath)) {
-      history.push(pathArr[0])
-    }
+      // 如果当前页面没有权限了,跳转有权限的第一个页面
+      const urlAll = window.location.hash
+      const isNowPath = urlAll.replace('#', '')
+      const pathArr = tempArr.map(v => v.path)
+      if (!pathArr.includes(isNowPath)) {
+        history.push(pathArr[0])
+      }
 
-    const resList = tabLeftArr.map(v => ({
-      ...v,
-      son: v.son.filter(c => isOkIdArr.includes(c.id))
-    }))
+      const resList = tabLeftArr.map(v => ({
+        ...v,
+        son: v.son.filter(c => isOkIdArr.includes(c.id))
+      }))
 
-    setList(resList)
-    // }
+      setList(resList)
+    }
   }, [])
 
   useEffect(() => {

+ 121 - 73
后台管理/src/pages/Z1user/Z1auth.tsx

@@ -1,19 +1,15 @@
 import React, { useCallback, useEffect, useMemo, useState } from 'react'
 import styles from './index.module.scss'
-import { Button, Checkbox, Modal } from 'antd'
+import { Button, Checkbox, Modal, Radio } from 'antd'
 import MyPopconfirm from '@/components/MyPopconfirm'
-import { Z1_APIsetAuth } from '@/store/action/Z1user'
+import { Z1_APIgetAuthByUserId, Z1_APIsetAuth } from '@/store/action/Z1user'
 import classNmaes from 'classnames'
 import { MessageFu } from '@/utils/message'
 
 export type UserListType = {
   id: number
   name: string
-  children: {
-    id: number
-    name: string
-    authority: boolean
-  }[]
+  perm: boolean
 }
 
 type Props = {
@@ -22,65 +18,70 @@ type Props = {
 }
 
 function Z1auth({ authInfo, closeFu }: Props) {
-  // 待完善
   const getAuthByUserIdFu = useCallback(async () => {
-    // const res = await Z1_APIgetAuthByUserId(authInfo.id);
-    // if (res.code === 0) {
-    //   // 这里后台返回的一层的数据。懒得改逻辑,手动修改成2级的数据
-    //   setList([
-    //     {
-    //       id: Date.now(),
-    //       name: "",
-    //       children: res.data,
-    //     },
-    //   ]);
-    //   // setList(res.data)
-    // }
-  }, [])
+    const res = await Z1_APIgetAuthByUserId(authInfo.id)
+    if (res.code === 0) {
+      const info = res.data
+      setResources(info.resources)
+      setDataScopeIds(info.scope)
+      setDataScope(info.dataScope || 1)
+    }
+  }, [authInfo.id])
 
   useEffect(() => {
     getAuthByUserIdFu()
   }, [getAuthByUserIdFu])
 
-  const [list, setList] = useState<UserListType[]>([])
+  // 页面权限
+  const [resources, setResources] = useState<UserListType[]>([])
+
+  // 选择古桥或者全部
+  const [dataScope, setDataScope] = useState(0)
+
+  // 古桥权限
+  const [dataScopeIds, setDataScopeIds] = useState<UserListType[]>([])
 
   // 多选框变化
-  const onChange = useCallback(
-    (val: boolean, id1: number, id2: number) => {
-      setList(
-        list.map(v => ({
+  const onChange1 = useCallback(
+    (val: boolean, id: number) => {
+      setResources(
+        resources.map(v => ({
+          ...v,
+          perm: v.id === id ? val : v.perm
+        }))
+      )
+    },
+    [resources]
+  )
+  const onChange2 = useCallback(
+    (val: boolean, id: number) => {
+      setDataScopeIds(
+        dataScopeIds.map(v => ({
           ...v,
-          children:
-            v.id === id1
-              ? v.children.map(c => ({
-                  ...c,
-                  authority: c.id === id2 ? val : c.authority
-                }))
-              : v.children
+          perm: v.id === id ? val : v.perm
         }))
       )
     },
-    [list]
+    [dataScopeIds]
   )
 
-  // 二级选中的数组id集合
-  const checkIds = useMemo(() => {
-    const arr: number[] = []
-    list.forEach(v => {
-      if (v.children) {
-        v.children.forEach(c => {
-          if (c.authority) arr.push(c.id)
-        })
-      }
-    })
-    return arr
-  }, [list])
+  //  页面权限id集合
+  const ids1 = useMemo(() => {
+    return resources.filter(v => v.perm).map(c => c.id)
+  }, [resources])
+
+  // 古桥权限id集合
+  const ids2 = useMemo(() => {
+    return dataScopeIds.filter(v => v.perm).map(c => c.id)
+  }, [dataScopeIds])
 
   // 点击确定
   const btnOkFu = useCallback(async () => {
     const obj = {
       userId: authInfo.id,
-      resources: checkIds
+      resources: ids1,
+      dataScopeIds: ids2,
+      dataScope
     }
 
     const res = await Z1_APIsetAuth(obj)
@@ -89,7 +90,15 @@ function Z1auth({ authInfo, closeFu }: Props) {
       MessageFu.success('授权成功!')
       closeFu()
     }
-  }, [authInfo.id, checkIds, closeFu])
+  }, [authInfo.id, closeFu, dataScope, ids1, ids2])
+
+  // 按钮是否能点击
+  const btnFlag = useMemo(() => {
+    let txt = ''
+    if (ids1.length === 0) txt = '至少选中一个页面权限'
+    else if (dataScope === 2 && ids2.length === 0) txt = '至少选中一个数据权限'
+    return txt
+  }, [dataScope, ids1.length, ids2.length])
 
   return (
     <Modal
@@ -101,36 +110,75 @@ function Z1auth({ authInfo, closeFu }: Props) {
       }
     >
       <div className='Z1aEmain'>
-        {list.map(v => (
-          <div key={v.id} className='Z1aRow'>
-            {/* 隐藏一级数据 */}
-            {/* <div className="Z1aRow1">{v.name}</div> */}
-            <div className='Z1aRow2'>
-              {v.children.map(c => (
-                <div key={c.id}>
-                  <Checkbox
-                    checked={c.authority}
-                    onChange={e => onChange(e.target.checked, v.id, c.id)}
-                  >
-                    {c.name}
-                  </Checkbox>
-                </div>
-              ))}
-            </div>
+        <div className='Z1aRow'>
+          <div className='Z1aRowll'>页面权限:</div>
+          <div className='Z1aRowrr'>
+            {resources.map(c => (
+              <Checkbox
+                key={c.id}
+                checked={c.perm}
+                onChange={e => onChange1(e.target.checked, c.id)}
+              >
+                {c.name}
+              </Checkbox>
+            ))}
           </div>
-        ))}
+        </div>
 
-        <div className={classNmaes('Z1aErr', checkIds.length <= 0 ? 'Z1aErrAc' : '')}>
-          至少选中一个
+        <div className='Z1aRow'>
+          <div className='Z1aRowll'>数据权限:</div>
+          <div className='Z1aRowrr'>
+            <Radio.Group
+              value={dataScope}
+              onChange={e => setDataScope(e.target.value)}
+              options={[
+                { value: 1, label: '全部' },
+                { value: 2, label: '按古桥' }
+              ]}
+            />
+          </div>
         </div>
 
-        <div className='Z1aEbtn'>
-          <Button type='primary' onClick={btnOkFu} disabled={checkIds.length <= 0}>
-            提交
-          </Button>
-          &emsp;
-          <MyPopconfirm txtK='取消' onConfirm={closeFu} />
+        <div className='Z1aRow' hidden={dataScope !== 2}>
+          <div className='Z1aRowll'>
+            <Checkbox
+              indeterminate={ids2.length > 0 && ids2.length < dataScopeIds.length}
+              onChange={e => {
+                const perm = e.target.checked
+                setDataScopeIds(
+                  dataScopeIds.map(v => ({
+                    ...v,
+                    perm
+                  }))
+                )
+              }}
+              checked={ids2.length === dataScopeIds.length}
+            >
+              {ids2.length === dataScopeIds.length ? '反' : '全'}选
+            </Checkbox>
+          </div>
+          <div className='Z1aRowrr Z1aRowrr2'>
+            {dataScopeIds.map(c => (
+              <Checkbox
+                key={c.id}
+                checked={c.perm}
+                onChange={e => onChange2(e.target.checked, c.id)}
+              >
+                {c.name}
+              </Checkbox>
+            ))}
+          </div>
         </div>
+
+        <div className={classNmaes('Z1aErr', btnFlag ? 'Z1aErrAc' : '')}>{btnFlag}</div>
+      </div>
+
+      <div className='Z1aEbtn'>
+        <Button type='primary' onClick={btnOkFu} disabled={!!btnFlag}>
+          提交
+        </Button>
+        &emsp;
+        <MyPopconfirm txtK='取消' onConfirm={closeFu} />
       </div>
     </Modal>
   )

+ 27 - 18
后台管理/src/pages/Z1user/index.module.scss

@@ -34,22 +34,32 @@
     }
 
     .Z1aEmain {
+      max-height: 500px;
+      overflow-y: auto;
       padding-top: 15px;
 
       .Z1aRow {
         margin-bottom: 10px;
-        // display: flex;
-
-        // 隐藏一级数据
-        // .Z1aRow1 {
-        //   width: 90px;
-        //   font-weight: 700;
-        // }
-
-        .Z1aRow2 {
-          width: calc(100% - 90px);
-          &>div{
-            margin-bottom: 15px;
+        display: flex;
+        .Z1aRowll {
+          font-weight: 700;
+          text-align: right;
+          width: 100px;
+        }
+        .Z1aRowrr {
+          width: calc(100% - 100px);
+        }
+        .Z1aRowrr2 {
+          .ant-checkbox-wrapper {
+            width: 200px;
+            & > span {
+              &:nth-of-type(2) {
+                width: calc(100% - 20px);
+                overflow: hidden;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+              }
+            }
           }
         }
       }
@@ -60,7 +70,7 @@
         color: #ff4d4f;
         opacity: 0;
         pointer-events: none;
-        transition: all .3s;
+        transition: all 0.3s;
         position: relative;
         top: -10px;
       }
@@ -69,10 +79,9 @@
         opacity: 1;
         top: 0;
       }
-
-      .Z1aEbtn {
-        text-align: center;
-      }
+    }
+    .Z1aEbtn {
+      text-align: center;
     }
   }
-}
+}

+ 25 - 0
后台管理/src/store/action/A2disease.ts

@@ -0,0 +1,25 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+/**
+ * 病害管理-获取列表
+ */
+export const A2_APIgetList = (data: any): any => {
+  return async (dispatch: AppDispatch) => {
+    const res = await http.post('cms/disease/pageList', data)
+    if (res.code === 0) {
+      const obj = {
+        list: res.data.records,
+        total: res.data.total
+      }
+
+      dispatch({ type: 'A2/getList', payload: obj })
+    }
+  }
+}
+
+/**
+ * 病害管理-获取token
+ */
+export const A2_APIgetToken = () => {
+  return http.get(`cms/disease/age/getToken`)
+}

+ 3 - 3
后台管理/src/store/action/Z1user.ts

@@ -49,9 +49,9 @@ export const getUserInfoByIdAPI = (id: number) => {
 /**
  * 角色授权-获取
  */
-// export const Z1_APIgetAuthByUserId = (userId: number) => {
-//   return http.get(`sys/user/perm/getUserTree/${userId}`);
-// };
+export const Z1_APIgetAuthByUserId = (userId: number) => {
+  return http.get(`sys/user/perm/detail/${userId}`)
+}
 
 /**
  * 角色授权-设置

+ 28 - 0
后台管理/src/store/reducer/A2disease.ts

@@ -0,0 +1,28 @@
+import { A2ListType } from '@/pages/A2disease/data'
+
+// 初始化状态
+const initState = {
+  // 列表数据
+  tableInfo: {
+    list: [] as A2ListType[],
+    total: 0
+  }
+}
+
+// 定义 action 类型
+type Props = {
+  type: 'A2/getList'
+  payload: { list: A2ListType[]; total: number }
+}
+
+// reducer
+export default function userReducer(state = initState, action: Props) {
+  switch (action.type) {
+    // 获取列表数据
+    case 'A2/getList':
+      return { ...state, tableInfo: action.payload }
+
+    default:
+      return state
+  }
+}

+ 2 - 0
后台管理/src/store/reducer/index.ts

@@ -4,6 +4,7 @@ import { combineReducers } from 'redux'
 // 导入 登录 模块的 reducer
 import A0Layout from './layout'
 import A1record from './A1record'
+import A2disease from './A2disease'
 import A3dict from './A3dict'
 
 import Z1user from './Z1user'
@@ -13,6 +14,7 @@ import Z2log from './Z2log'
 const rootReducer = combineReducers({
   A0Layout,
   A1record,
+  A2disease,
   A3dict,
   Z1user,
   Z2log

+ 2 - 2
后台管理/src/utils/http.ts

@@ -5,9 +5,9 @@ import store from '@/store'
 import { MessageFu } from './message'
 import { domShowFu } from './domShow'
 
-const envFlag = process.env.NODE_ENV === 'development'
+export const envFlag = process.env.NODE_ENV === 'development'
 
-// const baseUrlTemp = 'xxxxxxxxxxxx' // 测试环境
+// const baseUrlTemp = 'https://sit-yunnanguqiao.4dage.com' // 测试环境
 const baseUrlTemp = 'http://192.168.20.61:8105' // 线下环境
 
 const baseFlag = baseUrlTemp.includes('https://')