Commit a1e67909 authored by wuhao's avatar wuhao 🎯

asder

parent 30c24b9f
......@@ -65,7 +65,7 @@ export default [
{
path: "/system/store",
name: "仓库管理",
component: "./system/Shop",
component: "./system/Store",
},
// {
// path: "/system/productionline",
......@@ -160,6 +160,11 @@ export default [
name: '供应商管理',
component: './platform/Provide',
},
{
path: '/platform/custom',
name: '客户管理',
component: './platform/Custom',
},
{
component: "./404",
},
......
......@@ -19,7 +19,7 @@ function DrawInitForm(props) {
placement="right"
closable={true}
getContainer={false}
style={{ position: "absolute" }}
style={{ position: "absolute",transform:"translateX(0)" }}
{...props}
>
{props.children}
......
......@@ -317,3 +317,6 @@ pre {
table {
min-width: calc(100% - 6px) !important;
}
.ant-drawer-open{
transform: none !important;
}
\ No newline at end of file
export default {
"customerNo": {
"value": null,
"type": "input",
"title": "编号",
"name": [
"customerNo"
],
"required": false
},
"customerName": {
"value": null,
"type": "input",
"title": "名称",
"name": [
"customerName"
],
"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,
},
"status": {
"value": null,
"type": "select",
"title": "启停状态",
"name": [
"status"
],
"required": true,
options: [
{
label: "启用",
value: 1
},
{
label: "停用",
value: 0
},
]
},
"remark": {
"value": null,
"type": "textarea",
"title": "备注",
"name": [
"remark"
],
"required": false,
col: { span: 24 }
},
"customerUserList": {
"value": null,
"editable": true,
"type": "table",
"title": "联系人",
"name": [
"customerUserList"
],
"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, { useState, 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 Details from "@/components/Details";
import { useAsyncEffect } from 'ahooks';
import tempfields from '@/utils/tempfields'
const initState = {
vs: false,
fields: {},
iftype: {},
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 },
}
break;
case "cdetails":
newState = {
...state,
details: {
dataSource: action.dataSource,
totalCard: [...deviceprovideDetails]
},
visible: true
}
break;
case "close":
newState = {
vs: false,
fields: {},
iftype: {},
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, details, visible } = state,
columns = [
{
"title": "客户编号",
"dataIndex": "customerNo",
"key": "customerNo"
},
{
"title": "客户名称",
"dataIndex": "customerName",
"key": "customerName",
render: (_, row) => {
return <div style={{ padding: '3px 0', overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis' }}>
<Tooltip title={row.customerName}>
<a onClick={() => {
deviceprovideDetail({ id: row.id }).then(res => {
let data = res?.data?.data || {};
dispatch({ type: "cdetails", dataSource: data })
})
}}>{row.customerName}</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: "/ngic-auth/sysCustomer/update/status", params: { id: row.id, status: row.status == 1 ? 0 : 1 } })
}}
onCancel={() => {
}}
okText="确定"
cancelText="取消"
disabled={!getPrem("equipmentCustomer_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") {
message.success("操作成功!")
reload();
dispatch({ type: "close" })
}
}
});
const [extrafields, setextrafields] = useState({});
const [subdata, setsubdata] = useState([]);
const [curitem, setcuritem] = useState({});
function extraAction(text, record, _, action) {
return [
getPrem("equipmentCustomer_save", action, '修改', async () => {
await setcuritem(record);
setTimeout(() => {
doFetch({ url: "/ngic-auth/sysCustomer/query/detail", params: { 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, ...extrafields } })
}
})
}, 400)
}),
getPrem("equipmentCustomer_deleteById", action, '删除', null, {
title: "确认删除该客户?",
onConfirm: () => {
run({ url: "/ngic-auth/sysCustomer/deleteById", params: { id: record.id } })
}
})
];
};
let saveData = (values, fn) => {
let newfields = JSON.parse(JSON.stringify(values));
//新增&修改
let difrid = iftype.val == "edit" ? { id: curitem.id } : {};
let customerUserList = newfields?.customerUserList?.map(it => {
delete it.id;
return it
});
let customerCharList = subdata.map((it, i) => {
let key = "field" + i.toString();
it.fieldRealValue = values[key];
delete newfields[key]
return it
})
let params = {
...newfields,
customerUserList,
customerCharList
}
run({ url: "/ngic-auth/sysCustomer/save", params: { ...params, ...difrid } })
};
let extrarender = ([
<Button disabled={!getPrem("equipmentCustomer_save", "ifs")} type="primary" onClick={() => {
for (let i in defaultFields) {
defaultFields[i].value = null;
if (i == "customerUserList") {
defaultFields[i].value = []
}
}
dispatch({ type: "add", fields: { ...defaultFields, ...extrafields } })
}}>新增</Button>
]);
useAsyncEffect(async () => {
let res = await tempfields("/ngic-auth/sysCustomerChar/queryCommonList", { id: curitem.id })
setextrafields(res?.fields);
setsubdata(res?.data);
}, [curitem])
return <div>
<AutoTable
pagetitle={props.route.name} //页面标题
pageextra={extrarender} //页面操作 新增or批量删除
columns={columns}
path="/ngic-auth/sysCustomer/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
......@@ -62,7 +62,25 @@ export default {
],
"required": false,
allowHalf: true,
col: { span: 24 }
},
"status": {
"value": null,
"type": "select",
"title": "启停状态",
"name": [
"status"
],
"required": true,
options: [
{
label: "启用",
value: 1
},
{
label: "停用",
value: 0
},
]
},
"remark": {
"value": null,
......@@ -74,6 +92,7 @@ export default {
"required": false,
col: { span: 24 }
},
"supplierUserList": {
"value": null,
"editable": true,
......@@ -126,7 +145,7 @@ export default {
{
required: false,
pattern: /^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-z]{2,}$/,
message: '邮箱格式不正确'
message: '邮箱格式不正确'
},
],
}
......
......@@ -29,7 +29,7 @@ function reducer(state, action) {
...state,
vs: true,
iftype: {
title: "新增设备供应商",
title: "新增供应商",
val: type
},
fields: { ...action.fields }
......@@ -40,7 +40,7 @@ function reducer(state, action) {
...state,
vs: true,
iftype: {
title: "编辑设备供应商",
title: "编辑供应商",
val: type
},
fields: { ...action.fields },
......
......@@ -152,7 +152,7 @@ const Store = (props) => {
title: "确认删除该仓库?",
onConfirm: () => {
run({
url: "/ngic-auth/sysShop/deleteById",
url: "/ngic-auth/sysStore/deleteById",
params: { id: record.id },
});
},
......
......@@ -10,12 +10,12 @@ export default {
],
"required": true
},
"storeAreaName": {
"storeAreaCode": {
"value": null,
"type": "select",
"title": "所属库区",
"name": [
"storeAreaName"
"storeAreaCode"
],
"required": true,
"options": {
......
......@@ -15,7 +15,7 @@ const initState = {
dataSource: {},
totalCard: [],
},
visible: false,
vs: false,
};
function reducer(state, action) {
let { type } = action,
......@@ -48,14 +48,14 @@ function reducer(state, action) {
newState = {
...state,
curitem: action.curitem,
visible: true,
vs: true,
};
break;
case "close":
newState = {
...state,
curitem: {},
visible: false,
vs: false,
};
break;
}
......@@ -82,7 +82,7 @@ const StoreApp = (props) => {
},
}),
[state, dispatch] = useReducer(reducer, initState),
{ vs, fields, iftype, curitem, detail, visible } = state,
{ vs, fields, iftype, curitem } = state,
columns = [
{
"title": "库位名称",
......@@ -95,8 +95,8 @@ const StoreApp = (props) => {
"key": "storeAreaName",
"valueType": "select",
"options": {
database:()=>doFetch("/ngic-base-business/sysDic/queryStorePositionSelect"),
params:{}
database: () => doFetch("/ngic-base-business/sysDic/queryStorePositionSelect"),
params: {}
}
},
{
......@@ -126,7 +126,7 @@ const StoreApp = (props) => {
title: "确认删除该库位?",
onConfirm: () => {
run({
url: "/ngic-auth/sysShop/deleteById",
url: "/ngic-auth/sysStorePosition/deleteById",
params: { id: record.id },
});
},
......@@ -137,9 +137,9 @@ const StoreApp = (props) => {
let saveData = (values, fn) => {
let newfields = JSON.parse(JSON.stringify(values));
//新增&修改
let difrid = iftype.val == "edit" ? { id: curitem.id } : {};
let difrid = iftype.val == "edit" ? { id: curitem.id, storeId: props?.curitem?.id } : { storeId: props?.curitem?.id };
run({
url: "/ngic-auth/sysStore/save",
url: "/ngic-auth/sysStorePosition/save",
params: { ...newfields, ...difrid },
});
};
......@@ -169,7 +169,7 @@ const StoreApp = (props) => {
path="/ngic-auth/sysStorePosition/queryList"
actionRef={actionRef}
onRef={(node) => (ChildRef = node)}
extraparams={{storeId:props?.curitem?.id??"0"}}
extraparams={{ storeId: props?.curitem?.id ?? "0" }}
></AutoTable>
<DrawInitForm
......
import { doFetch } from "./doFetch";
function formatFieds(data) {
let obj = {};
for (let i = 0; i < data.length; i++) {
let item = data[i],
fieldsKey = "field" + i;
if (item.fieldChar == 1) {
obj[fieldsKey] = {
value: item?.fieldRealValue ?? "",
title: item.fieldName,
name: [fieldsKey],
required: false,
type: "input",
};
} else {
obj[fieldsKey] = {
value:
item?.fieldRealValue == 0 || item?.fieldRealValue
? item?.fieldRealValue
: item.fieldChar == 4
? []
: "",
title: item.fieldName,
name: [fieldsKey],
required: false,
type: item.fieldChar == 3 ? "radio" : "select",
options: item.valueList,
multiple: item.fieldChar == 4 ? true : false,
};
}
}
return obj
}
async function tempfields(url, params) {
let datas = await doFetch({ url, params })
let list = datas?.data?.dataList;
return {
fields: formatFieds(list),
data: list
}
}
export default tempfields
\ No newline at end of file
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