diff --git a/package-lock.json b/package-lock.json
index 3aefb3f..d0f8c3a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,6 +26,7 @@
"@tarojs/taro": "3.6.8",
"dayjs": "^1.11.9",
"marked": "^7.0.4",
+ "pnpm": "^8.9.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-refresh": "^0.11.0",
@@ -19271,6 +19272,21 @@
"semver-compare": "^1.0.0"
}
},
+ "node_modules/pnpm": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-8.9.0.tgz",
+ "integrity": "sha512-74hZk44fBTe5/PAwkEQxE5Lzs4s0QXbmzU/e4hsiVSSwrCobCK4q4t3Vs/9LjKSW1neOlQ8+fJ9VW4EyWYJEHA==",
+ "bin": {
+ "pnpm": "bin/pnpm.cjs",
+ "pnpx": "bin/pnpx.cjs"
+ },
+ "engines": {
+ "node": ">=16.14"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pnpm"
+ }
+ },
"node_modules/portfinder": {
"version": "1.0.32",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
@@ -39683,6 +39699,11 @@
"semver-compare": "^1.0.0"
}
},
+ "pnpm": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-8.9.0.tgz",
+ "integrity": "sha512-74hZk44fBTe5/PAwkEQxE5Lzs4s0QXbmzU/e4hsiVSSwrCobCK4q4t3Vs/9LjKSW1neOlQ8+fJ9VW4EyWYJEHA=="
+ },
"portfinder": {
"version": "1.0.32",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
diff --git a/package.json b/package.json
index c221015..7f97d92 100644
--- a/package.json
+++ b/package.json
@@ -55,6 +55,7 @@
"@tarojs/taro": "3.6.8",
"dayjs": "^1.11.9",
"marked": "^7.0.4",
+ "pnpm": "^8.9.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-refresh": "^0.11.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2b130cf..d5b03f1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,4 +1,4 @@
-lockfileVersion: '6.1'
+lockfileVersion: '6.0'
settings:
autoInstallPeers: true
@@ -56,6 +56,9 @@ dependencies:
marked:
specifier: ^7.0.4
version: 7.0.4
+ pnpm:
+ specifier: ^8.9.0
+ version: 8.9.0
react:
specifier: ^18.0.0
version: 18.0.0
@@ -716,6 +719,7 @@ packages:
/@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5):
resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
engines: {node: '>=6.9.0'}
+ deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
@@ -727,6 +731,7 @@ packages:
/@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.8.0):
resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
engines: {node: '>=6.9.0'}
+ deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
@@ -11623,6 +11628,12 @@ packages:
semver-compare: 1.0.0
dev: true
+ /pnpm@8.9.0:
+ resolution: {integrity: sha512-74hZk44fBTe5/PAwkEQxE5Lzs4s0QXbmzU/e4hsiVSSwrCobCK4q4t3Vs/9LjKSW1neOlQ8+fJ9VW4EyWYJEHA==}
+ engines: {node: '>=16.14'}
+ hasBin: true
+ dev: false
+
/portfinder@1.0.32:
resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
engines: {node: '>= 0.12.0'}
@@ -12192,6 +12203,7 @@ packages:
/prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
+ requiresBuild: true
dev: true
optional: true
diff --git a/src/app.config.ts b/src/app.config.ts
index c8a074f..a9ee822 100644
--- a/src/app.config.ts
+++ b/src/app.config.ts
@@ -78,6 +78,7 @@ export default defineAppConfig({
'student/student',
'curriculum/curriculum',
'addStudent/addStudent',
+ 'department/addDepartment',
'depCur/depCur',
'addCur/addCur',
'spotMeeting/spotMeeting',
diff --git a/src/pages/manage/addStudent/addStudent.tsx b/src/pages/manage/addStudent/addStudent.tsx
index 44728ef..bea6d35 100644
--- a/src/pages/manage/addStudent/addStudent.tsx
+++ b/src/pages/manage/addStudent/addStudent.tsx
@@ -99,6 +99,7 @@ const AddStudent = () => {
setUerInfo({...userInfo, phone_number: event.detail.value} as Student)}/>
diff --git a/src/pages/manage/depAdmin/depAdmin.tsx b/src/pages/manage/depAdmin/depAdmin.tsx
index b9b2d0f..d4867f8 100644
--- a/src/pages/manage/depAdmin/depAdmin.tsx
+++ b/src/pages/manage/depAdmin/depAdmin.tsx
@@ -100,6 +100,10 @@ const DepAdmin: FC = () => {
Taro.navigateTo({url: '/pages/manage/addStudent/addStudent'})
}
+ function jumpDepartment(){
+ Taro.navigateTo({url:`/pages/manage/department/addDepartment?company_id=${company?.id}&parent_id=${Number(router.params.dep_id) || 0}&sort=${manages.length}`})
+ }
+
const addDep = useCallback(async () => {
if (!depName) {
Taro.showToast({title: '请填写部门名称!', icon: 'error'})
@@ -165,7 +169,7 @@ const DepAdmin: FC = () => {
添加学员
- showPop(undefined)}>添加部门
+ 添加部门
{
router.params.id && 更多操作
}
diff --git a/src/pages/manage/department/addDepartment.config.ts b/src/pages/manage/department/addDepartment.config.ts
new file mode 100644
index 0000000..457d7f4
--- /dev/null
+++ b/src/pages/manage/department/addDepartment.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+ navigationBarTitleText: '',
+})
diff --git a/src/pages/manage/department/addDepartment.scss b/src/pages/manage/department/addDepartment.scss
new file mode 100644
index 0000000..01ffd9a
--- /dev/null
+++ b/src/pages/manage/department/addDepartment.scss
@@ -0,0 +1,17 @@
+.dep {
+ background: #ddd;
+ padding: 5px 15px;
+ border-radius: 3px;
+}
+
+.depSelected {
+ background: #9ee0a3;
+ color: #3f6942;
+}
+
+.add {
+ //position: fixed;
+ width: 710rpx;
+ margin-top: 30px;
+ border: none !important;
+}
diff --git a/src/pages/manage/department/addDepartment.tsx b/src/pages/manage/department/addDepartment.tsx
new file mode 100644
index 0000000..49ce074
--- /dev/null
+++ b/src/pages/manage/department/addDepartment.tsx
@@ -0,0 +1,69 @@
+import {Button, Form, Input, View} from "@tarojs/components";
+import {useEffect, useState} from "react";
+import {ManageApi} from "@/api/manage";
+import Taro from "@tarojs/taro";
+import './addDepartment.scss';
+import {getCurrentInstance} from "@tarojs/runtime";
+
+const AddDepartment = () => {
+ const [departmentInfo, setDepartmentInfo] = useState<{ name: string } | null>(null)
+ const params = getCurrentInstance()?.router?.params as { id?: string;parent_id?: string;sort?: string;company_id?:string }
+ console.log(params)
+
+ useEffect(() => {
+ Taro.setNavigationBarTitle({ title:'添加部门' })
+ if (params.id) {
+ Taro.setNavigationBarTitle({ title:'修改部门' })
+ }
+ }, [])
+
+
+ async function submit(e) {
+ const value: {name: string} = e.detail.value
+ for (const [_, val] of Object.entries(value)) {
+ if (!val) {
+ Taro.showToast({title: "请填写部门名称", icon: 'error'})
+ return
+ }
+ }
+ Taro.showLoading()
+ try {
+ if (params.id) {
+ await ManageApi.putDep(params.id, departmentInfo!.name)
+ } else {
+ await ManageApi.addDep({
+ name: departmentInfo!.name,
+ parent_id: Number(params.parent_id),
+ company_id: Number(params.company_id),
+ sort: Number(params.sort),
+ })
+ }
+ Taro.hideLoading()
+ Taro.showToast({title: "添加成功", icon: 'success'})
+ setTimeout(() => {
+ Taro.navigateBack()
+ }, 500)
+ } catch (e) {
+ }
+ Taro.hideLoading()
+ }
+
+ function onBlur(e){
+ setDepartmentInfo(p => ({...p,name:e.detail.value}))
+ }
+
+ return (
+
+
+
+ )
+}
+
+export default AddDepartment
diff --git a/src/pages/preview/search/search/index.tsx b/src/pages/preview/search/search/index.tsx
index a40b657..b6e87bd 100644
--- a/src/pages/preview/search/search/index.tsx
+++ b/src/pages/preview/search/search/index.tsx
@@ -1,206 +1,151 @@
-// import {Input, View, Text, PageContainer, Image} from "@tarojs/components";
-// import {FC, useEffect, useMemo, useState} from "react";
-// import styles from './index.module.scss'
-// import Taro from "@tarojs/taro";
-// import {useDidShow} from '@tarojs/taro'
-// import SearchList from './components/list'
-// import NavigationBar from "@/components/navigationBar/navigationBar";
-// import search from '@/static/img/search.png'
-// import del from '@/static/img/del.png'
-//
-//
-// const Search: FC = () => {
-// const [value, setValue] = useState('')
-// const [recentSearch, setRecentSearch] = useState([])
-// const [hotSearch] = useState([])
-// const [show, setShow] = useState(false)
-// const [focus, setFocus] = useState(false)
-//
-//
-// useDidShow(getRecentSearch)
-//
-// useEffect(() => {
-// !show && getRecentSearch()
-// }, [show])
-//
-// function inpFn(e) {
-// setValue(e.detail.value)
-// }
-//
-// function clearSearch() {
-// Taro.removeStorageSync('recentSearch')
-// getRecentSearch()
-// Taro.showToast({title: '删除成功'})
-// }
-//
-// function getRecentSearch() {
-// setRecentSearch(Taro.getStorageSync('recentSearch'))
-// }
-//
-// function getSearchItem(value) {
-// setValue(value)
-// setShow(true)
-// }
-//
-// function searchInput() {
-// if (value === "") return;
-// getSearchItem(value)
-// //记录最近搜索
-// let recentSearch = Taro.getStorageSync('recentSearch') || [];
-// recentSearch.unshift(value);
-// Taro.setStorageSync('recentSearch', [...new Set(recentSearch)])
-// }
-//
-// function cancelSearch(){
-// setValue('')
-// setShow(false)
-// setFocus(false)
-// Taro.navigateBack()
-// }
-//
-//
-// const searchStyles = useMemo((): React.CSSProperties | undefined => {
-// if (focus || show) {
-// return {
-// // transform: "translateY(-43px)",
-// // width: "100%",
-// }
-// }
-// }, [focus, show])
-//
-//
-// return (
-//
-//
-//
-//
-//
-// setFocus(true)}
-// onBlur={() => setFocus(false)}
-// className={styles.input}
-// placeholder={(focus || show) ? '' : "输入关键字搜索"}
-// type='text'
-// value={value}
-// confirmType='search'
-// onInput={inpFn}
-// onConfirm={searchInput}/>
-//
-//
-// 取消
-// {/*{focus || show ? 取消 : null}*/}
-//
-//
-//
-// {
-// recentSearch.length >= 1 && !show &&
-//
-//
-// 最近搜索
-//
-//
-//
-// {
-// recentSearch.length > 0 &&
-// recentSearch?.map(d =>
-//
-// getSearchItem(d)} className="font-28">{d}
-// )
-// }
-//
-//
-// }
-// {
-// hotSearch.length >= 1 && !show &&
-// <>
-//
-//
-// 热门搜索
-//
-//
-//
-// {
-// hotSearch.length &&
-// hotSearch.map(d =>
-//
-// {
-// getSearchItem(d)
-// }} className="font-28">{d}
-// )
-// }
-//
-//
-// >
-// }
-//
-//
-// {show && }
-//
-//
-// )
-// }
-// export default Search
-
-import {FC, useState, useMemo, memo, useCallback} from "react";
-import {Button, Text, View} from "@tarojs/components";
-
-
-type Props = {
- items: number[]
-}
-const Inner:FC = memo(({items}) =>
-{
- console.log('子组件渲染')
- return (
-
- { items.length &&
- items.map(d => {d})
- }
-
- )
-})
+import {Input, View, Text, PageContainer, Image} from "@tarojs/components";
+import {FC, useEffect, useMemo, useState} from "react";
+import styles from './index.module.scss'
+import Taro from "@tarojs/taro";
+import {useDidShow} from '@tarojs/taro'
+import SearchList from './components/list'
+import NavigationBar from "@/components/navigationBar/navigationBar";
+import search from '@/static/img/search.png'
+import del from '@/static/img/del.png'
-type Props1 = {
- change:(e) => void
-}
-const NewInner:FC = memo(({change}) => {
- console.log('子组件渲染')
- return (
-
- )
-})
const Search: FC = () => {
- const [b,setB]=useState(1)
- const [todos]=useState([1,2,3,4,5])
- const [tab,setTab] = useState(1)
- console.log('父组件渲染')
- const mNum = useMemo(() => todos.filter(d => d !== tab),[todos,tab])
-
- const change = useCallback((e:any) => {
- console.log(e)
- console.log(b,'b')
- setB( b + 1)
- },[b])
+ const [value, setValue] = useState('')
+ const [recentSearch, setRecentSearch] = useState([])
+ const [hotSearch] = useState([])
+ const [show, setShow] = useState(false)
+ const [focus, setFocus] = useState(false)
+
+
+ useDidShow(getRecentSearch)
+
+ useEffect(() => {
+ !show && getRecentSearch()
+ }, [show])
+
+ function inpFn(e) {
+ setValue(e.detail.value)
+ }
+
+ function clearSearch() {
+ Taro.removeStorageSync('recentSearch')
+ getRecentSearch()
+ Taro.showToast({title: '删除成功'})
+ }
+
+ function getRecentSearch() {
+ setRecentSearch(Taro.getStorageSync('recentSearch'))
+ }
+
+ function getSearchItem(value) {
+ setValue(value)
+ setShow(true)
+ }
+
+ function searchInput() {
+ if (value === "") return;
+ getSearchItem(value)
+ //记录最近搜索
+ let recentSearch = Taro.getStorageSync('recentSearch') || [];
+ recentSearch.unshift(value);
+ Taro.setStorageSync('recentSearch', [...new Set(recentSearch)])
+ }
+
+ function cancelSearch(){
+ setValue('')
+ setShow(false)
+ setFocus(false)
+ Taro.navigateBack()
+ }
+
+
+ const searchStyles = useMemo((): React.CSSProperties | undefined => {
+ if (focus || show) {
+ return {
+ // transform: "translateY(-43px)",
+ // width: "100%",
+ }
+ }
+ }, [focus, show])
+
+
return (
-
- {b}
- {/**/}
- {/**/}
- {/**/}
- {/**/}
- {/**/}
-
+
+
+
+
+
+ setFocus(true)}
+ onBlur={() => setFocus(false)}
+ className={styles.input}
+ placeholder={(focus || show) ? '' : "输入关键字搜索"}
+ type='text'
+ value={value}
+ confirmType='search'
+ onInput={inpFn}
+ onConfirm={searchInput}/>
+
+
+ 取消
+ {/*{focus || show ? 取消 : null}*/}
+
+
+
+ {
+ recentSearch.length >= 1 && !show &&
+
+
+ 最近搜索
+
+
+
+ {
+ recentSearch.length > 0 &&
+ recentSearch?.map(d =>
+
+ getSearchItem(d)} className="font-28">{d}
+ )
+ }
+
+
+ }
+ {
+ hotSearch.length >= 1 && !show &&
+ <>
+
+
+ 热门搜索
+
+
+
+ {
+ hotSearch.length &&
+ hotSearch.map(d =>
+
+ {
+ getSearchItem(d)
+ }} className="font-28">{d}
+ )
+ }
+
+
+ >
+ }
+
+
+ {show && }
+
)
}