From 984768ad78a2290a78e0a40ac7e98101eb011263 Mon Sep 17 00:00:00 2001 From: wang_yp <357754663@qq.com> Date: Fri, 8 Aug 2025 15:26:52 +0800 Subject: [PATCH] fix(icc add hls) --- package.json | 1 + src/components/form/interface.ts | 1 + src/components/form/tree_select.tsx | 2 +- src/components/layout/layout_config.tsx | 8 +- src/pages/company/config.tsx | 5 - src/pages/dashbord/index.tsx | 60 +---- src/pages/dep/config.tsx | 45 ++-- src/pages/dep/index.tsx | 1 + src/pages/my/used.tsx | 50 +++- src/pages/role/index.tsx | 2 +- src/pages/role/role_config.tsx | 13 +- src/pages/source/source.tsx | 6 +- src/pages/source/upload.tsx | 2 +- src/pages/user/user_config.tsx | 6 +- src/pages/work/index.less | 0 src/pages/work/index.tsx | 292 ++++++++++++++++++++++++ src/router/index.tsx | 6 + src/util/config.ts | 2 +- 18 files changed, 393 insertions(+), 109 deletions(-) create mode 100644 src/pages/work/index.less create mode 100644 src/pages/work/index.tsx diff --git a/package.json b/package.json index 9056853..88f8b7d 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "webpack-manifest-plugin": "^4.0.2", "workbox-webpack-plugin": "^6.4.1" }, + "proxy":"http://127.0.0.1:12216/v1", "scripts": { "start": "node scripts/start.js", "build": "node scripts/build.js", diff --git a/src/components/form/interface.ts b/src/components/form/interface.ts index 96b3517..3a068a1 100644 --- a/src/components/form/interface.ts +++ b/src/components/form/interface.ts @@ -32,6 +32,7 @@ export interface FormDatas { radioData?: Array, rules: Array, model: "multiple" | "tags" | undefined + treeMultiple?: boolean } export interface SimpleFormData { diff --git a/src/components/form/tree_select.tsx b/src/components/form/tree_select.tsx index 5bdfae2..f398416 100644 --- a/src/components/form/tree_select.tsx +++ b/src/components/form/tree_select.tsx @@ -28,7 +28,7 @@ export const FormTreeSelect = (v: FormDatas) => { value: "identity", children: "children" }} - multiple + multiple={v.treeMultiple} showSearch style={{ width: '100%' }} placeholder="请选择" diff --git a/src/components/layout/layout_config.tsx b/src/components/layout/layout_config.tsx index 75d791e..d767d1a 100644 --- a/src/components/layout/layout_config.tsx +++ b/src/components/layout/layout_config.tsx @@ -1,10 +1,16 @@ -import { HomeOutlined, UserSwitchOutlined, DatabaseOutlined, PaperClipOutlined, SettingOutlined } from '@ant-design/icons'; +import { HomeOutlined, UserSwitchOutlined, DatabaseOutlined, PaperClipOutlined, SettingOutlined, WechatWorkOutlined } from '@ant-design/icons'; export const items = [ { key: "/", label: `首页看板`, icon: + }, + { + key: "/work", + label: `工作区`, + icon: , + children: [{ key: "/work/list", label: `工作区` }], }, { key: "/user", diff --git a/src/pages/company/config.tsx b/src/pages/company/config.tsx index 4b2cc81..4915781 100644 --- a/src/pages/company/config.tsx +++ b/src/pages/company/config.tsx @@ -76,9 +76,4 @@ export const columns: ColumnsType = [ width: 150, dataIndex: "email", }, - { - title: "上级单位名称", - width: 150, - dataIndex: "email", - }, ]; diff --git a/src/pages/dashbord/index.tsx b/src/pages/dashbord/index.tsx index 986c72c..c1b8a0f 100644 --- a/src/pages/dashbord/index.tsx +++ b/src/pages/dashbord/index.tsx @@ -1,15 +1,8 @@ /* eslint-disable react-hooks/exhaustive-deps */ -import { Checkbox, Modal, Space } from "antd"; -import { Store } from "antd/lib/form/interface"; +import { Space } from "antd"; import "./index.less"; import ReactECharts from 'echarts-for-react'; -import { inject, observer } from "mobx-react"; -import { useEffect, useState } from "react"; -const Dashbord = (props: Store) => { - const { usrStore } = props; - const [isModalOpen, setIsModalOpen] = useState(false) - const [plainOptions, setOption] = useState(); - const [check, setCheck] = useState([]) +const Dashbord = () => { const options = { grid: { top: 8, right: 8, bottom: 24, left: 36 }, xAxis: { @@ -30,59 +23,12 @@ const Dashbord = (props: Store) => { trigger: 'axis', }, }; - useEffect(() => { - getColumn() - getHead() - }, []) - - const getHead = async () => { - const res = await usrStore.getHead() - if (res.length > 0) { - res.forEach((element) => { - element.label = element.data_name; - element.value = element.identity; - element.editable = true; - }); - setOption(res) - } - } - - const getColumn = async () => { - const res = await usrStore.getUsed() - if (res.length === 0) { - console.log(res) - setIsModalOpen(true) - } - } - - const onChange = (checkedValues) => { - setCheck(checkedValues) - }; - - const handleOk = async () => { - const res = await usrStore.setUsed({ identitys: check }) - console.log(res) - } return (
- { - setIsModalOpen(false); - }} - > - -
); }; -export default inject("usrStore")(observer(Dashbord)); +export default Dashbord; diff --git a/src/pages/dep/config.tsx b/src/pages/dep/config.tsx index df60ae1..bc09f92 100644 --- a/src/pages/dep/config.tsx +++ b/src/pages/dep/config.tsx @@ -1,56 +1,47 @@ import { FormType } from "@/components/form/interface"; import { UserDataType } from "@/model/userModel"; -import { CompanyConfig, DepConfig } from "@/service/user_config"; +import { CompanyConfig } from "@/service/user_config"; import { ColumnsType } from "antd/lib/table"; export const defaultConfig = [ { type: FormType.input, - label: "部门名称", + label: "科室名称", name: "dep_name", value: "", - rules: [{ required: true, message: "请输入部门名称!" }], + rules: [{ required: true, message: "请输入科室名称!" }], }, { type: FormType.input, - label: "部门描述", + label: "科室描述", name: "desc", value: "", - rules: [{ required: true, message: "请输入部门描述" }], + rules: [], }, { type: FormType.input, label: "负责人", name: "head", value: "", - rules: [{ required: true, message: "请输入负责人" }], + rules: [], }, { type: FormType.input, - label: "部门电话", + label: "科室电话", name: "phone", value: "", - rules: [{ required: true, message: "请输入部门电话" }], + rules: [], }, { type: FormType.input, - label: "部门邮箱", + label: "科室邮箱", name: "email", value: "", - rules: [{ required: true, message: "请输入部门邮箱" }], - }, - { - type: FormType.select, - label: "上级部门", - name: "p_id", - value: 0, - selectUrl: DepConfig.LIST, - keys: "dep_name", rules: [], }, { type: FormType.treeSelect, label: "所属单位", - name: "company_id", + name: "company_identity", value: 0, selectUrl: CompanyConfig.LIST, keys: "name", @@ -60,14 +51,15 @@ export const defaultConfig = [ export const columns: ColumnsType = [ { - title: "部门名称", + title: "科室名称", dataIndex: "dep_name", width: 200, fixed: "left", }, { - title: "部门描述", - dataIndex: "dep_desc", + title: "科室描述", + dataIndex: "desc", + width: 200, }, { @@ -75,17 +67,12 @@ export const columns: ColumnsType = [ dataIndex: "head", }, { - title: "部门电话", + title: "科室电话", width: 150, dataIndex: "phone", }, { - title: "部门邮箱", - width: 150, - dataIndex: "email", - }, - { - title: "上级部门名称", + title: "科室邮箱", width: 150, dataIndex: "email", }, diff --git a/src/pages/dep/index.tsx b/src/pages/dep/index.tsx index 4e18413..0b79404 100644 --- a/src/pages/dep/index.tsx +++ b/src/pages/dep/index.tsx @@ -15,6 +15,7 @@ const Dep = (props: Store) => { return (
{ - return

常用

+import { Button, Checkbox, message, Space } from "antd"; +import { Store } from "antd/es/form/interface"; +import { inject, observer } from "mobx-react"; +import { useEffect, useState } from "react"; + +const Used = (props: Store) => { + const { sourceStore, usrStore } = props; + const [coloums, setColumns] = useState([]); + const [selectKey, setSelectKey] = useState>([]); + useEffect(() => { + sourceStore.getHead().then((res) => { + res.forEach((element) => { + element.dataIndex = element.identity; + element.title = element.data_name; + element.label = element.data_name; + element.value = element.identity; + element.editable = true; + }); + setColumns(res); + }); + getColumn() + }, []) + + const getColumn = async () => { + const res = await usrStore.getUsed() + const list: any = res?.map((element) => element.column_identity) + setSelectKey(list) + } + const save = async () => { + await usrStore.setUsed({ identitys: selectKey }) + getColumn() + message.success("保存成功") + }; + return <> + + { + setSelectKey(v); + }} + /> + + + } -export default Used; \ No newline at end of file +export default inject("sourceStore", "usrStore")(observer(Used)); \ No newline at end of file diff --git a/src/pages/role/index.tsx b/src/pages/role/index.tsx index a360253..83041e9 100644 --- a/src/pages/role/index.tsx +++ b/src/pages/role/index.tsx @@ -15,7 +15,7 @@ const Role = (props: Store) => { return (
= [ { - title: "职位名称", + title: "角色名称", dataIndex: "name", fixed: "left", }, { - title: "职位描述", + title: "角色描述", dataIndex: "desc", }, diff --git a/src/pages/source/source.tsx b/src/pages/source/source.tsx index 3e027a0..ac06062 100644 --- a/src/pages/source/source.tsx +++ b/src/pages/source/source.tsx @@ -68,7 +68,7 @@ const Source = (props: Store) => { if (index > -1) { const item = newData[index]; setLoading(true); - let res = await sourceStore.modefyData(row, item.id_card); + let res = await sourceStore.modefyData(row, item.idcard_identity); if (res) { getContent(selectKey, 1); } @@ -83,7 +83,7 @@ const Source = (props: Store) => { setLoading(true); sourceStore.geContent(list, index, 20).then((res) => { res.forEach((element) => { - element.key = element.identity; + element.key = JSON.stringify(element); }); setContent(res); setLoading(false); @@ -103,7 +103,7 @@ const Source = (props: Store) => { for (let i = 0; i < rowKeys.length; i++) { let obj = {}; for (const key in rowKeys[i]) { - if (key.indexOf("dbs") > -1) { + if (key !== "idcard_identity" && key !== "key") { obj[key] = rowKeys[i][key]; } } diff --git a/src/pages/source/upload.tsx b/src/pages/source/upload.tsx index 4ea3d50..1d8cab0 100644 --- a/src/pages/source/upload.tsx +++ b/src/pages/source/upload.tsx @@ -3,7 +3,7 @@ import { Button, message, Upload, UploadProps } from "antd"; const Uploads = () => { const props: UploadProps = { name: "file", - action: `http://127.0.0.1:12216/v1/public/fts/uploadFore`, + action: `http://127.0.0.1:12216/v1/public/fts/upload`, headers: { authorization: window.localStorage.getItem("token")??'' }, diff --git a/src/pages/user/user_config.tsx b/src/pages/user/user_config.tsx index 05f3602..7476753 100644 --- a/src/pages/user/user_config.tsx +++ b/src/pages/user/user_config.tsx @@ -31,6 +31,7 @@ export const defaultConfig = [ label: "联系电话", name: "tel", value: "", + rule:[{ required: true, message: "联系电话不能为空" }] }, { type: FormType.input, @@ -45,7 +46,7 @@ export const defaultConfig = [ selectUrl: DepConfig.LIST, keys: "dep_name", value: "", - rules: [{ required: true, message: "所属部门不能为空" }], + rules: [], }, { type: FormType.treeSelect, @@ -125,5 +126,8 @@ export const columns: ColumnsType = [ { title: "角色", dataIndex: "", + render: (render) => ( + {render.role[0]?.name} + ), } ]; diff --git a/src/pages/work/index.less b/src/pages/work/index.less new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/work/index.tsx b/src/pages/work/index.tsx new file mode 100644 index 0000000..fe07bf7 --- /dev/null +++ b/src/pages/work/index.tsx @@ -0,0 +1,292 @@ +import { useEffect, useState } from "react"; +import { + Button, + Checkbox, + Drawer, + Form, + FormInstance, + Input, + message, + Modal, + PaginationProps, + Popconfirm, + Space, + Table, + Typography, + Upload, +} from "antd"; +import { Store } from "antd/lib/form/interface"; +import { inject, observer } from "mobx-react"; +import { DataType } from "@/util/model/interface"; +import toExcel from "@/util/xmsx"; +import React from "react"; +import Things from "../source/things"; +import Share from "../source/share"; + +const Work = (props: Store) => { + const { sourceStore, usrStore } = props; + const formRef = React.useRef(null); + const [form] = Form.useForm(); + const [coloums, setColumns] = useState([]); + const [record, setRecord] = useState(null); + const [content, setContent] = useState([]); + const [selectKey, setSelectKey] = useState>([]); + const [page, setPage] = useState(1); + const [editingKey, setEditingKey] = useState(""); + const [loading, setLoading] = useState(false); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [rowKeys, setRowKeys] = useState([]); + const isEditing = (record) => record.key === editingKey; + const [open, setOpen] = useState(false); + const [shareOpen, setShareOpen] = useState(false); + + const edit = (record: any) => { + form.setFieldsValue({ ...record }); + setEditingKey(record.key); + }; + // 获取列表数据 + useEffect(() => { + usrStore.getUsed().then((res) => { + res.forEach((element) => { + element.dataIndex = element.column_identity; + element.title = element.head.data_name; + element.label = element.head.data_name; + element.value = element.column_identity; + element.editable = true; + }); + setColumns(res); + }) + getContent([], 1); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [sourceStore]); + const save = async (key: React.Key) => { + try { + const row = (await form.validateFields()) as DataType; + const newData: any = [...content]; + const index = newData.findIndex((item: any) => key === item.key); + if (index > -1) { + const item = newData[index]; + setLoading(true); + let res = await sourceStore.modefyData(row, item.idcard_identity); + if (res) { + getContent(selectKey, 1); + } + setLoading(false); + setEditingKey(""); + } + } catch (errInfo) { + console.log("Validate Failed:", errInfo); + } + }; + const getContent = (list, index) => { + setLoading(true); + sourceStore.geContent(list, index, 20).then((res) => { + res.forEach((element) => { + element.key = JSON.stringify(element); + }); + setContent(res); + setLoading(false); + }); + }; + const getHead = () => { + let head = coloums.filter((value) => selectKey.includes(value.identity)); + return head; + }; + + const saveClo = () => { + let list: any = []; + if (rowKeys.length === 0) { + message.info("请选择需要导出的列"); + return; + } + for (let i = 0; i < rowKeys.length; i++) { + let obj = {}; + for (const key in rowKeys[i]) { + if (key !== "idcard_identity" && key !== "key") { + obj[key] = rowKeys[i][key]; + } + } + list.push(obj); + } + toExcel(getHead(), list, "test.xlsx", "Sheet1"); + }; + const cancel = () => { + setEditingKey(""); + }; + interface EditableCellProps extends React.HTMLAttributes { + editing: boolean; + dataIndex: string; + fixed: string; + index: number; + } + const actionCloumn = { + title: "操作", + with: 200, + fixed: "right", + render: (_: any, record) => { + const editable = isEditing(record); + return editable ? ( + + { + save(record.key); + }} + style={{ marginInlineEnd: 8 }} + > + 保存 + + + 取消 + + + ) : ( + + edit(record)} + > + 编辑 + + { + setRecord(record) + setOpen(true) + }}> + 查看事件 + + { + setRecord(record) + setShareOpen(true) + } + }> + 分享 + + + ); + }, + }; + + const EditableCell: React.FC> = ({ + editing, + dataIndex, + children, + ...restProps + }) => { + const inputNode = ; + + return ( + + {editing ? ( + + {inputNode} + + ) : ( + children + )} + + ); + }; + + const mergedColumns = coloums.map((col) => { + if (!col.editable) { + return col; + } + return { + ...col, + onCell: (record: DataType) => ({ + record, + dataIndex: col.dataIndex, + title: col.title, + editing: isEditing(record), + }), + }; + }); + + const onChange: PaginationProps["onChange"] = (page) => { + setPage(page); + getContent(selectKey, page); + cancel(); + }; + const rowSelection = { + selectedRowKeys, + preserveSelectedRowKeys: true, + fixed: true, + onChange: (keys, rowKeys, info) => { + setSelectedRowKeys(keys); + setRowKeys(rowKeys); + }, + }; + return ( +
+ + + + { + setSelectKey(v); + getContent(v, 1); + }} + /> + + + +
+ + + + + setOpen(false)} + > + + + { + formRef.current?.submit() + }} + onCancel={() => { setShareOpen(false) }} + > + { + const data = { + ...v, + user_identity: record.idcard_identity + } + const res = await sourceStore.share(data) + if (res.code === 200) { + message.success("分享成功") + } + }} /> + + + ); +}; + +export default inject("sourceStore", "usrStore")(observer(Work)); diff --git a/src/router/index.tsx b/src/router/index.tsx index 75d2962..b327e0c 100644 --- a/src/router/index.tsx +++ b/src/router/index.tsx @@ -11,6 +11,7 @@ import Dep from "@/pages/dep"; import Company from "@/pages/company"; import Event from "@/pages/event"; import { My } from "@/pages/my"; +import Work from "@/pages/work"; const routers = createHashRouter([ { @@ -27,6 +28,11 @@ const routers = createHashRouter([ index: true, element: , }, + { + path: "/work/list", + index: true, + element: , + }, { path: "/source/list", index: true, diff --git a/src/util/config.ts b/src/util/config.ts index 371512c..526a6bf 100644 --- a/src/util/config.ts +++ b/src/util/config.ts @@ -1,4 +1,4 @@ class Config { - static baseUrl = "https://hj.quwanya.cn/v1" + static baseUrl = "" } export default Config;