Sfoglia il codice sorgente

Merge branch 'develop' of http://120.55.44.4:10080/xujunjie/gt_client_pad into develop

xujunjie 1 anno fa
parent
commit
0af7fcff7c

+ 11 - 1
.umirc.ts

@@ -19,7 +19,7 @@ export default defineConfig({
   proxy: {
     '/api': {
       // target: 'http://47.96.12.136:8888/',
-      target: 'http://47.96.12.136:8788/',
+      target: 'http://47.96.12.136:8888/',
       // target: 'https://work.greentech.com.cn/',
       changeOrigin: true,
     },
@@ -79,6 +79,16 @@ export default defineConfig({
       path: '/task-manage/:projectId',
       component: './TaskManage',
     },
+    {
+      name: '消息中心',
+      path: '/message/:projectId',
+      component: './MessageCenter',
+    },
+    {
+      name: '消息中心',
+      path: '/device/:projectId',
+      component: './DeviceManager',
+    },
     // {
     //   name: '权限演示',
     //   path: '/access',

BIN
src/assets/deviceManager/chartIcon.png


BIN
src/assets/deviceManager/device01.png


+ 35 - 0
src/components/TabsContent/index.js

@@ -0,0 +1,35 @@
+import { useMemo, useState } from 'react';
+import styles from './index.less';
+
+const TabsContent = (props) => {
+  const { defaultActiveKey = '1', center = true, items = {}, onChange } = props;
+  const [active, setActive] = useState(defaultActiveKey);
+  const renderContent = useMemo(() => {
+    return items.find((item) => item.key == active).children;
+  }, [active]);
+  return (
+    <div>
+      <div
+        className={styles.tabsTitle}
+        style={center ? { justifyContent: 'center' } : {}}
+      >
+        {items.map((item) => (
+          <div
+            key={item.key}
+            className={`${styles.tabsItem} ${
+              active == item.key ? styles.active : ''
+            }`}
+            onClick={() => {
+              setActive(item.key);
+              onChange(item.key);
+            }}
+          >
+            {item.label}
+          </div>
+        ))}
+      </div>
+      <div>{renderContent}</div>
+    </div>
+  );
+};
+export default TabsContent;

+ 17 - 0
src/components/TabsContent/index.less

@@ -0,0 +1,17 @@
+.tabsTitle {
+  display: flex;
+  align-items: center;
+  height: 40px;
+  :nth-child(1) {
+    border-right: 1px solid black;
+  }
+  :last-child {
+    border-right: none;
+  }
+}
+.tabsItem {
+  padding: 0 20px;
+}
+.active {
+  color: aqua;
+}

+ 10 - 1
src/global.less

@@ -48,6 +48,15 @@ button {
 }
 body {
   color: #333;
+  .ant-collapse-header {
+    flex-direction: row-reverse;
+  }
+  .ant-collapse-item {
+    background-color: white !important;
+    border-radius: 6px !important;
+    border-bottom: none !important;
+    margin-bottom: 10px;
+  }
 }
 
 // Remove list styles on ul, ol
@@ -114,4 +123,4 @@ input[type='reset'] {
   &.open {
     background-image: url('@/assets/icon-eye2.png');
   }
-}
+}

+ 169 - 0
src/pages/DeviceManager/index.js

@@ -0,0 +1,169 @@
+import PageContent from '@/components/PageContent';
+import TabsContent from '@/components/TabsContent';
+import { queryDeviceList } from '@/services/device';
+import { useParams, useRequest } from '@umijs/max';
+import { Button, Collapse, Space } from 'antd';
+import { useMemo } from 'react';
+const img = require('@/assets/deviceManager/device01.png');
+const chartIcon = require('@/assets/deviceManager/chartIcon.png');
+const DeviceManager = () => {
+  const { projectId } = useParams();
+  const { data, run, loading } = useRequest((data) => queryDeviceList(data), {
+    defaultParams: [projectId],
+  });
+
+  const onChange = (tab) => {
+    console.log(tab);
+  };
+  return (
+    <PageContent style={{ backgroundColor: 'gray' }}>
+      <TabsContent
+        defaultActiveKey="1"
+        onChange={onChange}
+        items={[
+          {
+            label: `设备管理`,
+            key: '1',
+            children: <Device data={data} />,
+          },
+          {
+            label: `备品管理`,
+            key: '2',
+            children: <SparePart />,
+          },
+        ]}
+      />
+    </PageContent>
+  );
+};
+const Device = ({ data }) => {
+  const dataSource = useMemo(() => {
+    const total = data?.reduce((total, item) => item.Count, 0);
+    const items = data?.map((item, idx) => {
+      return {
+        key: idx,
+        label: item.Type,
+        children: <div>{data?.map((item) => item.Name)}</div>,
+      };
+    });
+    return { total, items };
+  }, [data]);
+  const items = [
+    {
+      key: '1',
+      label: 'This is panel header with arrow icon',
+      children: <p>aaaaaaaa</p>,
+    },
+    {
+      key: '2',
+      label: 'This is panel header with no arrow icon',
+      children: <p>aaaaaaaaa</p>,
+      showArrow: false,
+    },
+  ];
+  const onChange = (key) => {
+    console.log(key);
+  };
+  return (
+    <div style={{ width: '100%' }}>
+      <div
+        style={{
+          display: 'flex',
+          borderRadius: '10px',
+          backgroundColor: 'white',
+          justifyContent: 'space-around',
+        }}
+      >
+        <img style={{ width: '30%' }} src={img} />
+        <div>
+          <div>{dataSource?.total}</div>
+          <div>设备总数</div>
+        </div>
+        <div>
+          <div
+            style={{
+              display: 'flex',
+            }}
+          >
+            <div
+              style={{
+                width: '20px',
+                height: '20px',
+                backgroundColor: 'green',
+                borderRadius: '10px',
+              }}
+            />
+            <div>运行</div>
+            <div>137</div>
+          </div>
+          <div
+            style={{
+              display: 'flex',
+            }}
+          >
+            <div
+              style={{
+                width: '20px',
+                height: '20px',
+                backgroundColor: 'green',
+                borderRadius: '10px',
+              }}
+            />
+            <div>运行</div>
+            <div>137</div>
+          </div>
+          <div
+            style={{
+              display: 'flex',
+            }}
+          >
+            <div
+              style={{
+                width: '20px',
+                height: '20px',
+                backgroundColor: 'green',
+                borderRadius: '10px',
+              }}
+            />
+            <div>运行</div>
+            <div>137</div>
+          </div>
+        </div>
+      </div>
+      <Space>
+        <Button shape="round">全部</Button>
+        <Button shape="round">维修</Button>
+        <Button shape="round">保养</Button>
+      </Space>
+      <Collapse
+        defaultActiveKey={['1']}
+        bordered={false}
+        onChange={onChange}
+        items={dataSource?.items}
+      />
+    </div>
+  );
+};
+const SparePart = () => {
+  return (
+    <div>
+      <div
+        style={{
+          display: 'flex',
+          borderRadius: '10px',
+          backgroundColor: 'white',
+          justifyContent: 'space-around',
+        }}
+      >
+        <img style={{ width: '30%' }} src={img} />
+        <div>
+          <div>410</div>
+          <div>在库数量(个)</div>
+        </div>
+        <img style={{ position: 'absolute', right: '20px' }} src={chartIcon} />
+      </div>
+    </div>
+  );
+};
+
+export default DeviceManager;

+ 4 - 0
src/pages/DeviceManager/index.less

@@ -0,0 +1,4 @@
+.close {
+  position: absolute;
+  right: 0;
+}

+ 4 - 0
src/pages/MessageCenter/index.js

@@ -0,0 +1,4 @@
+const MessageCenter = () => {
+  return <div>1111</div>;
+};
+export default MessageCenter;

+ 0 - 0
src/pages/MessageCenter/index.less


+ 18 - 0
src/pages/index.less

@@ -0,0 +1,18 @@
+body {
+  :global {
+    .ant-tabs-nav .ant-tabs-tab {
+      padding: 0 32px;
+      margin-right: 0px;
+      border-right: 1px solid #d7e4e8;
+      // vertical-align: middle;
+
+      &:last-child {
+        border-right: none;
+      }
+
+      &::before {
+        display: none;
+      }
+    }
+  }
+}

+ 212 - 0
src/services/StorageManagement.js

@@ -0,0 +1,212 @@
+import { stringify } from 'qs';
+import { request } from 'umi';
+
+/**
+ * 请求列表 入库、出库、报废、盘点记录
+ * @param {*} data
+ * @param {*} data.project_id
+ * @param {*} data.start_time
+ * @param {*} data.end_time
+ * @param {*} data.category_id   //0 全部
+ * @param {*} data.name
+ * @param {*} data.check_result // 0 全部  1正常 2 盘盈 3 盘亏
+ * @param {*} data.type     //0 入库 1 出库 2报废 3 盘点
+ * @param {*} data.page_size
+ * @param {*} data.page
+ * @returns
+ */
+export async function queryStoreList(data) {
+  var res = await request(`/api/store/v1/store/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data?.data || [];
+}
+
+/**
+ * 请求列表 基础库存、库存报警、库存盘点
+ * @param {*} data
+ * @param {*} data.project_id
+ * @param {*} data.category_id   //0 全部
+ * @param {*} data.name
+ * @param {*} data.warning_state //0 全部 1正常 2报警
+ * @param {*} data.page_size
+ * @param {*} data.page
+ * @returns
+ */
+export async function queryInventoryList(data) {
+  var res = await request(`/api/store/v1/inventory/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data?.list || [];
+}
+
+/**
+ * 仓储类型
+ */
+export async function queryCategoryList(data) {
+  var res = await request(`/api/store/v1/category/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data?.list || [];
+}
+
+/**
+ *创建记录
+ * @param {*} data
+ * @param {*} data.project_id
+ * @param {*} data.category_id //仓储类型
+ * @param {*} data.name
+ * @param {*} data.model_number   //0 全部
+ * @param {*} data.unit
+ * @param {*} data.amount //数量
+ * @param {*} data.check_amount    //盘点数量
+ * @param {*} data.recipient_user_name   //领用人
+ * @param {*} data.desc
+ * @param {*} data.check_result
+ * @param {*} data.types   //0 入库 1 出库 2报废 3 盘点
+ * @returns
+ */
+export async function queryStoreCreateItem(data) {
+  var res = await request(`/api/store/v1/create/item`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+/**
+ *  修改记录
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.id
+ */
+export async function queryUpdateItem(data) {
+  var res = await request(`/api/store/v1/update/item`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+/**
+ *  删除记录
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.id
+ */
+export async function queryStorageDel(data) {
+  var res = await request(`/api/store/v1/storage/del`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+/**
+ *  设置阈值
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.id
+ *  @param {*} data.amount
+ */
+export async function querySetThreshold(data) {
+  var res = await request(`/api/store/v1/set/threshold`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+
+/**
+ *  入库、出库、报废图表接口
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.year
+ *  @param {*} data.month  // 0本年度全部  1-12对应月
+ *  @param {*} data.types   //0 入库 1 出库 2报废 3 盘点
+ */
+export async function queryChartList(data) {
+  var res = await request(`/api/store/v1/chart/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+
+/**
+ *  库存折线图
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.year
+ *  @param {*} data.month  // 0本年度全部  1-12对应月
+ */
+export async function queryInventoryChartList(data) {
+  var res = await request(`/api/store/v1/inventory-chart/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+
+/**
+ *  总览接口
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.year
+ *  @param {*} data.month  // 0本年度全部  1-12对应月
+ */
+export async function queryMainChartList(data) {
+  var res = await request(`/api/store/v1/main-chart/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data || [];
+}
+
+/**
+ *  名称筛选
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.category_id
+ *  @param  data.name
+ *  @param  data.model_number
+ */
+export async function queryStorageSelList(data) {
+  var res = await request(`/api/store/v1/storage-sel/list`, {
+    method: 'POST',
+    body: data,
+  });
+  return res?.data?.list || [];
+}
+
+/**
+ *  出入库报废 导入excel
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param {*} data.types
+ *  @param {*} data.file
+ *  @param {*} data.user_name
+ */
+export async function queryStoreImport(data) {
+  var res = await request(`/api/store/v1/store/import`, {
+    method: 'POST',
+    body: data,
+  });
+  return res;
+}
+
+/**
+ *  出入库报废 导出excel
+ *  @param {*} data
+ *  @param {*} data.project_id
+ *  @param  data.start_time
+ *  @param  data.end_time
+ *  @param {*} data.category_id
+ *  @param {*} data.name
+ *  @param {*} data.type
+ *  @param {*} data.warning_state
+ */
+export async function queryStoreExport(data) {
+  return request(`/api/store/v1/store/export?${stringify(data)}`);
+  return res;
+}

+ 11 - 0
src/services/device.js

@@ -0,0 +1,11 @@
+import { stringify } from 'qs';
+import { request } from 'umi';
+export async function queryDevice(params = {}) {
+  params.DepId = localStorage.depId;
+  return request(
+    `/api/v1/device/list/${params.ProjectId}?${stringify(params)}`,
+  );
+}
+export async function queryDeviceList(ProjectId) {
+  return request(`/api/v1/device-pad/list/${ProjectId}`);
+}