shaogen1995 2 mesi fa
parent
commit
874f4e10d6

+ 2 - 0
package.json

@@ -17,11 +17,13 @@
     "braft-editor": "^2.3.9",
     "braft-utils": "^3.0.12",
     "dayjs": "^1.11.10",
+    "dingtalk-jsapi": "^3.1.0",
     "docxtemplater": "^3.61.1",
     "docxtemplater-image-module-free": "^1.1.1",
     "echarts": "^5.6.0",
     "exceljs": "^4.4.0",
     "file-saver": "^2.0.5",
+    "gdt-jsapi": "^1.9.51",
     "js-base64": "^3.7.3",
     "js-export-excel": "^1.1.4",
     "jszip-utils": "^0.1.0",

+ 19 - 0
public/index.html

@@ -9,6 +9,25 @@
     <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
 
     <title>义乌市博物馆馆藏管理系统</title>
+
+    <script>
+      // 域名地址
+      const baseUrlTempOne = 'https://sit-yiwubwg.4dage.com'
+
+      // 钉钉模式
+      const isDingTemp = false
+
+      // const script = document.createElement('script')
+      // script.src = `//${window.g_config.cdnHost}/gdt/dd-web-dev-center/3.12.0/assets/js/app_567f70b3-6512-4dca-8683-c2b5e2755fd0.js`
+      // document.head.appendChild(script)
+
+      // script.onload(() => {
+      //   h5RemoteDebugSdk.init({
+      //     uuid: 'dbaa9959-4fcf-49c8-ba99-3922e45e22ca',
+      //     observerElement: document.documentElement
+      //   })
+      // })
+    </script>
   </head>
   <body>
     <noscript>You need to enable JavaScript to run this app.</noscript>

+ 3 - 1
src/App.tsx

@@ -13,8 +13,10 @@ import UpAsyncLoding from './components/UpAsyncLoding'
 import MessageCom from './components/Message'
 import LookDom from './components/LookDom'
 import Zexport from './components/Zexport'
+import { isDing } from './utils/http'
 const Layout = React.lazy(() => import('./pages/Layout'))
 const Login = React.lazy(() => import('./pages/Login'))
