Commit 6d380451 authored by wuhao's avatar wuhao 🎯

sad

parent 942abea9
......@@ -11,7 +11,7 @@ export default {
// localhost:8000/api/** -> https://preview.pro.ant.design/api/**
"/wms/": {
// 要代理的地址
target: "http://192.168.40.15:18040/", //39:18040 23/wms/ //60 翔
target: "http://192.168.40.134:18040/", //39:18040 23/wms/ //60 翔
changeOrigin: true,
pathRewrite: {
"^/wms": "",
......
......@@ -155,6 +155,11 @@ export default [
name: "标签模板",
component: "./platform/Labeltemplate",
},
{
path: '/platform/provide',
name: '供应商管理',
component: './platform/Provide',
},
{
component: "./404",
},
......
import React, { useState } from 'react';
import { Button, Popconfirm } from 'antd';
const Deletecheck = props => {
const { name, type, text, clickfn, pop,btnType } = props;
//点击删除按钮,若需要调取接口进行校验,需要传btnType,且值为deleteCheck
const [title, ct] = useState(btnType == "deleteCheck" ? "" : pop?.title),
[visible, cv] = useState(false);
let { buttonPerm } = { buttonPerm: [] };//单独运行
let res = buttonPerm && buttonPerm.length > 0 ? buttonPerm.filter((it) => { return it.typeName == name }) : [];
if (res.length == 1) {
res = res[0]
} else {
res = {}
}
let ifs = name === false ? false : true;
if (type == "ifs") {
return ifs
}
return pop ? <Popconfirm
disabled={!ifs}
okText="确认"
cancelText="取消"
placement="bottomRight"
title={title}
onConfirm={() => {
if (!ifs) {
return
}
pop.onConfirm();
cv(false);
}}
visible={visible}
onCancel={() => {
cv(false)
}}
>
<Button
size='small'
type={type?.type || 'default'}
disabled={!ifs}
danger
style={{ userSelect: "none" }}
onClick={() => {
if (btnType == "deleteCheck") {
clickfn().then(res => {
if (res.code == "0000") {
ct(res?.data?.msg)
cv(true)
}
})
} else {
clickfn ? clickfn() : null;
cv(true)
}
}}
>
{text}
</Button>
</Popconfirm>
:
<Button
size='small'
type={type?.type || 'primary'}
disabled={!ifs}
style={{ userSelect: "none" }}
onClick={() => {
clickfn ? clickfn() : null
}}
>
{text}
</Button>
}
export default Deletecheck;
\ No newline at end of file
export default {
"supplierNo": {
"value": null,
"type": "input",
"title": "供应商编号",
"name": [
"supplierNo"
],
"required": false
},
"supplierName": {
"value": null,
"type": "input",
"title": "供应商名称",
"name": [
"supplierName"
],
"required": true
},
"officialWebsite": {
"value": null,
"type": "input",
"title": "公司官网",
"name": [
"officialWebsite"
],
"required": false
},
"telephone": {
"value": null,
"type": "input",
"title": "联系电话",
"name": [
"telephone"
],
"required": false
},
"email": {
"value": null,
"type": "input",
"title": "公司邮箱",
"name": [
"email"
],
"required": false
},
"address": {
"value": null,
"type": "input",
"title": "地址",
"name": [
"address"
],
"required": false
},
"score": {
"value": null,
"type": "rate",
"title": "评分",
"name": [
"score"
],
"required": false,
allowHalf: true,
col: { span: 24 }
},
"remark": {
"value": null,
"type": "textarea",
"title": "备注",
"name": [
"remark"
],
"required": false,
col: { span: 24 }
},
"supplierUserList": {
"value": null,
"editable": true,
"type": "table",
"title": "联系人",
"name": [
"supplierUserList"
],
"required": false,
"columns": [
{
"title": "联系人姓名",
"dataIndex": "userName",
"key": "userName",
"search": false,
"valueType": "input",
formItemProps: {
rules: [
{
required: true,
message: '此项为必填项',
},
],
}
},
{
"title": "联系电话",
"dataIndex": "telephone",
"key": "telephone",
"search": false,
"valueType": "input",
formItemProps: {
rules: [
{
required: false,
pattern: /^\d{11}$/,
message: '手机号格式不正确'
},
],
}
},
{
"title": "邮箱",
"dataIndex": "email",
"key": "email",
"search": false,
"valueType": "input",
formItemProps: {
rules: [
{
required: false,
pattern: /^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-z]{2,}$/,
message: '邮箱格式不正确'
},
],
}
},
{
"title": "职位",
"dataIndex": "title",
"key": "title",
"search": false,
"valueType": "input"
},
{
title: '操作',
valueType: 'option',
render: () => {
return null;
},
},
],
"editable": true,
"rowKey": "id",
"rowName": "",
"dataSource": [],
col: { span: 24 }
}
}
\ No newline at end of file
import React, { useEffect, useRef, useReducer } from 'react';
import { Modal, Button, Drawer, Tooltip, Popconfirm, message, Switch } from 'antd';
import AutoTable from '@/components/AutoTable';
import getPrem from '@/utils/getPrem';//权限判断fn
import InitForm from '@/components/InitForm';
import { useRequest } from "umi";
import defaultFields from "./fields";
import { doFetch } from '@/utils/doFetch';
import { deviceprovideDetail, deleteProvideCheck } from "@/services/device";
import { deviceprovideDetails } from "@/utils/detailTotalCard";
import Deletecheck from '@/components/Deletecheck';
import Details from "@/components/Details";
const initState = {
vs: false,
fields: {},
iftype: {},
curitem: {},
details: {
dataSource: {},
totalCard: []
},
visible: false
};
function reducer(state, action) {
let { type } = action, newState = {};
switch (type) {
case "add":
newState = {
...state,
vs: true,
iftype: {
title: "新增设备供应商",
val: type
},
fields: { ...action.fields }
};
break;
case "edit":
newState = {
...state,
vs: true,
iftype: {
title: "编辑设备供应商",
val: type
},
fields: { ...action.fields },
curitem: action.curitem
}
break;
case "cdetails":
newState = {
...state,
details: {
dataSource: action.dataSource,
totalCard: [...deviceprovideDetails]
},
visible: true
}
break;
case "close":
newState = {
vs: false,
fields: {},
iftype: {},
curitem: {},
details: {
dataSource: {},
totalCard: []
},
visible: false
};
break;
}
return newState;
}
const Deviceprovide = (props) => {
let actionRef = useRef(), ChildRef = null;
function reload() {
actionRef?.current?.reload();
ChildRef?.onRefresh();
}
const [state, dispatch] = useReducer(reducer, initState),
{ vs, fields, iftype, curitem, details, visible } = state,
columns = [
{
"title": "供应商编号",
"dataIndex": "supplierNo",
"key": "supplierNo"
},
{
"title": "供应商名称",
"dataIndex": "supplierName",
"key": "supplierName",
render: (_, row) => {
return <div style={{ padding: '3px 0', overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis' }}>
<Tooltip title={row.supplierName}>
<a onClick={() => {
deviceprovideDetail({ id: row.id }).then(res => {
let data = res?.data?.data || {};
dispatch({ type: "cdetails", dataSource: data })
})
}}>{row.supplierName}</a>
</Tooltip>
</div>
}
},
{
"title": "联系电话",
"dataIndex": "telephone",
"key": "telephone"
},
{
"title": "邮箱",
"dataIndex": "email",
"key": "email"
},
{
"title": "地址",
"dataIndex": "address",
"key": "address",
"search": false
},
{
"title": "备注",
"dataIndex": "remark",
"key": "remark",
"search": false
},
{
"title": "评分",
"dataIndex": "score",
"key": "score",
render: (_, row) => {
return <div>{row.score}</div>
}
},
{
"title": "状态",
"dataIndex": "status",
"key":"status",
valueType: "select",
options: [
{
label: "启用",
value: 1
},
{
label: "关闭",
value: 0
}
],
render: (text, row, _, action) => {
return <Popconfirm
title="是否开启或关闭供应商?"
onConfirm={() => {
run({ url: "/qj/ngic-equipment-asset/equipmentSupplier/update/status", params: { id: row.id, status: row.status == 1 ? 0 : 1 } })
}}
onCancel={() => {
}}
okText="确定"
cancelText="取消"
disabled={!getPrem("equipmentSupplier_updatestatus", "ifs")}
>
< Switch checked={row.status == 1 ? true : false} checkedChildren="开启" unCheckedChildren="关闭" defaultChecked={false} />
</Popconfirm>
},
},
{
title: '操作',
valueType: 'option',
width: 150,
render: (text, row, _, action) => extraAction(text, row, _, action)
},
],
{ run, loading } = useRequest(doFetch, {
manual: true,
formatResult: (res) => res,
onSuccess: (result, params) => {
if (result.code == "0000") {
reload();
dispatch({ type: "close" })
}
}
});
function extraAction(text, record, _, action) {
return [
getPrem("equipmentSupplier_save", action, '修改', () => {
deviceprovideDetail({ id: record.id }).then(res => {
if (res.code == "0000") {
let data = res?.data?.data || {};
for (let i in defaultFields) {
defaultFields[i].value = data[i];
}
dispatch({ type: "edit", fields: defaultFields, curitem: data })
}
})
}),
<Deletecheck
name={"equipmentSupplier_deleteById"}
type={action}
text="删除"
clickfn={() => {
return deleteProvideCheck({ id: record.id, deleteCheck: true })
}}
pop={
{
title: "确认删除该供应商?",
onConfirm: () => {
run({ url: "/qj/ngic-equipment-asset/equipmentSupplier/deleteById", params: { id: record.id } })
}
}
}
btnType="deleteCheck"
/>
];
};
let saveData = (values, fn) => {
let newfields = JSON.parse(JSON.stringify(values));
//新增&修改
let difrid = iftype.val == "edit" ? { id: curitem.id } : {};
let supplierUserList = newfields?.supplierUserList?.map(it => {
delete it.id;
return it
});
let params = {
...newfields,
supplierUserList
}
run({ url: "/qj/ngic-equipment-asset/equipmentSupplier/save", params: { ...params, ...difrid } })
};
let extrarender = ([
<Button disabled={!getPrem("equipmentSupplier_save", "ifs")} type="primary" onClick={() => {
for (let i in defaultFields) {
defaultFields[i].value = null;
if (i == "supplierUserList") {
defaultFields[i].value = []
}
}
dispatch({ type: "add", fields: defaultFields })
}}>新增</Button>
]);
return <div>
<AutoTable
pagetitle={props.route.name} //页面标题
pageextra={extrarender} //页面操作 新增or批量删除
columns={columns}
path="/qj/ngic-equipment-asset/equipmentSupplier/queryList"
actionRef={actionRef}
onRef={node => ChildRef = node}
></AutoTable>
<Modal
maskClosable={false}
title={iftype.title}
visible={vs}
onCancel={() => dispatch({ type: "close" })}
footer={false}
destroyOnClose={true}
width={1000}
>
<InitForm
fields={fields}
submitData={(values) => {
saveData(values)
}}
onChange={(changedValues, allValues) => {
//联动操作
}}
submitting={
loading || !vs
}
>
</InitForm>
</Modal>
<Drawer
title="供应商详情"
closable={true}
visible={visible}
onClose={() => dispatch({ type: "close" })}
destroyOnClose={true}
afterVisibleChange={(v) => {
}}
width="100%"
className="drawerDetails"
>
<Details {...details}></Details>
</Drawer>
</div>
}
export default Deviceprovide;
\ No newline at end of file
......@@ -200,11 +200,11 @@ const Charactor = (props) => {
});
})}
</Menu.Item>
<Menu.Item key="key2">
{/* <Menu.Item key="key2">
{getPrem(true, null, "数据分权", () => {
// dispatch({ type: "dataauth", title: `给${record.roleName}添加数据权限`, curitem: record })
dispatch({ type: "dataauth", title: `给${record.roleName}添加数据权限`, curitem: record })
})}
</Menu.Item>
</Menu.Item> */}
<Menu.Item key="key3">
{getPrem(true, null, "人员", () => {
dispatch({
......
......@@ -167,16 +167,16 @@ const Staff = (props) => {
);
},
},
{
title: "组织",
dataIndex: "departmentName",
key: "departmentName",
},
{
title: "工厂",
dataIndex: "factoryName",
key: "factoryName",
},
{
title: "部门",
dataIndex: "departmentName",
key: "departmentName",
},
{
title: "负责仓库",
dataIndex: "chargeStoreName",
......@@ -242,29 +242,19 @@ const Staff = (props) => {
},
},
{
title: "工厂",
dataIndex: "factoryName",
key: "factoryName",
},
{
title: "部门",
title: "组织",
dataIndex: "departmentName",
key: "departmentName",
},
{
title: "负责车间",
dataIndex: "shopName",
key: "shopName",
},
{
title: "负责工段",
dataIndex: "sectionName",
key: "sectionName",
title: "工厂",
dataIndex: "factoryName",
key: "factoryName",
},
{
title: "负责产线",
dataIndex: "productionLineName",
key: "productionLineName",
title: "负责仓库",
dataIndex: "chargeStoreName",
key: "chargeStoreName",
},
{
......
import request from '@/utils/request';
//设备型号下拉框
export async function equipmentModelList(params) {
return request('/qj/ngic-equipment-asset/equipmentModel/query/selection', {
method: 'POST',
data: params,
});
}
//设备型号--(保养标准页面)下拉框
export async function equipmentMaintainModelList(params) {
return request('/qj/ngic-equipment-asset/equipmentModel/query/selection/maintainStandard', {
method: 'POST',
data: params,
});
}
//设备型号--(点检标准页面)下拉框
export async function equipmentCheckModelList(params) {
return request('/qj/ngic-equipment-asset/equipmentModel/query/selection/checkStandard', {
method: 'POST',
data: params,
});
}
//根据设备型号id查询是寿命件的备件
export async function lifespareSelect(params) {
return request(`/qj/ngic-equipment-asset/equipmentModelSpare/liveparts/selectionbox/byEquipmentModelId`, {
method: 'POST',
data: params
});
}
//备件下拉框
export async function mdmSpareList(params) {
return request(`/qj/ngic-spare-parts/mdmSpareParts/mdmSpareList`, {
method: 'POST',
data: params
});
}
//设备供应商详情
export async function deviceprovideDetail(params) {
return request('/qj/ngic-equipment-asset/equipmentSupplier/query/detail', {
method: 'POST',
data: params,
});
}
//供应商下拉框
export async function equipmentSupplierList(params) {
return request('/qj/ngic-equipment-asset/equipmentSupplier/query/selection', {
method: 'POST',
data: params,
});
}
//设备供应商删除前校验
export async function deleteProvideCheck(params) {
return request('/qj/ngic-equipment-asset/equipmentSupplier/deleteById', {
method: 'POST',
data: params,
});
}
//设备信息
export async function equipmentDetail(params) {
return request('/qj/ngic-equipment-asset/equipment/queryDetail', {
method: 'POST',
data: params,
});
}
//查询父设备id和子设备id,添加子设备时使用
export async function equipmentChildren(params) {
return request('/qj/ngic-equipment-asset/equipment/queryChildren', {
method: 'POST',
data: params,
});
}
//履历详情
export async function equipmentLogDetail(params) {
return request('/qj/ngic-equipment-asset/equipmentLog/query/detail', {
method: 'POST',
data: params,
});
}
//设备类型树查询
export async function deviceTypequeryTreeList(params) {
return request(`/qj/ngic-equipment-asset/equipmentType/queryTreeList`, {
method: 'POST',
data: params,
});
}
//设备详情
export async function equipmentAllDetail(params) {
return request('/qj/ngic-equipment-asset/equipment/query/all/detail', {
method: 'POST',
data: params,
});
}
//设备型号详情
export async function equipmentModelDetails(params) {
return request('/qj/ngic-equipment-asset/equipmentModelSpare/queryById', {
method: 'POST',
data: params,
});
}
//设备下拉框
export async function equipmentList(params) {
return request('/qj/ngic-equipment-asset/equipment/query/selection', {
method: 'POST',
data: params,
});
}
//IOT设备下拉框
export async function equipmentIotRelationList(params) {
return request('/qj/ngic-equipment-asset/equipmentIotRelation/query/device/selection', {
method: 'POST',
data: params,
});
}
//设备下拉框(过滤已报修)
export async function canApplyRepair(params) {
return request('/qj/ngic-equipment-repair/omEquipmentApplyRepair/canApplyRepair/equipmens/selection', {
method: 'POST',
data: params,
});
}
//关联备件
export async function equipmentModelSpareImport(params) {
return request('/qj/ngic-equipment-asset/equipmentModelSpare/importExcel', {
method: 'POST',
data: params,
type: "form"
});
}
\ No newline at end of file
......@@ -259,6 +259,85 @@ const userDetails = [
],
},
];
const deviceprovideDetails = [ //设备供应商详情
{
cardTitle: '基本信息',
itemData: [
{
"title": "供应商编号",
"key": "supplierNo",
},
{
"title": "供应商名称",
"key": "supplierName"
},
{
"title": "公司官网",
"key": "officialWebsite"
},
{
"title": "联系电话",
"key": "telephone"
},
{
"title": "邮箱",
"key": "email"
},
{
"title": "地址",
"key": "address"
},
{
"title": "评分",
"key": "score",
type: "rate",
allowHalf: true,
disabled: true
},
{
"title": "备注",
"key": "remark",
col: { span: 24 }
}
]
},
{
cardTitle: '联系人',
itemData: [
{
"key": "supplierUserList",
type: "table",
col: { span: 24 },
columns: [
{
"title": "联系人姓名",
"dataIndex": "userName",
"key": "userName",
"search": false
},
{
"title": "联系电话",
"dataIndex": "telephone",
"key": "telephone",
"search": false
},
{
"title": "邮箱",
"dataIndex": "email",
"key": "email",
"search": false
},
{
"title": "职位",
"dataIndex": "title",
"key": "title",
"search": false
},
]
}
]
},
];
const userCheckDetails = [
//个人详情-----待审核
......@@ -1099,4 +1178,5 @@ export {
shopplanDetail,
dispatchorderDetail,
labeltemplateDetail,
deviceprovideDetails
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment