-
-
- {
- cityStore.deleteItem(record);
- }}
- editCallback={(record) => {
- setIsModalOpen(true);
- formRef.current?.setFieldsValue(record);
- setRecord(record);
- setId(record.id);
- }}
- />
-
- formRef.current?.resetFields()}
- onOk={() => formRef.current?.submit()}
- okText="确定"
- cancelText="取消"
- onCancel={() => {
- setId(null);
- setRecord(null);
- setIsModalOpen(false);
- }}
- >
- {
- cityStore.add(formRef.current?.getFieldsValue())
- setIsModalOpen(false);
- }}
- createCallback={() => {
- formRef.current?.setFieldsValue(record);
- }}
- formDatas={formConfig as any}
- >
-
-
+
+
);
};
-export default inject("cityStore")(observer(City));
+export default City;
diff --git a/src/pages/city/list.tsx b/src/pages/city/list.tsx
new file mode 100644
index 0000000..019b3dd
--- /dev/null
+++ b/src/pages/city/list.tsx
@@ -0,0 +1,75 @@
+import React from "react";
+import { Button, Space, Modal, FormInstance } from "antd";
+import { Store } from "antd/lib/form/interface";
+import { inject, observer } from "mobx-react";
+import { useEffect, useState } from "react";
+import { columns, formConfig } from "./config";
+import BTable from "@/components/b_table";
+import SimpleForm from "@/components/form/simple_form";
+const City = (props: Store) => {
+ const { cityStore } = props;
+ const [isModalOpen, setIsModalOpen] = useState
(false);
+ const formRef = React.useRef(null);
+ const [userId, setId] = useState(null);
+ const [record, setRecord] = useState(null);
+
+ // 获取列表数据
+ useEffect(() => {
+ cityStore.getlist();
+ }, [cityStore]);
+
+ return (
+
+
+
+ {
+ cityStore.deleteItem(record);
+ }}
+ editCallback={(record) => {
+ setIsModalOpen(true);
+ formRef.current?.setFieldsValue(record);
+ setRecord(record);
+ setId(record.id);
+ }}
+ />
+ formRef.current?.resetFields()}
+ onOk={() => formRef.current?.submit()}
+ okText="确定"
+ cancelText="取消"
+ onCancel={() => {
+ setId(null);
+ setRecord(null);
+ setIsModalOpen(false);
+ }}
+ >
+ {
+ cityStore.add(formRef.current?.getFieldsValue())
+ setIsModalOpen(false);
+ }}
+ createCallback={() => {
+ formRef.current?.setFieldsValue(record);
+ }}
+ formDatas={formConfig as any}
+ >
+
+
+
+ );
+};
+
+export default inject("cityStore")(observer(City));
diff --git a/src/pages/sku/sku/config.tsx b/src/pages/sku/sku/config.tsx
index 688a374..0676545 100644
--- a/src/pages/sku/sku/config.tsx
+++ b/src/pages/sku/sku/config.tsx
@@ -1,29 +1,6 @@
-import { FormType } from "@/components/form/interface";
import { UserDataType } from "@/model/userModel";
import { ColumnsType } from "antd/lib/table";
-export const formConfig = [
- {
- type: FormType.input,
- label: "商品名称",
- name: "tag_name",
- value: "",
- rules: [{ required: true, message: "标签名称不能为空!" }],
- },
- {
- type: FormType.input,
- label: "标签描述",
- name: "tag_desc",
- value: "",
- rules: [{ required: true, message: "城市编码不能为空" }],
- },
- {
- type: FormType.input,
- label: "标签排序",
- name: "tag_sort",
- value: "1",
- rules: [{ required: true, message: "标签排序不能为空" }],
- },
-];
+import { Image } from "antd";
export const columns: ColumnsType = [
{
@@ -31,13 +8,12 @@ export const columns: ColumnsType = [
dataIndex: "sku_name",
fixed: "left",
},
- {
- title: "库存",
- dataIndex: "sku_stock",
- },
{
title: "商品分类",
- dataIndex: "sku_cat_identity",
+ dataIndex: "sku_cat",
+ render: (text, record) => {
+ return {text.name};
+ },
},
{
title: "品牌",
@@ -46,6 +22,9 @@ export const columns: ColumnsType = [
{
title: "缩略图",
dataIndex: "sku_thumb",
+ render: (text, record) => {
+ return ;
+ },
},
{
title: "商品介绍",
@@ -53,6 +32,9 @@ export const columns: ColumnsType = [
},
{
title: "所属城市",
- dataIndex: "city_identity",
+ dataIndex: "city",
+ render: (text, record) => {
+ return {text.city_name};
+ },
},
];
diff --git a/src/pages/sku/sku/index.tsx b/src/pages/sku/sku/index.tsx
index 895cd0a..4eac01c 100644
--- a/src/pages/sku/sku/index.tsx
+++ b/src/pages/sku/sku/index.tsx
@@ -1,17 +1,15 @@
import React from "react";
-import { Button, Space, Modal, FormInstance } from "antd";
+import { Button, Space } from "antd";
import { Store } from "antd/lib/form/interface";
import { inject, observer } from "mobx-react";
-import { useEffect, useState } from "react";
-import { columns, formConfig } from "./config";
+import { useEffect } from "react";
+import { columns } from "./config";
import BTable from "@/components/b_table";
-import SimpleForm from "@/components/form/simple_form";
+import { useNavigate } from "react-router";
const Sku = (props: Store) => {
const { skuStore } = props;
- const [isModalOpen, setIsModalOpen] = useState(false);
- const formRef = React.useRef(null);
- const [userId, setId] = useState(null);
- const [record, setRecord] = useState(null);
+
+ const nav = useNavigate();
// 获取列表数据
useEffect(() => {
@@ -21,7 +19,7 @@ const Sku = (props: Store) => {
return (
-
);
diff --git a/src/pages/sku/sku/sku_add.tsx b/src/pages/sku/sku/sku_add.tsx
new file mode 100644
index 0000000..b4c08e7
--- /dev/null
+++ b/src/pages/sku/sku/sku_add.tsx
@@ -0,0 +1,147 @@
+import SimpleForm from "@/components/form/simple_form";
+import { Button, Form, FormInstance, InputNumber, Select, Space } from "antd";
+import React, { useEffect } from "react";
+import { formConfig } from "./sku_add_config";
+import { inject, observer } from "mobx-react";
+import { MinusCircleOutlined } from "@ant-design/icons";
+import { Store } from "antd/es/form/interface";
+const { Option } = Select;
+
+const SkuAdd = (props: Store) => {
+ const formRef = React.useRef(null);
+ const { skuStore } = props;
+ useEffect(() => {
+ skuStore.getSkuSpecCat();
+ });
+ const create = () => {
+ let data = formRef.current?.getFieldsValue();
+ let obj = {...data}
+ let files:any = []
+ obj.sku_thumb = data.sku_thumb[0].url;
+
+ if (data.files && data.files.length > 0) {
+ data.files.forEach((v)=>{
+ if(v.url){
+ files.push({
+ file_name:v.fileName,
+ file_url:v.url,
+ file_type:1,
+ })
+ }
+ })
+ }
+ obj.files = files
+ skuStore.add(obj);
+ };
+ return (
+
+
+ 商品添加
+ formRef.current?.submit()}>提交
+
+
create()}
+ createCallback={() => {
+ // formRef.current?.setFieldsValue(record);
+ }}
+ formDatas={formConfig as any}
+ >
+
+ {(fields, { add, remove }) => {
+ return (
+ <>
+ {fields.map(({ key, name }) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ remove(name)}
+ style={{ marginLeft: "20px" }}
+ />
+
+ ))}
+
+ {
+ add();
+ }}
+ >
+ 添加规格
+
+
+ >
+ );
+ }}
+
+
+
+ );
+};
+
+export default inject("skuStore")(observer(SkuAdd));
diff --git a/src/pages/sku/sku/sku_add_config.tsx b/src/pages/sku/sku/sku_add_config.tsx
new file mode 100644
index 0000000..0dcea35
--- /dev/null
+++ b/src/pages/sku/sku/sku_add_config.tsx
@@ -0,0 +1,62 @@
+import { FormType } from "@/components/form/interface";
+import { CityConfig, SkuCatConfig, TagConfig } from "@/service/config";
+export const formConfig = [
+ {
+ type: FormType.input,
+ label: "商品名称",
+ name: "sku_name",
+ value: "",
+ rules: [{ required: true, message: "商品名称不能为空!" }],
+ },
+ {
+ type: FormType.select,
+ label: "标签",
+ name: "tags_id",
+ value: "",
+ key: "tag_name",
+ selectModel: "tags",
+ selectUrl: TagConfig.LIST,
+ rules: [{ required: true, message: "不能为空" }],
+ },
+
+ {
+ type: FormType.select,
+ label: "分类",
+ name: "sku_cat_identity",
+ value: "1",
+
+ selectUrl: SkuCatConfig.LIST,
+ rules: [{ required: true, message: "分类不能为空" }],
+ },
+ {
+ type: FormType.upload,
+ label: "缩略图",
+ name: "sku_thumb",
+ value: [],
+ maxCount: 1,
+ rules: [{ required: true, message: "缩略图不能为空" }],
+ },
+ {
+ type: FormType.select,
+ label: "城市",
+ name: "city_identity",
+ value: "",
+ key: "city_name",
+ selectUrl: CityConfig.LIST,
+ rules: [{ required: true, message: "城市不能为空" }],
+ },
+ {
+ type: FormType.upload,
+ label: "附件图",
+ name: "files",
+ value: [],
+ maxCount: 10,
+ rules: [{ required: true, message: "附件图不能为空" }],
+ },
+ {
+ type: FormType.textarea,
+ label: "描述",
+ name: "sku_desc",
+ rules: [{ required: true, message: "描述不能为空" }],
+ },
+];
diff --git a/src/router/index.tsx b/src/router/index.tsx
index fd6f624..45abfd5 100644
--- a/src/router/index.tsx
+++ b/src/router/index.tsx
@@ -3,6 +3,7 @@ import LayOut from "@/components/layout/layout";
import { rbac } from "./routers/rbac_router";
import { sku } from "./routers/sku_router";
import { sys } from "./routers/sys_router";
+import { city } from "./routers/city_router";
const routers = createHashRouter([
{
@@ -26,6 +27,7 @@ const routers = createHashRouter([
...rbac,
...sku,
...sys,
+ ...city,
{
path: "/order/list",
index: true,
@@ -33,13 +35,7 @@ const routers = createHashRouter([
Component:(await import("@/pages/order")).default,
})
},
- {
- path: "/city/list",
- index: true,
- lazy: async() => ({
- Component:(await import("@/pages/city")).default,
- })
- },
+
],
},
{
diff --git a/src/router/routers/city_router.tsx b/src/router/routers/city_router.tsx
new file mode 100644
index 0000000..720f310
--- /dev/null
+++ b/src/router/routers/city_router.tsx
@@ -0,0 +1,38 @@
+export const city = [
+ {
+ path: "/city",
+ lazy: async () => ({
+ Component: (await import("@/pages/city")).default,
+ }),
+ children: [
+ {
+ path: "/city/list",
+ index: true,
+ lazy: async () => ({
+ Component: (await import("@/pages/city/list")).default,
+ }),
+ },
+ {
+ path: "/city/history",
+ index: true,
+ lazy: async () => ({
+ Component: (await import("@/pages/city/history")).default,
+ }),
+ },
+ {
+ path: "/city/hum",
+ index: true,
+ lazy: async () => ({
+ Component: (await import("@/pages/city/hum_intro")).default,
+ }),
+ },
+ {
+ path: "/city/food",
+ index: true,
+ lazy: async () => ({
+ Component: (await import("@/pages/city/food")).default,
+ }),
+ },
+ ],
+ },
+];
diff --git a/src/router/routers/sku_router.tsx b/src/router/routers/sku_router.tsx
index 47ecf10..e96d7c3 100644
--- a/src/router/routers/sku_router.tsx
+++ b/src/router/routers/sku_router.tsx
@@ -12,6 +12,13 @@ export const sku = [
Component: (await import("@/pages/sku/sku")).default,
}),
},
+ {
+ path: "/sku/add",
+ index: true,
+ lazy: async () => ({
+ Component: (await import("@/pages/sku/sku/sku_add")).default,
+ }),
+ },
{
path: "/sku/cat",
index: true,
diff --git a/src/service/config.ts b/src/service/config.ts
index 9ab5805..7967781 100644
--- a/src/service/config.ts
+++ b/src/service/config.ts
@@ -14,6 +14,26 @@ class CityConfig {
static DELETE: string = "/city";
}
+class CityLocalFoodConfig {
+ static ADD: string = "/cityFood";
+ static EDIT: string = "/cityFood";
+ static LIST: string = "/cityFood/list";
+ static DELETE: string = "/cityFood";
+}
+
+class CityHistoryConfig {
+ static ADD: string = "/cityHistory";
+ static EDIT: string = "/cityHistory";
+ static LIST: string = "/cityHistory/list";
+ static DELETE: string = "/cityHistory";
+}
+
+class CityHumIntroConfig {
+ static ADD: string = "/cityHumIntro";
+ static EDIT: string = "/cityHumIntro";
+ static LIST: string = "/cityHumIntro/list";
+ static DELETE: string = "/cityHumIntro";
+}
class SkuConfig {
static ADD: string = "/sku";
@@ -49,4 +69,4 @@ class SpecConfig {
static LIST: string = "/skuSpec/list";
static DELETE: string = "/skuSpec";
}
-export { UserConfig, CityConfig, SkuCatConfig, SkuConfig, Orderconfig, TagConfig, SpecConfig };
\ No newline at end of file
+export { UserConfig, CityConfig, SkuCatConfig, SkuConfig, Orderconfig, TagConfig, SpecConfig, CityHistoryConfig, CityHumIntroConfig, CityLocalFoodConfig };
\ No newline at end of file
diff --git a/src/store/city.ts b/src/store/city.ts
index 21c49bf..90fb7b8 100644
--- a/src/store/city.ts
+++ b/src/store/city.ts
@@ -1,7 +1,7 @@
import { makeObservable } from "mobx";
import BaseStore from "./baseStore";
import { UserDataType } from "@/model/userModel";
-import { CityConfig } from "@/service/config";
+import { CityConfig, CityHistoryConfig, CityHumIntroConfig, CityLocalFoodConfig } from "@/service/config";
class CityStore extends BaseStore {
constructor() {
@@ -10,4 +10,28 @@ class CityStore extends BaseStore {
}
}
const cityStore = new CityStore();
-export default cityStore;
\ No newline at end of file
+
+class CityHisStore extends BaseStore {
+ constructor() {
+ super(CityHistoryConfig)
+ makeObservable(this, {})
+ }
+}
+const cityhisStore = new CityHisStore();
+
+class CityHumStore extends BaseStore {
+ constructor() {
+ super(CityHumIntroConfig)
+ makeObservable(this, {})
+ }
+}
+const cityhumStore = new CityHumStore();
+
+class CityLocalStore extends BaseStore {
+ constructor() {
+ super(CityLocalFoodConfig)
+ makeObservable(this, {})
+ }
+}
+const cityLocalStore = new CityLocalStore();
+export { cityStore, cityLocalStore, cityhisStore, cityhumStore };
\ No newline at end of file
diff --git a/src/store/index.ts b/src/store/index.ts
index f2b3b4d..0bb3140 100644
--- a/src/store/index.ts
+++ b/src/store/index.ts
@@ -1,5 +1,5 @@
import usrStore from '@/store/user'
-import cityStore from '@/store/city'
+import { cityStore, cityLocalStore, cityhisStore, cityhumStore } from '@/store/city'
import orderStore from './order';
import tagStore from './tag';
import skuStore from './sku';
@@ -13,7 +13,10 @@ const store = {
tagStore,
skuStore,
skuCatStore,
- skuSpecStore
+ skuSpecStore,
+ cityLocalStore,
+ cityhisStore,
+ cityhumStore
};
export default store;
\ No newline at end of file
diff --git a/src/store/sku.ts b/src/store/sku.ts
index 543270d..2faa080 100644
--- a/src/store/sku.ts
+++ b/src/store/sku.ts
@@ -1,13 +1,28 @@
-import { makeObservable } from "mobx";
+import { action, makeObservable, observable } from "mobx";
import BaseStore from "./baseStore";
import { UserDataType } from "@/model/userModel";
-import { SkuConfig } from "@/service/config";
+import { SkuConfig, SpecConfig } from "@/service/config";
+import { base } from "@/service/base";
+import { message } from "antd";
class SkuStore extends BaseStore {
+ skuSpec = []
constructor() {
super(SkuConfig)
- makeObservable(this, {})
+ makeObservable(this, {
+ skuSpec: observable,
+ getSkuSpecCat: action,
+ })
}
+ // 获取规格
+ async getSkuSpecCat() {
+ let data = await base.get(SpecConfig.LIST, { size: 30, offset: 1 })
+ if (data.code !== 200) {
+ message.error(data.msg)
+ return false
+ }
+ this.skuSpec = data.data.record
+ };
}
const skuStore = new SkuStore();
export default skuStore;
\ No newline at end of file
diff --git a/src/util/config.ts b/src/util/config.ts
index 287632e..a765561 100644
--- a/src/util/config.ts
+++ b/src/util/config.ts
@@ -1,5 +1,5 @@
class Config {
static baseUrl = "/v1";
- // static baseUrl = "http://127.0.0.1:12215/v1";
+ static baseUrl1 = "http://127.0.0.1:12215/v1";
}
export default Config;