+const DingLogin = React.lazy(() => import('./components/DingLogin'))
 
 export default function App() {
   // 从仓库中获取查看图片的信息
@@ -26,7 +28,7 @@ export default function App() {
       <Router history={history}>
         <React.Suspense fallback={<SpinLoding />}>
           <Switch>
-            <Route path='/login' component={Login} />
+            <Route path='/login' component={isDing ? DingLogin : Login} />
             {/*  打印页面 */}
             {/* <Route
               path='/logPage/:key'

+ 20 - 0
src/components/DingLogin/index.module.scss

@@ -0,0 +1,20 @@
+.DingLogin {
+  width: 100%;
+  height: 100%;
+  background-image: url('../../assets/img/loginBac.jpg');
+  background-size: 100% 100%;
+  :global {
+    .DingLoginBox {
+      padding-top: 100px;
+      width: 100%;
+      height: 100%;
+      background-color: rgba(255, 255, 255, 0.4);
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      & > h2 {
+        letter-spacing: 4px;
+      }
+    }
+  }
+}

+ 50 - 0
src/components/DingLogin/index.tsx

@@ -0,0 +1,50 @@
+import React, { useCallback, useEffect, useRef, useState } from 'react'
+import dd from 'gdt-jsapi'
+import styles from './index.module.scss'
+import { MessageFu } from '@/utils/message'
+import { domShowFu } from '@/utils/domShow'
+function DingLogin() {
+  const [txt, setTxt] = useState('正在授权登录中...')
+
+  let time = useRef(-1)
+  const succFu = useCallback((val: string, code?: string) => {
+    clearTimeout(time.current)
+    time.current = window.setTimeout(() => {
+      domShowFu('#AsyncSpinLoding', false)
+
+      if (val === '成功') {
+        alert(code)
+        MessageFu.success('登录成功' + code)
+      }
+    }, 500)
+  }, [])
+
+  useEffect(() => {
+    domShowFu('#AsyncSpinLoding', true)
+    dd.ready(function () {
+      dd.getAuthCode({
+        corpId: ''
+      })
+        .then(res => {
+          succFu('成功', res.auth_code)
+        })
+        .catch(err => {
+          succFu('失败')
+          setTxt(err)
+          MessageFu.error(err)
+        })
+    })
+  }, [succFu])
+
+  return (
+    <div className={styles.DingLogin}>
+      <div className='DingLoginBox'>
+        <h2>{txt}</h2>
+      </div>
+    </div>
+  )
+}
+
+const MemoDingLogin = React.memo(DingLogin)
+
+export default MemoDingLogin

+ 2 - 5
src/components/ZupFile/index.tsx

@@ -4,7 +4,7 @@ import { InboxOutlined } from '@ant-design/icons'
 import { MessageFu } from '@/utils/message'
 import styles from './index.module.scss'
 import { B1Xtype } from '@/pages/B_enterTibet/B1collect/data'
-import { baseUrlTemp, envFlag } from '@/utils/http'
+import { baseURL } from '@/utils/http'
 import { fileTypeRes } from '@/store/action/layout'
 import { getTokenFu } from '@/utils/storage'
 import history from '@/utils/history'
@@ -12,9 +12,6 @@ import { API_C2dels } from '@/store/action/C2files'
 import MyPopconfirm from '../MyPopconfirm'
 import { DeleteOutlined } from '@ant-design/icons'
 
-// 接口地址
-const httpUrl = envFlag ? baseUrlTemp : ''
-
 const { Dragger } = Upload
 
 type Props = {
@@ -36,7 +33,7 @@ function ZupFile({ tableList, moduleId, isShow, closeFu, succFu }: Props) {
     // 支持上传文件夹
     directory: true,
     multiple: true,
-    action: httpUrl + '/api/cms/orderCollect/upload',
+    action: baseURL + '/api/cms/orderCollect/upload',
     headers: {
       token: getTokenFu()
     },

+ 1 - 1
src/components/ZupFileTable/index.tsx

@@ -58,7 +58,7 @@ function ZupFileTable({ listTemp, dirCode, myUrl, fromData }: Props) {
         }
 
         // 开启压缩图片
-        // fd.append('isCompress', 'true')
+        fd.append('isCompress', 'true')
 
         e.target.value = ''
 

+ 0 - 5
src/pages/A_workbench/A2business/data.ts

@@ -1,5 +0,0 @@
-import { envFlag } from '@/utils/http'
-
-export const A2imgBaseUrl = envFlag
-  ? 'https://sit-yiwubwg.4dage.com/baseData/tabImg/'
-  : '/baseData/tabImg/'

+ 19 - 14
src/pages/A_workbench/A2business/index.tsx

@@ -3,7 +3,7 @@ import styles from './index.module.scss'
 import { useDispatch, useSelector } from 'react-redux'
 import store, { RootState } from '@/store'
 import { Button } from 'antd'
-import { baseURL } from '@/utils/http'
+import { baseURL, isDing } from '@/utils/http'
 import baseTouXiangImg from '@/assets/img/user.png'
 import { getUserInfoByIdAPI } from '@/store/action/Z6user'
 import { changGetFu, getTokenInfo, removeTokenInfo, setTokenInfo } from '@/utils/storage'
@@ -15,7 +15,6 @@ import A2editUser from './A2editUser'
 import A2setStock from './A2setStock'
 import { RouterType } from '@/types'
 import A2table from './A2table'
-import { A2imgBaseUrl } from './data'
 
 const userInfoJting = getTokenInfo().user
 
@@ -117,16 +116,22 @@ function A2business() {
           </div>
           <div className='A2ll1_2'>
             <Button onClick={() => setEditUser(true)}>编辑个人资料</Button>&emsp;
-            <Button onClick={() => store.dispatch({ type: 'layout/passEditShow', payload: true })}>
-              修改密码
-            </Button>
-            &emsp;
-            <MyPopconfirm
-              txtK='退出登录'
-              onConfirm={loginExit}
-              Dom={<Button>退出登录</Button>}
-              loc='bottom'
-            />
+            {isDing ? null : (
+              <>
+                <Button
+                  onClick={() => store.dispatch({ type: 'layout/passEditShow', payload: true })}
+                >
+                  修改密码
+                </Button>
+                &emsp;
+                <MyPopconfirm
+                  txtK='退出登录'
+                  onConfirm={loginExit}
+                  Dom={<Button>退出登录</Button>}
+                  loc='bottom'
+                />
+              </>
+            )}
           </div>
         </div>
         <div className='A2ll2'>
@@ -143,7 +148,7 @@ function A2business() {
                 v1.son.map(v2 =>
                   v2.authority && v2.name !== '业务中心' ? (
                     <div key={v2.id} className='A2ll2Row' onClick={() => history.push(v2.path)}>
-                      <img src={A2imgBaseUrl + v2.name + '.png'} alt='' />
+                      <img src={`${baseURL}/baseData/tabImg/${v2.name}.png`} alt='' />
                       <p>{v2.name}</p>
                     </div>
                   ) : null
@@ -158,7 +163,7 @@ function A2business() {
               {changGetFu().length ? (
                 changGetFu().map((v, i) => (
                   <div key={i} className='A2ll2Row' onClick={() => history.push(v.path)}>
-                    <img src={A2imgBaseUrl + v.name + '.png'} alt='' />
+                    <img src={`${baseURL}/baseData/tabImg/${v.name}.png`} alt='' />
                     <p>{v.name}</p>
                   </div>
                 ))

+ 2 - 1
src/pages/B_enterTibet/B1collect/B1edit/index.tsx

@@ -30,6 +30,7 @@ import { FourTableType, TypeinfoXLSX } from '../type'
 import B1upXLSX from './B1upXLSX'
 import ZupFile from '@/components/ZupFile'
 import { EXPORT_WORD_ENUM } from '@/utils/exportTemplates'
+import { baseURL } from '@/utils/http'
 
 function B1edit() {
   const { key, id } = useParams<any>()
@@ -361,7 +362,7 @@ function B1edit() {
               {['3', '4'].includes(key) ? null : (
                 <>
                   <a
-                    href={`/baseData/ZJ_TEMP.xlsx`}
+                    href={`${baseURL}/baseData/ZJ_TEMP.xlsx`}
                     download='藏品征集模板'
                     target='_blank'
                     rel='noreferrer'

+ 3 - 0
src/pages/Layout/index.module.scss

@@ -103,6 +103,9 @@
               margin-right: 20px;
             }
           }
+          .userNameBoxDing {
+            pointer-events: none;
+          }
 
           .userInco {
             margin-left: 10px;

+ 11 - 7
src/pages/Layout/index.tsx

@@ -22,10 +22,9 @@ import { TypeZ5Role } from '../Z_system/Z5role/type'
 import { useDispatch, useSelector } from 'react-redux'
 import { Z1_APIgetDict } from '@/store/action/Z1dict'
 import store, { RootState } from '@/store'
-import { baseURL } from '@/utils/http'
+import { baseURL, isDing } from '@/utils/http'
 import baseTouXiangImg from '@/assets/img/user.png'
 import { Z5_APIgetInfo } from '@/store/action/Z5role'
-import { A2imgBaseUrl } from '../A_workbench/A2business/data'
 
 function Layout() {
   // 获取角色下载权限
@@ -287,7 +286,7 @@ function Layout() {
             >
               {/* 一级目录 */}
               <div className='layoutLRowBoxTxt'>
-                <img src={A2imgBaseUrl + v.name + '.png'} alt='' />
+                <img src={baseURL + '/baseData/tabImg/' + v.name + '.png'} alt='' />
                 {v.name}
               </div>
               {v.son.map(v2 => (
@@ -313,14 +312,19 @@ function Layout() {
             className={classNames('user', isUserBtnShow ? 'userShow' : '')}
             onMouseLeave={() => setIsUserBtnShow(false)}
           >
-            <div className='userNameBox' onClick={() => setIsUserBtnShow(true)}>
+            <div
+              className={classNames('userNameBox', isDing ? 'userNameBoxDing' : '')}
+              onClick={() => setIsUserBtnShow(true)}
+            >
               <img src={userInfo.thumb ? baseURL + userInfo.thumb : baseTouXiangImg} alt='' />
 
               {userInfo.realName || userInfo.userName || '匿名'}
 
-              <div className='userInco userInco2'>
-                <CaretRightOutlined />
-              </div>
+              {isDing ? null : (
+                <div className='userInco userInco2'>
+                  <CaretRightOutlined />
+                </div>
+              )}
             </div>
 
             <div className='userSet'>

+ 2 - 0
src/types/declaration.d.ts

@@ -6,3 +6,5 @@ declare module '*.gif'
 declare module '*.svg'
 declare module 'js-export-excel'
 declare module 'braft-utils'
+declare const isDingTemp: boolean
+declare const baseUrlTempOne: string

+ 7 - 4
src/utils/http.ts

@@ -5,15 +5,18 @@ import store from '@/store'
 import { MessageFu } from './message'
 import { domShowFu } from './domShow'
 
-export const envFlag = process.env.NODE_ENV === 'development'
+// 是否是钉钉登录
+export const isDing = isDingTemp
 
-// export const baseUrlTemp = 'https://sit-yiwubwg.4dage.com' // 测试环境
-export const baseUrlTemp = 'http://192.168.20.61:8096' // 线下环境
+const envFlag = false
+
+const baseUrlTemp = baseUrlTempOne // 测试环境
+// export const baseUrlTemp = 'http://192.168.20.61:8096' // 线下环境
 
 const baseFlag = baseUrlTemp.includes('https://')
 
 // 请求基地址
-export const baseURL = envFlag ? `${baseUrlTemp}${baseFlag ? '' : '/api/'}` : ''
+export const baseURL = envFlag ? `${baseUrlTemp}${baseFlag ? '' : '/api/'}` : baseUrlTemp
 
 // 处理  类型“AxiosResponse<any, any>”上不存在属性“code”
 declare module 'axios' {

+ 30 - 0
yarn.lock

@@ -1166,6 +1166,11 @@
   dependencies:
     regenerator-runtime "^0.14.0"
 
+"@babel/runtime@^7.10.2":
+  version "7.27.6"
+  resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6"
+  integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==
+
 "@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3":
   version "7.23.9"
   resolved "https://registry.npmmirror.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
@@ -1896,6 +1901,11 @@
     "@react-spring/shared" "~9.6.1"
     "@react-spring/types" "~9.6.1"
 
+"@remax/mini-types@^0.1.0":
+  version "0.1.0"
+  resolved "https://registry.npmmirror.com/@remax/mini-types/-/mini-types-0.1.0.tgz#b30e9402c73eeb326a26ded4511381b918f984fa"
+  integrity sha512-bVDcbUrp6p0PZwfS0xGVQS6k9f8B35BtZaYt/W/IGKh7VALYQ+tS2KcytLRmIJ/Vmohaw5ikIRN89I+frPdh4g==
+
 "@rollup/plugin-babel@^5.2.0":
   version "5.3.1"
   resolved "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
@@ -4514,6 +4524,13 @@ diff-sequences@^29.6.3:
   resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
   integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
 
+dingtalk-jsapi@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/dingtalk-jsapi/-/dingtalk-jsapi-3.1.0.tgz#6b8cccfa2e32f6a696600e1520595d1a38d3a9aa"
+  integrity sha512-2W1XuOR3g/0eYbqXXOMKwmTSUzyIeKNIQ1DDgUrMmf3eNdfOb8ShcQZ02QNvn/j5Vpy6Pd0Yf+uRkWVB3Pl9gA==
+  dependencies:
+    promise-polyfill "^7.1.0"
+
 dir-glob@^3.0.1:
   version "3.0.1"
   resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -5664,6 +5681,14 @@ functions-have-names@^1.2.3:
   resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
   integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
 
+gdt-jsapi@^1.9.51:
+  version "1.9.51"
+  resolved "https://registry.npmmirror.com/gdt-jsapi/-/gdt-jsapi-1.9.51.tgz#8210b827600523e46656a2d07fde0287f88ebe94"
+  integrity sha512-VN1iIK7kJU2g2oxY/n8waCREhWxcVwR8qHAE1keVnUJHI6mTdgTelICzq++niRRCaLqUVWC1pYvftEVgk4sq8A==
+  dependencies:
+    "@babel/runtime" "^7.10.2"
+    "@remax/mini-types" "^0.1.0"
+
 gensync@^1.0.0-beta.2:
   version "1.0.0-beta.2"
   resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -8793,6 +8818,11 @@ process-nextick-args@~2.0.0:
   resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
   integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
 
+promise-polyfill@^7.1.0:
+  version "7.1.2"
+  resolved "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-7.1.2.tgz#ab05301d8c28536301622d69227632269a70ca3b"
+  integrity sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ==
+
 promise@^7.1.1:
   version "7.3.1"
   resolved "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"