diff --git a/src/components/layout/layout_config.tsx b/src/components/layout/layout_config.tsx index 7ef62bc..56909a7 100644 --- a/src/components/layout/layout_config.tsx +++ b/src/components/layout/layout_config.tsx @@ -79,6 +79,7 @@ export const items: ItemType[] = [ { label: `版本管理`, key: "/sys/version" }, { label: `捐赠管理`, key: "/sys/don" }, { label: `通告管理`, key: "/sys/notic" }, + { label: `App管理`, key: "/sys/app" }, ], }, ]; diff --git a/src/pages/charity/artic/artic_config.tsx b/src/pages/charity/artic/artic_config.tsx new file mode 100644 index 0000000..b21bd9f --- /dev/null +++ b/src/pages/charity/artic/artic_config.tsx @@ -0,0 +1,56 @@ +import { FormType } from "@/components/form/interface"; +import { UserDataType } from "@/model/userModel"; +import { ColumnsType } from "antd/lib/table"; +import { Image, Tag } from "antd"; +export const defaultConfig = [ + { + type: FormType.input, + label: "文章标题", + name: "title", + value: "", + rules: [{ required: true, message: "请输入文章标题!" }], + }, + { + type: FormType.textarea, + label: "内容", + name: "content", + value: "", + rules: [{ required: true, message: "请输入内容" }], + }, + { + type: FormType.upload, + label: "图片介绍", + name: "cover", + rules: [{ required: true, message: "请上传照片" }], + value: [], + }, +]; + +export const columns: ColumnsType = [ + { + title: "标题", + dataIndex: "title", + fixed: "left", + width:200, + }, + { + title: "图片介绍", + dataIndex: "cover", + width: 150, + render: (cover) => { + return ; + }, + }, + { + title: "内容", + dataIndex: "content", + width:400, + }, + { + title: "文章类型", + dataIndex: "artic_type", + render: (artic_type) => { + return {artic_type === 1 ? "三农" : "建议"}; + }, + }, +]; diff --git a/src/pages/charity/artic/index.tsx b/src/pages/charity/artic/index.tsx index ba20d91..5f8ccea 100644 --- a/src/pages/charity/artic/index.tsx +++ b/src/pages/charity/artic/index.tsx @@ -1,8 +1,105 @@ -const Setting = ()=>{ - return ( -
- Setting -
- ) -} -export default Setting \ No newline at end of file +import BTable from "@/components/b_table"; +import SimpleForm from "@/components/form/simple_form"; +import { Button, Form, FormInstance, Modal, Select, Space } from "antd"; +import { Store } from "antd/es/form/interface"; +import { inject, observer } from "mobx-react"; +import React from "react"; +import { useEffect, useState } from "react"; +import { columns, defaultConfig } from "./artic_config"; +const { Option } = Select; + +const Artic = (props: Store) => { + const { articStore } = props; + const [isModalOpen, setIsModalOpen] = useState(false); + const formRef = React.useRef(null); + const [userId, setId] = useState(null); + const [record, setRecord] = useState(null); + useEffect(() => { + articStore.getlist({}); + }, [articStore]); + return ( +
+ + + { + let obj = { + ...record, + cover: [{ url: record.cover }], + }; + setIsModalOpen(true); + formRef.current?.setFieldsValue(obj); + setRecord(obj); + setId(obj.identity); + }} + /> + + formRef.current?.resetFields()} + onOk={() => formRef.current?.submit()} + okText="确定" + cancelText="取消" + onCancel={() => { + setId(null); + setRecord(null); + setIsModalOpen(false); + }} + > + { + let data = formRef.current?.getFieldsValue(); + let obj = { + ...data, + cover: data.cover[0].url, + }; + if (userId) { + articStore.putItem(userId, obj); + } else { + articStore.add(obj); + } + setIsModalOpen(false); + }} + createCallback={() => { + formRef.current?.setFieldsValue(record); + }} + formDatas={defaultConfig as any} + childrenPosi={true} + > + + + + + + +
+ ); +}; + +export default inject("articStore")(observer(Artic)); diff --git a/src/pages/sys/app/banner.tsx b/src/pages/sys/app/banner.tsx new file mode 100644 index 0000000..a387143 --- /dev/null +++ b/src/pages/sys/app/banner.tsx @@ -0,0 +1,48 @@ +import AliUpload from "@/components/ali_upload"; +import { Button } from "antd"; +import { Store } from "antd/es/form/interface"; +import { inject, observer } from "mobx-react"; +import { useEffect, useState } from "react"; + +const Banner = (props: Store) => { + const { sysStore } = props; + const [files, setFiles] = useState([]); + useEffect(() => { + sysStore.getBanner({ app_position: 1 }).then((_) => { + setFiles(sysStore.banner); + }); + }, [sysStore]); + const save = () => { + let objList: any = []; + files.forEach((item, index) => { + objList.push({ + file_name: item.fileName, + file_url: item.url, + city_identity: "", + app_position: 1, + }); + }); + sysStore.setBanner({ list: objList }); + }; + return ( +
+
+ { + setFiles(v); + }} + /> + +
+
+ ); +}; + +export default inject("sysStore")(observer(Banner)); diff --git a/src/pages/sys/app/hp_banner.tsx b/src/pages/sys/app/hp_banner.tsx new file mode 100644 index 0000000..134382e --- /dev/null +++ b/src/pages/sys/app/hp_banner.tsx @@ -0,0 +1,48 @@ +import AliUpload from "@/components/ali_upload"; +import { Button } from "antd"; +import { Store } from "antd/es/form/interface"; +import { inject, observer } from "mobx-react"; +import { useEffect, useState } from "react"; + +const HpBanner = (props: Store) => { + const { sysStore } = props; + const [files, setFiles] = useState([]); + useEffect(() => { + sysStore.getBanner({ app_position: 2 }).then((_) => { + setFiles(sysStore.banner); + }); + }, [sysStore]); + const save = () => { + let objList: any = []; + files.forEach((item, index) => { + objList.push({ + file_name: item.fileName, + file_url: item.url, + city_identity: "", + app_position: 2, + }); + }); + sysStore.setBanner({ list: objList }); + }; + return ( +
+
+ { + setFiles(v); + }} + /> + +
+
+ ); +}; + +export default inject("sysStore")(observer(HpBanner)); diff --git a/src/pages/sys/app/index.tsx b/src/pages/sys/app/index.tsx new file mode 100644 index 0000000..4695a7d --- /dev/null +++ b/src/pages/sys/app/index.tsx @@ -0,0 +1,27 @@ +import { Tabs } from "antd"; +import Banner from "./banner"; +import HpBanner from "./hp_banner"; + +const App = () => { + return ( + <> + + }, + { + key: "banner", + label: "家乡轮播图设置", + children: + }, + ]} + /> + + ); +}; + +export default App; diff --git a/src/pages/sys/don/don_rule_setting.tsx b/src/pages/sys/don/don_rule_setting.tsx new file mode 100644 index 0000000..905d0cf --- /dev/null +++ b/src/pages/sys/don/don_rule_setting.tsx @@ -0,0 +1,9 @@ +const DonRuleSetting = () => { + return ( +
+ 捐赠规则设置 +
+ ); + }; + + export default DonRuleSetting; \ No newline at end of file diff --git a/src/pages/sys/don/don_setting.tsx b/src/pages/sys/don/don_setting.tsx new file mode 100644 index 0000000..a9ac356 --- /dev/null +++ b/src/pages/sys/don/don_setting.tsx @@ -0,0 +1,9 @@ +const DonSetting = () => { + return ( +
+ 捐赠设置 +
+ ); + }; + + export default DonSetting; \ No newline at end of file diff --git a/src/pages/sys/don/index.tsx b/src/pages/sys/don/index.tsx index 6b5fe8f..0790661 100644 --- a/src/pages/sys/don/index.tsx +++ b/src/pages/sys/don/index.tsx @@ -1,10 +1,27 @@ +import { Tabs } from "antd"; +import DonSetting from "./don_setting"; +import DonRuleSetting from "./don_rule_setting"; + const Don = () => { - return ( -
- cat -
- ); - }; - - export default Don; - \ No newline at end of file + return ( + <> + , + }, + { + key: "banner", + label: "捐赠规则", + children: , + }, + ]} + /> + + ); +}; + +export default Don; diff --git a/src/pages/sys/notic/index.tsx b/src/pages/sys/notic/index.tsx index 25f2234..ac9e392 100644 --- a/src/pages/sys/notic/index.tsx +++ b/src/pages/sys/notic/index.tsx @@ -1,7 +1,7 @@ const Notic = () => { return (
- cat + 通告
); }; diff --git a/src/router/routers/sys_router.tsx b/src/router/routers/sys_router.tsx index d0363ad..f60d4ba 100644 --- a/src/router/routers/sys_router.tsx +++ b/src/router/routers/sys_router.tsx @@ -33,6 +33,14 @@ export const sys = [ Component: (await import("@/pages/sys/version")).default, }), }, + + { + path: "/sys/app", + index: true, + lazy: async () => ({ + Component: (await import("@/pages/sys/app")).default, + }), + }, ], }, diff --git a/src/service/config.ts b/src/service/config.ts index 77e9a81..d3b0ab2 100644 --- a/src/service/config.ts +++ b/src/service/config.ts @@ -68,6 +68,13 @@ class SpecConfig { static LIST: string = "/skuSpec/list"; static DELETE: string = "/skuSpec"; } + +class ArticConfig { + static ADD: string = "/artic"; + static EDIT: string = "/artic"; + static LIST: string = "/artic/list"; + static DELETE: string = "/artic"; +} export { UserConfig, CityConfig, @@ -78,5 +85,6 @@ export { SpecConfig, CityHistoryConfig, CityHumIntroConfig, - CityLocalFoodConfig + CityLocalFoodConfig , + ArticConfig }; \ No newline at end of file diff --git a/src/store/artic.ts b/src/store/artic.ts new file mode 100644 index 0000000..e75c33e --- /dev/null +++ b/src/store/artic.ts @@ -0,0 +1,14 @@ + +import { makeObservable } from "mobx"; +import BaseStore from "./baseStore"; +import { UserDataType } from "@/model/userModel"; +import { ArticConfig } from "@/service/config"; + +class ArticStore extends BaseStore { + constructor() { + super(ArticConfig) + makeObservable(this, {}) + } +} +const articStore = new ArticStore(); +export default articStore; diff --git a/src/store/baseStore.ts b/src/store/baseStore.ts index 8c51747..6636e1d 100644 --- a/src/store/baseStore.ts +++ b/src/store/baseStore.ts @@ -30,7 +30,6 @@ class BaseStore implements BaseStoreInterface { add: action, listStatus: observable, }) - console.log(urlConfig) this.urlConfig = urlConfig; } diff --git a/src/store/index.ts b/src/store/index.ts index 0bb3140..0bd587a 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -5,6 +5,8 @@ import tagStore from './tag'; import skuStore from './sku'; import skuCatStore from './skuCat'; import skuSpecStore from './skuSpec'; +import sysStore from './sysStore'; +import articStore from './artic'; const store = { usrStore, @@ -16,7 +18,9 @@ const store = { skuSpecStore, cityLocalStore, cityhisStore, - cityhumStore + cityhumStore, + sysStore, + articStore, }; export default store; \ No newline at end of file diff --git a/src/store/sysStore.ts b/src/store/sysStore.ts new file mode 100644 index 0000000..1eb5b57 --- /dev/null +++ b/src/store/sysStore.ts @@ -0,0 +1,41 @@ + +import { action, makeObservable, observable } from "mobx"; +import { base } from "@/service/base"; + +class SysConfig { + static Banner: string = "/sys/banner"; +} +class SysStore { + banner: any = null; + constructor() { + makeObservable(this, { + getBanner: action, + banner:observable, + }) + } + + // 获取轮播图 + async getBanner(param) { + let data = await base.get(SysConfig.Banner, param) + if (data.code !== 200) { + return false + } + let list: any = [] + data.data.record.forEach(element => { + list.push({ + url: element.file_url, + file_name: element.file_name, + }) + }); + this.banner = list; + } + + async setBanner(param) { + let data = await base.post(SysConfig.Banner, param) + if (data.code !== 200) { + return false + } + } +} +const sysStore = new SysStore(); +export default sysStore; diff --git a/src/util/config.ts b/src/util/config.ts index a765561..c1ea0f6 100644 --- a/src/util/config.ts +++ b/src/util/config.ts @@ -1,5 +1,5 @@ class Config { static baseUrl = "/v1"; - static baseUrl1 = "http://127.0.0.1:12215/v1"; + // static baseUrl1 = "http://127.0.0.1:12215/v1"; } export default Config;