@@ -1,36 +1,76 @@ | |||
import React, { useState, useEffect } from 'react'; | |||
import { Modal, Tree, Row, Col, List,Tag } from 'antd'; | |||
import { Modal, Tree, Row, Col, Checkbox } from 'antd'; | |||
import api from '../service'; | |||
import Enumerable from 'linq'; | |||
const MenuForm = (props) => { | |||
const [load, setLoad] = useState(); | |||
const [selectedRowsState, setSelectedRows] = useState(); | |||
const [load, setLoad] = useState([]); | |||
const [checkedKeys, setCheckedKeys] = useState(); | |||
const [indeterminate, setindeterminate] = useState(false); | |||
const [checkAll,setcheckAll] = useState(false); | |||
useEffect(async () => { | |||
var arr = []; | |||
var filteredArr=[] | |||
Enumerable.from(props.values).forEach(t => { | |||
if(!t.isParentMenu){ | |||
arr.push(t.id); | |||
} | |||
if(t.id !== null && typeof t.id !== "undefined"){ | |||
filteredArr.push(t); | |||
} | |||
}); | |||
setCheckedKeys(arr) | |||
console.log("props.values",props.datas) | |||
var parm={getType:'ALL',type:props.datas.type} | |||
var ret = await api.GetMenu(parm); | |||
var data = Enumerable.from(ret.data).toArray(); | |||
var data =props.treeData; | |||
if(getTreeLength(data)===filteredArr.length){ | |||
setcheckAll(true) | |||
setindeterminate(false); | |||
}else{ | |||
setcheckAll(false); | |||
if(props.values.length==0){ | |||
setindeterminate(false); | |||
}else{ | |||
setindeterminate(true); | |||
} | |||
} | |||
setLoad(data); | |||
}, [props.modalVisible]) | |||
const lbl = () => { | |||
var arr = []; | |||
Enumerable.from(props.values).forEach(t => { | |||
arr.push(<Tag style={{ width: 100, margin: 'Center' }} color="processing">{t.name}</Tag>); | |||
}); | |||
return arr; | |||
function getTreeLength(tree) { | |||
let length = tree.length; // 初始化计算器为根节点的子节点数量 | |||
for (let i = 0; i < tree.length; i++) { | |||
if (Array.isArray(tree[i].children)) { // 如果当前节点有子节点 | |||
length += getTreeLength(tree[i].children); // 将子节点的长度加到计算器上 | |||
} | |||
} | |||
return length; | |||
} | |||
const onCheckAllChange = (e) => { | |||
if(!checkAll){ | |||
var data=getAllIds(load,[]); | |||
setCheckedKeys(data) | |||
setcheckAll(true) | |||
setindeterminate(false); | |||
}else{ | |||
setCheckedKeys([]) | |||
setcheckAll(false) | |||
setindeterminate(false); | |||
} | |||
}; | |||
function getAllIds(tree, result) { | |||
console.log(tree) | |||
//遍历树 获取id数组 | |||
for (const i in tree) { | |||
result.push(tree[i].key); // 遍历项目满足条件后的操作 | |||
if (tree[i].children) { | |||
//存在子节点就递归 | |||
getAllIds(tree[i].children, result); | |||
} | |||
} | |||
return result; | |||
} | |||
var html = <Modal width={700} | |||
bodyStyle={{ padding: '32px 40px 48px' }} | |||
destroyOnClose | |||
@@ -41,9 +81,21 @@ const MenuForm = (props) => { | |||
maskClosable={false}> | |||
<Row> | |||
<Col span={8}> | |||
<Checkbox indeterminate={indeterminate} onChange={onCheckAllChange} checked={checkAll}> | |||
全选 | |||
</Checkbox> | |||
<Tree treeData={load} | |||
onCheck={(keys, e) => { setCheckedKeys(keys) }} | |||
defaultExpandAll={true} | |||
onCheck={(keys, e) => { | |||
if(getTreeLength(props.treeData)==keys.length){ | |||
setcheckAll(true) | |||
setindeterminate(false); | |||
}else{ | |||
setcheckAll(false) | |||
setindeterminate(true); | |||
} | |||
setCheckedKeys(keys) ; | |||
}} | |||
defaultExpandAll={false} | |||
checkedKeys={checkedKeys} | |||
checkable /> | |||
</Col> | |||
@@ -123,7 +123,7 @@ const companyManage = () => { | |||
var parm={getType:'ALL',type:0} | |||
api.GetMenu(parm).then((r) => { | |||
if(r.data){ | |||
setTreeData(r.data.data); | |||
setTreeData(r.data); | |||
} | |||
}); | |||
@@ -26,7 +26,7 @@ const CreateForm = (props) => { | |||
<Form.Item name="id" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item name="pid" label="上级名称" rules={[{ required: true }]}> | |||
<Form.Item name="pid" label="上级名称" rules={[{ required: false }]}> | |||
<TreeSelect | |||
allowClear | |||
showSearch | |||
@@ -1,5 +1,5 @@ | |||
import { PlusOutlined } from '@ant-design/icons'; | |||
import { Modal, Button, message } from 'antd'; | |||
import { Modal, Button, message,Popconfirm } from 'antd'; | |||
import React, { useState, useRef, useEffect } from 'react'; | |||
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; | |||
import ProTable from '@ant-design/pro-table'; | |||
@@ -192,7 +192,27 @@ const GoodsTypeManage = () => { | |||
> | |||
更新 | |||
</a>, | |||
<Popconfirm | |||
type="primary" | |||
key="primary" | |||
title="确认删除吗?" | |||
okText="是" | |||
cancelText="否" | |||
onConfirm={async () => { | |||
await DelDeviceInfo([record.id]).then((r) => { | |||
if(r.data){ | |||
message.success('删除成功,即将刷新'); | |||
actionRef.current.reload(); | |||
}else{ | |||
message.error('删除失败'); | |||
} | |||
}); | |||
}} | |||
onCancel={() => { }} | |||
> | |||
<a href="#">删除</a> | |||
</Popconfirm>, | |||
// <a | |||
// key="copy" | |||
// onClick={() => { | |||
@@ -326,15 +346,15 @@ const handleRemove = async (selectedRows) => { | |||
> | |||
<PlusOutlined /> 新建 | |||
</Button>, | |||
<Button | |||
onClick={async () => { | |||
await handleRemove(selectedRowsState); | |||
setSelectedRows([]); | |||
actionRef.current?.reloadAndRest?.(); | |||
}} | |||
> | |||
删除 | |||
</Button>, | |||
// <Button | |||
// onClick={async () => { | |||
// await handleRemove(selectedRowsState); | |||
// setSelectedRows([]); | |||
// actionRef.current?.reloadAndRest?.(); | |||
// }} | |||
// > | |||
// 删除 | |||
// </Button>, | |||
]} | |||
request={async (params) => { | |||
var data = []; | |||
@@ -6,7 +6,7 @@ import { PlusOutlined } from '@ant-design/icons'; | |||
import ProTable from '@ant-design/pro-table'; | |||
import CreateForm from './components/CreateForm'; | |||
import { GetDeviceVesionPage, AddDeviceVesion, DelDeviceVesion, UpdateDeviceVesion, GetProductList,UpdateStatus } from "./services" | |||
import { history } from 'umi'; | |||
const key = 'message'; | |||
//添加 | |||
@@ -140,6 +140,7 @@ const GoodsTypeManage = () => { | |||
title: '是否存在模板', | |||
dataIndex: 'templatePath', | |||
valueType: 'textarea', | |||
hideInSearch: true, | |||
render: (_, record) => [ | |||
<div> | |||
<Tag color="#f50" style={{ textAlign: "center", display: (record.templatePath == null||record.templatePath == "") ? "none" : "block" }} >存在模板</Tag> | |||
@@ -182,26 +183,37 @@ const GoodsTypeManage = () => { | |||
> | |||
<a href="#">删除</a> | |||
</Popconfirm>, | |||
<a | |||
key="config" | |||
onClick={() => { | |||
setCurrentRow(record); | |||
setIsModalOpen(true); | |||
setIsAddGoodsTemplate(false); | |||
}} > 上传设备工艺模型</a>, | |||
<a | |||
key="config" | |||
onClick={() => { | |||
setCurrentRow(record); | |||
setIsModalOpen(true); | |||
setIsAddGoodsTemplate(true); | |||
}} > 上传商品工艺模版</a>, | |||
<a | |||
key="config" | |||
href={record.templatePath} | |||
> 下载工艺模板</a> | |||
// <a | |||
// key="config" | |||
// onClick={() => { | |||
// setCurrentRow(record); | |||
// setIsModalOpen(true); | |||
// setIsAddGoodsTemplate(false); | |||
// }} > 上传设备工艺模型</a>, | |||
// <a | |||
// key="config" | |||
// onClick={() => { | |||
// setCurrentRow(record); | |||
// setIsModalOpen(true); | |||
// setIsAddGoodsTemplate(true); | |||
// }} > 上传商品工艺模版</a>, | |||
// <a | |||
// key="config" | |||
// href={record.templatePath} | |||
// > 下载工艺模板</a>, | |||
<a | |||
key="config" | |||
onClick={() => { | |||
history.push({ | |||
pathname: '/device/productmanage', | |||
query: { | |||
isAdd: false, | |||
values: record, | |||
tabStatus: 'basis' | |||
}, | |||
}); | |||
}} > 管理</a>, | |||
], | |||
}, | |||
]; | |||
@@ -6,7 +6,7 @@ import { PlusOutlined } from '@ant-design/icons'; | |||
import ProTable from '@ant-design/pro-table'; | |||
import CreateForm from './components/CreateForm'; | |||
import { GetProductPage, AddProduct, DelProduct, UpdateProduct,UpdateStatus } from "./services" | |||
import { history } from 'umi'; | |||
const key = 'message'; | |||
const { Paragraph, Text } = Typography; | |||
const GoodsTypeManage = () => { | |||
@@ -75,18 +75,7 @@ const GoodsTypeManage = () => { | |||
> | |||
<a href="#">删除</a> | |||
</Popconfirm>, | |||
<a | |||
key="config" | |||
onClick={() => { | |||
history.push({ | |||
pathname: '/device/productmanage', | |||
query: { | |||
isAdd: false, | |||
values: record, | |||
tabStatus: 'basis' | |||
}, | |||
}); | |||
}} > 管理</a>, | |||
], | |||
}, | |||
]; | |||
@@ -50,7 +50,7 @@ const CreateForm = (props) => { | |||
form.setFieldsValue({ | |||
id: props?.values?.id, | |||
type: props?.values?.type, | |||
deviceVersionKey: props?.values?.deviceVersionKey, | |||
//deviceVersionKey: props?.values?.deviceVersionKey, | |||
name: props?.values?.name, | |||
dataType: props?.values?.dataType, | |||
dataRange: props?.values?.dataRange, | |||
@@ -200,7 +200,7 @@ const onChangeboolLabel1=(e)=>{ | |||
<Form.Item name="id" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item label={'产品版本'} name="deviceVersionKey" rules={[{ required: true }]}> | |||
{/* <Form.Item label={'产品版本'} name="deviceVersionKey" rules={[{ required: true }]}> | |||
<Select> | |||
{props.DeviceVesionData.map((item, index) => { | |||
return ( | |||
@@ -210,7 +210,7 @@ const onChangeboolLabel1=(e)=>{ | |||
); | |||
})} | |||
</Select> | |||
</Form.Item> | |||
</Form.Item> */} | |||
<Form.Item name="type" label="功能类型"> | |||
<Radio.Group name="type" defaultValue={0} value={arttue} onChange={onchagetype} disabled={disabled}> | |||
<Radio.Button value={0}>属性</Radio.Button> | |||
@@ -16,7 +16,8 @@ import { | |||
getproducttopicspage, | |||
addproducttopics, | |||
updateproducttopics, | |||
deleteproducttopics | |||
deleteproducttopics, | |||
GetProduct | |||
} from './services'; | |||
import { history } from 'umi'; | |||
const { Paragraph, Text } = Typography; | |||
@@ -78,8 +79,9 @@ const bomtechnology = (props) => { | |||
const [selectedRowsState, setSelectedRows] = useState([]); | |||
const [dataSource,setdataSource]=useState([]); | |||
const [datafunctionSource,setdatafunctionSource]=useState([]); | |||
const [DeviceVesionData, setDeviceVesionData] = useState([]); | |||
const [DeviceVesionEnum, setDeviceVesionEnum] = useState({}); | |||
// const [DeviceVesionData, setDeviceVesionData] = useState([]); | |||
// const [DeviceVesionEnum, setDeviceVesionEnum] = useState({}); | |||
const [Product, setProduct] = useState({}); | |||
const [total,settotal]=useState(0); | |||
const [totalfun,settotalfun]=useState(0); | |||
/** 国际化配置 */ | |||
@@ -92,17 +94,21 @@ const bomtechnology = (props) => { | |||
SetCurrTabKey(tabStatus.tabActiveKey); | |||
if(!props.location.query.values.id){ | |||
history.push({ | |||
pathname: '/device/product', | |||
pathname: '/device/deviceVesion', | |||
}); | |||
}else{ | |||
GetDeviceVesion(props.location.query.values.id).then((res)=>{ | |||
let list = {}; | |||
res.data.forEach((item) => { | |||
list[item.id] = { text: item.vesion }; | |||
}); | |||
setDeviceVesionData(res.data) | |||
setDeviceVesionEnum(list) | |||
var params={productId:props.location.query.values.id,deviceTypeKey:props.location.query.values.id,current:1,pageSize:10} | |||
// GetDeviceVesion(props.location.query.values.id).then((res)=>{ | |||
// let list = {}; | |||
// res.data.forEach((item) => { | |||
// list[item.id] = { text: item.vesion }; | |||
// }); | |||
// setDeviceVesionData(res.data) | |||
// setDeviceVesionEnum(list) | |||
// }) | |||
GetProduct(props.location.query.values.productId).then((res)=>{ | |||
setProduct(res.data) | |||
var params={productId:props.location.query.values.productId,deviceTypeKey:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadfunData(params) | |||
LoadtopisData(params); | |||
}) | |||
@@ -195,14 +201,14 @@ const bomtechnology = (props) => { | |||
}, | |||
}, | |||
}, | |||
{ | |||
title: '版本', | |||
dataIndex: 'vesion', | |||
valueType: 'select', | |||
ellipsis: true, | |||
search: true, | |||
valueEnum:DeviceVesionEnum | |||
}, | |||
// { | |||
// title: '版本', | |||
// dataIndex: 'vesion', | |||
// valueType: 'select', | |||
// ellipsis: true, | |||
// search: true, | |||
// valueEnum:DeviceVesionEnum | |||
// }, | |||
{ | |||
title: '创建时间', | |||
dataIndex: 'createAt', | |||
@@ -293,7 +299,7 @@ const bomtechnology = (props) => { | |||
await deleteproducttopics([record.id]).then((r) => { | |||
message.success('删除成功,即将刷新'); | |||
var params={productId:props.location.query.values.id,current:1,pageSize:10} | |||
var params={productId:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadtopisData(params) | |||
}); | |||
}} | |||
@@ -312,7 +318,7 @@ const bomtechnology = (props) => { | |||
}, | |||
{ | |||
key: 'topis', | |||
tab: 'topis类列表', | |||
tab: 'topics类列表', | |||
}, | |||
]; | |||
@@ -341,7 +347,7 @@ const handleAdd = async (fields) => { | |||
await addgoodstechnology(JSON.stringify(fields)).then((r) => { | |||
if (r.data) { | |||
message.success('添加成功'); | |||
var params={productId:props.location.query.values.id,deviceTypeKey:props.location.query.values.id,current:1,pageSize:10} | |||
var params={productId:props.location.query.values.productId,deviceTypeKey:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadfunData(params) | |||
handleModalVisible(false); | |||
if (actionRef.current) { | |||
@@ -366,7 +372,7 @@ const handleRemove = async (ids) => { | |||
deletegoodstechnology(ids).then((r) => { | |||
if (r.data) { | |||
message.success('删除成功'); | |||
var params={productId:props.location.query.values.id,deviceTypeKey:props.location.query.values.id,current:1,pageSize:10} | |||
var params={productId:props.location.query.values.productId,deviceTypeKey:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadfunData(params) | |||
} else { | |||
message.error(r.errors); | |||
@@ -392,7 +398,7 @@ const handleRemove = async (ids) => { | |||
updategoodstechnology(fields).then((r) => { | |||
if (r.data) { | |||
message.success('修改成功'); | |||
var params={productId:props.location.query.values.id,deviceTypeKey:props.location.query.values.id,current:1,pageSize:10} | |||
var params={productId:props.location.query.values.productId,deviceTypeKey:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadfunData(params) | |||
handleModalVisible(false); | |||
if (actionRef.current) { | |||
@@ -472,7 +478,7 @@ const handleRemove = async (ids) => { | |||
request={async (params) => { | |||
var data = []; | |||
var total = 0; | |||
params.deviceTypeKey=props.location.query.values.id | |||
params.deviceTypeKey=props.location.query.values.productId | |||
await getGoodstechnologypage(params).then((r) => { | |||
data = r.data.data; | |||
@@ -496,7 +502,8 @@ const handleRemove = async (ids) => { | |||
onFinish={async (value) => { | |||
console.log("jnlaile ") | |||
console.log(value) | |||
value.productId=props.location.query.values.id | |||
value.productId=props.location.query.values.productId | |||
value.deviceVersionKey=props.location.query.values.id; | |||
var success = false; | |||
if (value.id) { | |||
await handleUpdate(value); | |||
@@ -510,7 +517,7 @@ const handleRemove = async (ids) => { | |||
}} | |||
createModalVisible={createModalVisible} | |||
values={currentRow || {}} | |||
DeviceVesionData={DeviceVesionData} | |||
// DeviceVesionData={DeviceVesionData} | |||
/> | |||
<ActionForm actionFormModalVisible={actionFormModalVisible} | |||
values={currentRow || {} } | |||
@@ -552,16 +559,16 @@ const handleRemove = async (ids) => { | |||
}, | |||
}} | |||
></ProTable> | |||
<CreateTopis createModalVisible={createTopisModalVisible} productCode={props.location.query.values.key} | |||
<CreateTopis createModalVisible={createTopisModalVisible} productCode={Product.key} | |||
values={currenttopsRow || {}} | |||
onFinish={async (value) => { | |||
value.productId=props.location.query.values.id | |||
value.productId=props.location.query.values.productId | |||
if (value.id) { | |||
await updateproducttopics(value).then((r)=>{ | |||
if (r.data) { | |||
message.success('修改成功'); | |||
setcreateTopisModalVisible(false) | |||
var params={productId:props.location.query.values.id,current:1,pageSize:10} | |||
var params={productId:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadtopisData(params) | |||
} else { | |||
message.error(r.errors); | |||
@@ -571,7 +578,7 @@ const handleRemove = async (ids) => { | |||
await addproducttopics(value).then((r)=>{ | |||
if (r.data) { | |||
message.success('添加成功'); | |||
var params={productId:props.location.query.values.id,current:1,pageSize:10} | |||
var params={productId:props.location.query.values.productId,current:1,pageSize:10} | |||
LoadtopisData(params) | |||
setcreateTopisModalVisible(false) | |||
} else { | |||
@@ -597,13 +604,14 @@ const handleRemove = async (ids) => { | |||
title: [<a key="back" | |||
onClick={() => { | |||
history.push({ | |||
pathname: '/device/product', | |||
pathname: '/device/deviceVesion', | |||
}); | |||
}}><ArrowLeftOutlined />返回</a>, | |||
<div style={{backgroundColor:'#f3eaea',width:'1640px',height: '54px'}}> | |||
<div style={{fontSize: '14px',color: 'cornflowerblue'}}> | |||
<span style={{marginRight:20,marginLeft:10,marginTop:10,float:'left' }}>产品名称:<span style={{marginLeft:10}}>{props.location.query.values.name}</span></span> | |||
<span style={{marginRight:120,marginLeft:10,marginTop:10,float:'right'}}>产品key: <Paragraph style={{display:'inline'}} copyable>{props.location.query.values.key}</Paragraph></span></div> | |||
<span style={{marginRight:20,marginLeft:10,marginTop:10,float:'left' }}>产品版本:<span style={{marginLeft:10}}>{props.location.query.values?.vesion}</span></span> | |||
<span style={{marginRight:20,marginLeft:10,marginTop:10,float:'left' }}>产品名称:<span style={{marginLeft:10}}>{Product?.name}</span></span> | |||
<span style={{marginRight:120,marginLeft:10,marginTop:10,float:'right'}}>产品key: <Paragraph style={{display:'inline'}} copyable>{Product?.key}</Paragraph></span></div> | |||
</div> | |||
], | |||
breadcrumb: {}, | |||
@@ -77,4 +77,9 @@ export async function addgoodstechnology(data) { | |||
return request(getDataBaseUrl()+`/api/devicevesion/getdevicevesion?productId=${TypeCode}`, { | |||
method: 'Get', | |||
}); | |||
} | |||
export async function GetProduct(productId) { | |||
return request(getDataBaseUrl()+`/api/product/getproduct?productId=${productId}`, { | |||
method: 'Get', | |||
}); | |||
} |
@@ -41,7 +41,7 @@ const CreateForm = (props) => { | |||
<Form.Item name="id" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item name="pid" label="上级名称" rules={[{ required: true }]}> | |||
<Form.Item name="pid" label="上级名称" rules={[{ required: false }]}> | |||
<TreeSelect | |||
style={{ width: '100%' }} | |||
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }} | |||
@@ -1,31 +1,79 @@ | |||
import React, { useState, useEffect } from 'react'; | |||
import { Modal, Tree, Row, Col, List,Tag } from 'antd'; | |||
import api from './service'; | |||
import { Modal, Tree, Row, Col, Checkbox } from 'antd'; | |||
import Enumerable from 'linq'; | |||
const MenuForm = (props) => { | |||
const [load, setLoad] = useState(); | |||
const [selectedRowsState, setSelectedRows] = useState(); | |||
const [checkedKeys, setCheckedKeys] = useState(); | |||
const [indeterminate, setindeterminate] = useState(false); | |||
const [checkAll,setcheckAll] = useState(false); | |||
useEffect(async () => { | |||
var arr = []; | |||
var filteredArr=[] | |||
Enumerable.from(props.values).forEach(t => { | |||
arr.push(t.id); | |||
if(!t.isParentMenu){ | |||
arr.push(t.id); | |||
} | |||
if(t.id !== null && typeof t.id !== "undefined"){ | |||
filteredArr.push(t); | |||
} | |||
}); | |||
setCheckedKeys(arr) | |||
var ret = await api.SelectTree(); | |||
var data = Enumerable.from(ret.data).toArray(); | |||
var data =props.treeData; | |||
console.log("props.values",props.values) | |||
console.log("data",data) | |||
console.log("filteredArr",filteredArr) | |||
if(getTreeLength(data)===filteredArr.length){ | |||
setcheckAll(true) | |||
setindeterminate(false); | |||
}else{ | |||
setcheckAll(false); | |||
if(props.values.length==0){ | |||
setindeterminate(false); | |||
}else{ | |||
setindeterminate(true); | |||
} | |||
} | |||
setLoad(data); | |||
}, [props.modalVisible]) | |||
function getTreeLength(tree) { | |||
let length = tree.length; // 初始化计算器为根节点的子节点数量 | |||
for (let i = 0; i < tree.length; i++) { | |||
if (Array.isArray(tree[i].children)) { // 如果当前节点有子节点 | |||
length += getTreeLength(tree[i].children); // 将子节点的长度加到计算器上 | |||
} | |||
} | |||
return length; | |||
} | |||
const onCheckAllChange = (e) => { | |||
if(!checkAll){ | |||
var data=getAllIds(load,[]); | |||
setCheckedKeys(data) | |||
setcheckAll(true) | |||
setindeterminate(false); | |||
}else{ | |||
setCheckedKeys([]) | |||
setcheckAll(false) | |||
setindeterminate(false); | |||
} | |||
}; | |||
const lbl = () => { | |||
var arr = []; | |||
Enumerable.from(props.values).forEach(t => { | |||
arr.push(<Tag style={{ width: 68, margin: 'Center' }} color="processing">{t.name}</Tag>); | |||
}); | |||
return arr; | |||
function getAllIds(tree, result) { | |||
console.log(tree) | |||
//遍历树 获取id数组 | |||
for (const i in tree) { | |||
result.push(tree[i].key); // 遍历项目满足条件后的操作 | |||
if (tree[i].children) { | |||
//存在子节点就递归 | |||
getAllIds(tree[i].children, result); | |||
} | |||
} | |||
return result; | |||
} | |||
var html = <Modal width={700} | |||
bodyStyle={{ padding: '32px 40px 48px' }} | |||
destroyOnClose | |||
@@ -38,9 +86,21 @@ const MenuForm = (props) => { | |||
maskClosable={false}> | |||
<Row> | |||
<Col span={12}> | |||
<Checkbox indeterminate={indeterminate} onChange={onCheckAllChange} checked={checkAll}> | |||
全选 | |||
</Checkbox> | |||
<Tree treeData={load} | |||
onCheck={(keys, e) => { setCheckedKeys(keys) }} | |||
defaultExpandAll={true} | |||
onCheck={(keys, e) => { | |||
if(getTreeLength(props.treeData)==keys.length){ | |||
setcheckAll(true) | |||
setindeterminate(false); | |||
}else{ | |||
setcheckAll(false) | |||
setindeterminate(true); | |||
} | |||
setCheckedKeys(keys) ; | |||
}} | |||
defaultExpandAll={false} | |||
checkedKeys={checkedKeys} | |||
checkable /> | |||
</Col> | |||
@@ -5,7 +5,7 @@ import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; | |||
import ProTable, { ProColumns, ActionType, TableDropdown } from '@ant-design/pro-table'; | |||
import Enumerable from 'linq' | |||
import CreateForm from './components/CreateForm'; | |||
import { Page, add, edit, removeRole, setMenu, setUserGrantData, Enable, Disable, GetRoleMenu, SetDataRole } from './service'; | |||
import { Page, add, edit, removeRole, setMenu, GetMenu, GetRoleMenu, SetDataRole } from './service'; | |||
import { useAccess } from 'umi'; | |||
import MenuForm from './components/MenuForm'; | |||
import OrgForm from './components/OrgForm'; | |||
@@ -105,7 +105,7 @@ const roleManager = () => { | |||
const [row, setRow] = useState(); | |||
const [selectedRowsState, setSelectedRows] = useState(); | |||
const [selectData, setSelectData] = useState([]); | |||
const [treeData, setTreeData] = useState(); | |||
/** | |||
* 删除节点 | |||
* @param selectedRows | |||
@@ -190,6 +190,15 @@ const roleManager = () => { | |||
return arr; | |||
} | |||
useEffect(() => { | |||
var parm={getType:'ALL',type:0} | |||
GetMenu(parm).then((r) => { | |||
if(r.data){ | |||
setTreeData(r.data); | |||
} | |||
}); | |||
}, []); | |||
const columns = [ | |||
{ | |||
@@ -342,6 +351,7 @@ const roleManager = () => { | |||
}} | |||
modalVisible={updateMenuModalVisible} | |||
values={row || {}} | |||
treeData={treeData} | |||
/> | |||
) : null} | |||
@@ -64,3 +64,10 @@ export async function SetDataRole(params) { | |||
data:params | |||
}); | |||
} | |||
/** 查询功能菜单*/ | |||
export async function GetMenu(params) { | |||
return request(getDataBaseUrl()+`/api/menu/menuparmytrees?getType=${params.getType}&&type=${params.type}`, | |||
{ | |||
method: 'Get', | |||
}); | |||
} |
@@ -34,7 +34,7 @@ const CreateForm = (props) => { | |||
<Form.Item name="code" label="字典编码" rules={[{ required: true, max: 64 }]}> | |||
<Input placeholder="请输入字典编码" /> | |||
</Form.Item> | |||
<Form.Item | |||
{/* <Form.Item | |||
name="typeId" | |||
label="字典类型" | |||
rules={[{ required: true, message: '请选择字典类型' }]} | |||
@@ -48,7 +48,7 @@ const CreateForm = (props) => { | |||
); | |||
})} | |||
</Select> | |||
</Form.Item> | |||
</Form.Item> */} | |||
{/* <Form.Item | |||
name="status" | |||
label="状态" | |||
@@ -133,20 +133,20 @@ const DictDataManage = (props) => { | |||
dataIndex: 'code', | |||
ellipsis:true | |||
}, | |||
{ | |||
title: '字典类型', | |||
dataIndex: 'typeName', | |||
hideInForm: true, | |||
hideInSearch: true, | |||
}, | |||
{ | |||
title: '字典类型', | |||
dataIndex: 'typeId', | |||
hideInForm: true, | |||
hideInTable: true, | |||
hideInSearch: true, | |||
valueEnum: typeNames, | |||
}, | |||
// { | |||
// title: '字典类型', | |||
// dataIndex: 'typeName', | |||
// hideInForm: true, | |||
// hideInSearch: true, | |||
// }, | |||
// { | |||
// title: '字典类型', | |||
// dataIndex: 'typeId', | |||
// hideInForm: true, | |||
// hideInTable: true, | |||
// hideInSearch: true, | |||
// valueEnum: typeNames, | |||
// }, | |||
{ | |||
title: '备注', | |||
dataIndex: 'remark', | |||
@@ -279,7 +279,7 @@ const DictDataManage = (props) => { | |||
<CreateForm | |||
typeNameData={typeNames} | |||
onFinish={async (value) => { | |||
value.typeId=props.currentRow.id; | |||
var success = false; | |||
if (value.id) { | |||
success = await handleUpdate(value); | |||
@@ -179,7 +179,6 @@ const handleUpdate = async (fields) => { | |||
{ | |||
title: '创建时间', | |||
dataIndex: 'createAt', | |||
sorter: true, | |||
hideInSearch: true, | |||
}, | |||
{ | |||