hejianhao
2025-02-25 8e0ed8bf6e254c813969a48fbb6ed066ececee0d
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
12个文件已修改
4个文件已添加
873 ■■■■■ 已修改文件
H5/pages/Appeal/Appeal.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/index/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/list/list.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/progress/progress.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/work-detail/work-detail.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/config/routes.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/components/RightContent/AvatarDropdown.tsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/career/components/addAndEdit.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/career/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/career/service.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/components/addAndEdit.jsx 383 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/index.jsx 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/service.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/work-order-setting/index.jsx 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/work-order-setting/service.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/utils/antdUtils.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/Appeal/Appeal.vue
@@ -4,13 +4,20 @@
            <view class="card  flex a-center h-108 j-between">
                <text class="w-108 fs-27 font-bold mr-85">发生时间</text>
                <view class=" flex a-center j-between flex1" @click="showDate=true">
                    <view class="flex1" v-if="time">
                        {{time}}
                    <view class=" flex a-center j-between flex1" @click="showList=true">
                        <view class="flex1" v-if="time">
                            {{time}}
                        </view>
                        <view class="flex1" v-else style="color: rgba(0,0,0,0.3);font-size:27rpx;">
                            请选择问题发生的时间
                        </view>
                        <image src="/static/Appeal/left.png" class="w-19 h-19" mode=""></image>
                    </view>
                    <view class="flex1" v-else style="color: rgba(0,0,0,0.3);font-size:27rpx;">
                        请选择问题发生的时间
                    </view>
                    <image src="/static/Appeal/left.png" class="w-19 h-19" mode=""></image>
                </view>
            </view>
            <view class="card  flex a-center h-108 j-between">
@@ -63,7 +70,6 @@
                        <input v-model="descriptionTitle" placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;"
                            class="h-94 pl-31 flex1" placeholder="请输入问题标题" />
                    </view>
                    <textarea name="" v-model="descriptionContent" id="" cols="30" placeholder="请输入问题描述内容"
                        placeholder-style="color: rgba(0, 0, 0, 0.30);font-size:27rpx;" rows="10"></textarea>
                </view>
@@ -235,18 +241,6 @@
                } else if (!this.descriptionContent) {
                    uni.showToast({
                        title: '请输入问题描述',
                        icon: 'none'
                    })
                    return
                } else if (this.images == 0) {
                    uni.showToast({
                        title: '请上传图片',
                        icon: 'none'
                    })
                    return
                } else if (this.videos == 0) {
                    uni.showToast({
                        title: '请上传视频',
                        icon: 'none'
                    })
                    return
H5/pages/index/index.vue
@@ -25,7 +25,7 @@
            <view class="flex flex-wrap j-between">
                <view class="pt-38 pb-38 bg1 w-333 br-19 mt-19 flex a-center" v-if="member==1" @click="onClick()">
                    <image class="w-94 h-77 ml-38" src="/static/home/img7.png" mode=""></image>
                    <text class="ml-37 font-bold">党员证</text>
                    <text class="ml-37 font-bold">党员证件</text>
                </view>
                <view class="pt-38 pb-38 bg1 w-333 flex br-19 mt-19 a-center" @click="goTopage()">
                    <image class="w-81 h-77 ml-38" src="/static/home/img4.png" mode=""></image>
H5/pages/list/list.vue
@@ -54,7 +54,7 @@
                        {{ statusObj[item.status] }}
                    </view>
                </view>
                <view v-if="['5','6'].includes(item.status)" class="mt-40 fs-23 pl-40 pr-40">
                <view v-if="[5,6].includes(item.status)" class="mt-40 fs-23 pl-40 pr-40">
                    <view class="flex j-between a-center">
                        <view class="color4">
                            上报人:<text class="color5">{{ item.reporter || '' }}</text>
@@ -123,7 +123,7 @@
                    <view class="txt-center fs-23 mt-27 color6">
                        创建时间:{{ item.createTime | formatTime }}
                    </view>
                    <view v-if="!(['3','5','7'].includes(item.status))" class="flex a-center j-center fs-23 mt-29 txt-center">
                    <view v-if="!([3,5,7].includes(item.status))" class="flex a-center j-center fs-23 mt-29 txt-center">
                        <view @click.stop="addProgress(item.id)" class="h-58 lh-58 bgColor5 w-192 br-29 color10">
                            添加办理进度
                        </view>
H5/pages/progress/progress.vue
@@ -44,22 +44,29 @@
                        </view>
                        <view class="context">{{ item.describe }}</view>
                        <view class="proImg">
                            <view class="imgOrVedio" v-for="(item, index) in item.imgUrl.split(',')" :key="index">
                                <image :src="item" class="img shrink0" mode="aspectFill" />
                                <view
                                    class="absolute mt-19 w-140 h-140 bgcolor5 top0 left0 br-8 flex a-center j-center">
                                    <image @tap="viewImage(item)" src="@/static/Appeal/amplify.png" class="w-19 h-19" />
                            <view v-if="item.imgUrl">
                                <view class="imgOrVedio" v-for="(ite, index) in item.imgUrl.split(',')" :key="index">
                                    <image :src="ite" class="img shrink0" mode="aspectFill" />
                                    <view
                                        class="absolute mt-19 w-140 h-140 bgcolor5 top0 left0 br-8 flex a-center j-center">
                                        <image @tap="viewImage(ite)" src="@/static/Appeal/amplify.png"
                                            class="w-19 h-19" />
                                    </view>
                                </view>
                            </view>
                            <view class="imgOrVedio" v-for="(item, index) in item.video.split(',')" :key="index">
                                <video id="myVideo" class="w-140 h-140 mt-19 shrink0" disabled :controls="false"
                                    :show-center-play-btn="false" :src="item" />
                                <view class="videoOpen" @click.stop="openVideo(item)">
                                    <image src="../../static/detailImg/open.png" class="video shrink0"
                                        mode="aspectFill">
                                    </image>
                            <view v-if="item.video">
                                <view class="imgOrVedio" v-for="(ite, index) in item.video.split(',')" :key="index">
                                    <video id="myVideo" class="w-140 h-140 mt-19 shrink0" disabled :controls="false"
                                        :show-center-play-btn="false" :src="ite" />
                                    <view class="videoOpen" @click.stop="openVideo(ite)">
                                        <image src="../../static/detailImg/open.png" class="video shrink0"
                                            mode="aspectFill">
                                        </image>
                                    </view>
                                </view>
                            </view>
                        </view>
                    </view>
                </view>
@@ -100,7 +107,10 @@
            getComplaintDetail({
                id: params.id
            }).then(res => {
                this.info = res.data
                console.log('res', res)
                this.info = {
                    ...res.data
                }
            })
        },
        methods: {
H5/pages/work-detail/work-detail.vue
@@ -469,7 +469,15 @@
                    }).then(res => {
                        this.showPop = false
                        // this.getDetailInfo()
                        uni.navigateBack()
                        uni.showToast({
                            title: '操作成功',
                            icon: 'success',
                            mask: true
                        })
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    })
                } else { //延期
                    delayAudit({
@@ -478,8 +486,15 @@
                        rejectReason: this.rejectText
                    }).then(res => {
                        this.showPop = false
                        uni.showToast({
                            title: '操作成功',
                            icon: 'success',
                            mask: true
                        })
                        // this.getDetailInfo()
                        uni.navigateBack()
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    })
                }
@@ -492,15 +507,29 @@
                        auditResult: 1,
                    }).then(res => {
                        // this.getDetailInfo()
                        uni.navigateBack()
                        uni.showToast({
                            title: '操作成功',
                            icon: 'success',
                            mask: true
                        })
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    })
                } else { //延期
                    delayAudit({
                        complaintId: this.id,
                        auditResult: 1,
                    }).then(res => {
                        uni.showToast({
                            title: '操作成功',
                            icon: 'success',
                            mask: true
                        })
                        // this.getDetailInfo()
                        uni.navigateBack()
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 1500)
                    })
                }
            },
@@ -524,7 +553,7 @@
            },
            addProgress() {
                uni.navigateTo({
                    url: `/pages/add-progress/index?id=${this.id}`
                    url: `/pages/progress/progress?id=${this.id}`
                })
            },
            resultEntery() {
management/config/routes.ts
@@ -51,6 +51,12 @@
        component: './setting/role',
        access: '/system_setting/role_management',
      },
      {
        name: '人员管理',
        path: '/setting/user',
        component: './setting/user',
        // access: '/system_setting/user_management',
      }
    ],
  },
  {
management/src/components/RightContent/AvatarDropdown.tsx
@@ -25,13 +25,13 @@
  const [unreadCount, setUnreadCount] = useState(0);
  useEffect(() => {
    const timer = setInterval(() => {
      getUnreadCount().then((res: any) => {
        setUnreadCount(res.data || 0);
      });
    }, 1000 * 5)
    // const timer = setInterval(() => {
    //   getUnreadCount().then((res: any) => {
    //     setUnreadCount(res.data || 0);
    //   });
    // }, 1000 * 5)
    return () => clearInterval(timer);
    // return () => clearInterval(timer);
  }, []);
management/src/pages/setting/career/components/addAndEdit.jsx
@@ -16,8 +16,8 @@
   */
  const okHandle = () => {
    form.validateFields().then((values) => {
      if (editData.deptId) {
        values.deptId = editData.deptId;
      if (editData.id) {
        values.id = editData.id;
        onUpdate(values);
      } else {
        onSave(values);
@@ -57,7 +57,7 @@
    >
      <Form layout="horizontal" {...formItemLayout} form={form} initialValues={{ isAuctioneer: 1 }}>
        <Form.Item
          name="deptName"
          name="name"
          required
          label="职位名称"
          rules={[{ required: true, message: '请输入职位名称' }]}
management/src/pages/setting/career/index.jsx
@@ -4,7 +4,7 @@
import { useRef, useState } from 'react';
import { Access, useAccess } from 'umi';
import AddAndEdit from './components/addAndEdit';
import { add, edit, del, getList, updateStatus, resetPaswword } from './service';
import { add, edit, del, getList } from './service';
const Account = () => {
  const actionRef = useRef();
  const addViewRef = useRef();
@@ -14,7 +14,7 @@
  const columns = [
    {
      title: '职位名称',
      dataIndex: 'deptName',
      dataIndex: 'name',
    },
    {
      title: '操作',
@@ -70,7 +70,7 @@
          columns={columns}
          pagination={false}
          request={async (params) => {
            return await buildProTableDataSource(getList, params);
            return  buildProTableDataSource(getList, params);
          }}
          toolBarRender={(action, selectRows) => [
            <Space>
management/src/pages/setting/career/service.js
@@ -1,16 +1,18 @@
import { request } from '@umijs/max';
// 分页获取部门列表
export const getList = async (data) => {
    return request(`/system/dept/list`, {
export const getList = async (params) => {
    console.log('111111111111',params);
    return request(`/api/huacheng-sangeshenbian/systemPost/list`, {
        method: 'GET',
        params:data
        params
    });
}
// 新增部门
export const add = async (data) => {
    return request('/system/dept', {
    return request('/api/huacheng-sangeshenbian/systemPost/add', {
        method: 'POST',
        data,
    });
@@ -18,15 +20,15 @@
// 修改部门
export const edit = async (data) => {
    return request('/system/dept', {
        method: 'PUT',
    return request('/api/huacheng-sangeshenbian/systemPost/edit', {
        method: 'POST',
        data
    });
}
// 删除部门管理
export const del = async (data) => {
    return request(`/system/dept/${data}`, {
    return request(`/api/huacheng-sangeshenbian/systemPost/delete/${data.id}`, {
        method: 'DELETE',
    });
}
management/src/pages/setting/user/components/addAndEdit.jsx
New file
@@ -0,0 +1,383 @@
import { Form, Input, Modal, Tree, Button, Spin, Row, Col, Select } from 'antd';
import { forwardRef, useImperativeHandle, useState } from 'react';
import { useEffect } from 'react';
import { getTree, getAddTree } from '../service';
import { Color } from 'antd/es/color-picker';
const formItemLayout = {
    labelCol: { span: 8 },
    wrapperCol: { span: 16 },
};
const AddAndEdit = ({ visible, onSave, onUpdate, onCancel }, ref) => {
    const [form] = Form.useForm();
    const [data, setData] = useState({})
    const [treeData, setTreeData] = useState([]);//权限树
    const [treeSeletKeys, setTreeSeletKeys] = useState([]); //勾选权限
    const [detailType, setDetailType] = useState(false);//是否详情
    const [spinning, setSpinning] = useState(false);
    const [oneCompanyList, setOneCompanyList] = useState([])
    const [twoCompanyList, setTwoCompanyList] = useState([])
    const [threeCompanyList, setThreeCompanyList] = useState([])
    const [fourCompanyList, setFourCompanyList] = useState([])
    //所属职位
    const [positionList, setPositionList] = useState([])
    //所属角色
    const [roleList, setRoleList] = useState([])
    //账号层级
    const [levelList, setLevelList] = useState([])
    //所属区县
    const [countyList, setCountyList] = useState([])
    //所属街道
    const [streetList, setStreetList] = useState([])
    //所属社区
    const [communityList, setCommunityList] = useState([])
    useEffect(() => {
        // 获取权限树
        getAddTree().then(res => {
            setTreeData(res.data)
        })
    }, [])
    useImperativeHandle(ref, () => {
        return {
            refreshData: (data, type) => {
                setDetailType(type || false)
                if (data.id) {
                    // 获取角色的权限树
                    getTree(data.id).then(res => {
                        setTreeSeletKeys(res.data.systemMenuIds || []);
                    })
                }
                setData(data)
                form.setFieldsValue(data);
            },
            clean: () => {
                setSpinning(false)
            },
        };
    });
    // 保存
    const okHandle = () => {
        form.validateFields().then((values) => {
            setSpinning(true)
            values.menuIds = treeSeletKeys
            delete values.tree
            if (data.id) {
                values.id = data.id
                onUpdate(values)
            } else {
                onSave(values);
            }
        });
    };
    return (
        <Modal
            getContainer={false}
            width="65%"
            destroyOnClose
            title={detailType ? '人员详情' : data.id ? '编辑人员' : '添加人员'}
            open={visible}
            onCancel={() => onCancel(false)}
            afterClose={() => {
                form.resetFields()
                setTreeSeletKeys([])
            }}
            footer={
                !detailType ?
                    [
                        <Button key="back" onClick={() => onCancel(false)}>取消</Button>,
                        <Button key="submit" type="primary" onClick={okHandle}>
                            确定
                        </Button>
                    ]
                    :
                    <Button key="back" onClick={() => onCancel(false)}>关闭</Button>
            }
        >
            <Form layout="horizontal" {...formItemLayout} form={form} scrollToFirstError>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="姓名"
                            rules={[{ required: true, message: '请输入人员姓名' }]}
                        >
                            <Input disabled={detailType} placeholder='请输入人员姓名' />
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属一级单位"
                            rules={[{ required: true, message: '请选择所属一级单位' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={oneCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属二级单位"
                            rules={[{ required: true, message: '请选择所属二级单位' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={twoCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属三级单位"
                            rules={[{ required: true, message: '请选择所属三级单位' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={threeCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属四级单位"
                            rules={[{ required: true, message: '请选择所属四级单位' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={fourCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属职位"
                            rules={[{ required: true, message: '请选择所属职位' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={positionList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属角色"
                            rules={[{ required: true, message: '请选择所属角色' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={roleList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="账号层级"
                            rules={[{ required: true, message: '请选择账号层级' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={levelList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={16}>
                        <Form.Item
                            label="是否管理员"
                            labelCol={{ span: 4 }}
                            wrapperCol={{ span: 20 }}
                            style={{ marginBottom: 0 }}
                        >
                            <div style={{ display: "flex", flex: 1 }}>
                                <Form.Item
                                    name="name"
                                    rules={[{ required: true, message: '请选择账号层级' }]}
                                >
                                    <Select
                                        key="searchSelect"
                                        allowClear
                                        style={{ width: '280px' }}
                                        placeholder="请选择"
                                        dataSource={levelList}
                                        fieldNames={{ label: 'name', value: 'id' }}
                                        filterOption={false}
                                    >
                                    </Select >
                                </Form.Item>
                                <div style={{ fontSize: '12px', Color: "rgba(0,0,0,0.5)" }}>管理员主要用于接收实现临期提醒,以及上级端登录</div>
                            </div>
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属区县"
                            rules={[{ required: true, message: '请选择所属区县' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={oneCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属街道"
                            rules={[{ required: true, message: '请选择所属街道' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={twoCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                            label="所属社区"
                            rules={[{ required: true, message: '请选择所属社区' }]}
                        >
                            <Select
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                dataSource={threeCompanyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={16}>
                        <Form.Item
                            label="联系方式"
                            labelCol={{ span: 4 }}
                            wrapperCol={{ span: 20 }}
                            style={{ marginBottom: 0 }}
                        >
                            <div style={{ display: "flex", flex: 1 }}>
                                <Form.Item
                                    name="name"
                                    rules={[{ required: true, message: '请输入联系方式' }]}
                                >
                                    <Input disabled={detailType} placeholder='请输入联系方式' />
                                </Form.Item>
                                <div style={{ fontSize: '12px', Color: "rgba(0,0,0,0.5)" }}>联系方式将作为登录账号使用</div>
                            </div>
                        </Form.Item>
                    </Col>
                </Row>
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="name"
                             label="登录密码"
                            rules={[{ required: true, message: '请输入登录密码' }]}
                        >
                            <Input disabled={detailType} placeholder='请输入' />
                        </Form.Item>
                    </Col>
                    <Col span={16}>
                        <Form.Item
                            label="确认密码"
                            labelCol={{ span: 4 }}
                            wrapperCol={{ span: 20 }}
                            style={{ marginBottom: 0 }}
                        >
                            <div style={{ display: "flex", flex: 1 }}>
                                <Form.Item
                                    name="name"
                                    rules={[{ required: true, message: '请输入确认密码' }]}
                                >
                                    <Input disabled={detailType} placeholder='请输入' />
                                </Form.Item>
                                <div style={{ fontSize: '12px', Color: "rgba(0,0,0,0.5)" }}>联系方式将作为登录账号使用</div>
                            </div>
                        </Form.Item>
                    </Col>
                </Row>
            </Form>
            <Spin spinning={spinning} fullscreen />
        </Modal >
    );
};
export default forwardRef(AddAndEdit);
management/src/pages/setting/user/index.jsx
New file
@@ -0,0 +1,211 @@
import { buildProTableDataSource, sendRequest, showDelConfirm } from '@/utils/antdUtils';
import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons';
import { PageContainer, ProFormText, ProTable, QueryFilter } from '@ant-design/pro-components';
import { Button, Col, Menu, Row, Space } from 'antd';
import { useEffect, useRef, useState } from 'react';
import { Access, useAccess } from 'umi';
import AddAndEdit from './components/addAndEdit';
import { add, del, edit, getList, getUnitList } from './service';
const Role = () => {
  const actionRef = useRef();
  const addViewRef = useRef();
  const [modalVisible, handleModalVisibles] = useState(true);
  const access = useAccess();
  useEffect(() => {
    getUnitList().then((res) => {
      console.log(res);
    });
  }, []);
  const items = [
    {
      key: '1',
      icon: (
        <div
          style={{
            display: 'flex',
            alignItems: 'center',
            justifyContent: 'space-between',
            width: '100%',
          }}
        >
          <span>组织部</span>
          <div>
            <PlusOutlined
              onClick={(e) => {
                e.stopPropagation();
                console.log(e);
              }}
            />
            <EditOutlined
              onClick={(e) => {
                e.stopPropagation();
                console.log(e);
              }}
            />
            <DeleteOutlined
              onClick={(e) => {
                e.stopPropagation();
                console.log(e);
              }}
            />
          </div>
        </div>
      ),
      children: [
        {
          key: '11',
          label: 'Option 1',
        },
        {
          key: '12',
          label: 'Option 2',
        },
        {
          key: '13',
          label: 'Option 3',
        },
        {
          key: '14',
          label: 'Option 4',
        },
      ],
    },
  ];
  const columns = [
    {
      title: '角色名称',
      dataIndex: 'name',
    },
    {
      title: '操作',
      hideInSearch: true,
      render: (text, record) => {
        return (
          <Space>
            {record.roleId != 1 && (
              <Access accessible={access['/system_setting/role_management/edit']}>
                <Button
                  type="link"
                  onClick={() => {
                    addViewRef.current.refreshData(record);
                    handleModalVisibles(true);
                  }}
                >
                  编辑
                </Button>
              </Access>
            )}
            {record.roleId != 1 && (
              <Access accessible={access['/system_setting/role_management/del']}>
                <Button
                  type="link"
                  onClick={() => {
                    showDelConfirm(async () => {
                      let status = await sendRequest(del, record.id);
                      if (status) {
                        actionRef.current.reload();
                      }
                    }, '确认删除所选信息吗?');
                  }}
                >
                  删除
                </Button>
              </Access>
            )}
            <Access accessible={access['/system_setting/role_management/detail'] || false}>
              <Button
                type="link"
                onClick={() => {
                  addViewRef.current.refreshData(record, true);
                  handleModalVisibles(true);
                }}
              >
                查看详情
              </Button>
            </Access>
          </Space>
        );
      },
    },
  ];
  return (
    <PageContainer
      header={{
        breadcrumb: {},
      }}
    >
      <div style={{ background: '#fff' }}>
        <QueryFilter>
          <ProFormText name="name" label="单位名称" />
        </QueryFilter>
      </div>
      <Row style={{ marginTop: 20, background: '#fff' }}>
        <Col span={4}>
          <Menu
            mode="inline"
            defaultSelectedKeys={['231']}
            style={{
              //   width: 256,
              height: '100%',
            }}
            items={items}
          />
        </Col>
        <Col span={20} style={{ minHeight: 650 }}>
          <ProTable
            rowKey="id"
            actionRef={actionRef}
            columns={columns}
            pagination={{
              showSizeChanger: true,
              showQuickJumper: true,
              defaultPageSize: 10,
            }}
            // request={(params) => buildProTableDataSource(getList, params)}
            toolBarRender={(action, selectRows) => [
              <Access accessible={access['/system_setting/role_management/add']}>
                <Space>
                  <Button
                    type="primary"
                    onClick={() => {
                      addViewRef.current.refreshData({});
                      handleModalVisibles(true);
                    }}
                  >
                    添加
                  </Button>
                </Space>
              </Access>,
            ]}
          />
        </Col>
      </Row>
      <AddAndEdit
        ref={addViewRef}
        visible={modalVisible}
        onSave={async (fileds) => {
          let success = await sendRequest(add, fileds);
          if (success) {
            handleModalVisibles(false);
            actionRef.current.reload();
          }
          addViewRef.current.clean();
        }}
        onUpdate={async (fileds) => {
          let success = await sendRequest(edit, fileds);
          if (success) {
            handleModalVisibles(false);
            actionRef.current.reload();
          }
          addViewRef.current.clean();
        }}
        onCancel={() => handleModalVisibles(false)}
      />
    </PageContainer>
  );
};
export default Role;
management/src/pages/setting/user/service.js
New file
@@ -0,0 +1,56 @@
import { request } from '@umijs/max';
// 列表
export const getList = async (params) => {
    return request(`/api/huacheng-sangeshenbian/systemRole/list`, {
        method: 'GET',
        params
    });
}
// 单位列表
export const getUnitList = async (params) => {
    return request(`/api/huacheng-sangeshenbian/department/list`, {
        method: 'GET',
        params
    });
}
// 编辑获取角色权限树
export const getTree = async (id) => {
    return request(`/api/huacheng-sangeshenbian/systemRole/getSystemRoleInfo/${id}`, {
        method: 'GET',
    });
}
// 新增获取权限树
export const getAddTree = async (id) => {
    return request(`/api/huacheng-sangeshenbian/systemMenu/getSystemMenuList`, {
        method: 'GET',
    });
}
// 新增
export const add = async (data) => {
    return request('/api/huacheng-sangeshenbian/systemRole/add', {
        method: 'POST',
        data,
    });
}
// 编辑
export const edit = async (data) => {
    return request('/api/huacheng-sangeshenbian/systemRole/edit', {
        method: 'POST',
        data,
    });
}
// 删除
export const del = async (id) => {
    return request(`/api/huacheng-sangeshenbian/systemRole/delete/${id}`, {
        method: 'DELETE',
    });
}
management/src/pages/work-order-setting/index.jsx
@@ -7,7 +7,7 @@
// import AddAndEdit from './components/addAndEdit';
// import { getConfig, saveConfig } from './service';
import { getSetting, addSetting } from './service';
// const TabPane = Tabs.TabPane;
const Account = () => {
    const actionRef = useRef();
@@ -15,20 +15,26 @@
    const addViewRef1 = useRef();
    const [form] = Form.useForm();
    const [tab, setTab] = useState('1');
    const [modalVisible, handleModalVisible] = useState(false);
    const [selectedRowKeys, setSelectedRowKeys] = useState([]);
    const changeStatusRef = useRef();
    const [addWarnVisible, handleAddWarnVisible] = useState(false);
    const [dataSource, setDataSource] = useState([]);
    const [data, setData] = useState([]);
    const access = useAccess();
    useEffect(() => {
        getSetting().then(res => {
            if (res.code === 200) {
                setData(res.data);
                form.setFieldsValue(res.data);
            }
        })
    }, [])
    const save = () => {
        form.validateFields().then(async (values) => {
                values.id = 1
                sendRequest(addSetting, values).then(res => {
                    if (res.code === 200) {
                    }
                })
        });
    };
@@ -49,29 +55,29 @@
                            </span><span style={{ marginLeft: 8, color: '#a5a5a5' }}>超过时间未处理诉求,系统自动对该事件承办者发送短信提醒,并知会至上一级管理层进行督办。
                                </span></div>
                            <Space style={{ marginTop: 20, display: 'flex', flexWrap: 'wrap' }}>
                                <Form.Item label="市级账号" name="isAuctioneer" rules={
                                <Form.Item label="市级账号" name="cityHandlingTime" rules={
                                    [{ required: true, message: '请输入市级账号' }]
                                }>
                                    <InputNumber controls={false} precision={0} min={0} addonAfter="天内"  ></InputNumber>
                                </Form.Item>
                                <Form.Item label="区县账号" name="isAuctioneer" rules={
                                <Form.Item label="区县账号" name="districtHandlingTime" rules={
                                    [{ required: true, message: '请输入区县账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="街道账号" name="isAuctioneer" rules={
                                <Form.Item label="街道账号" name="streetHandlingTime" rules={
                                    [{ required: true, message: '请输入街道账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="社区账号" name="isAuctioneer" rules={
                                <Form.Item label="社区账号" name="communityHandlingTime" rules={
                                    [{ required: true, message: '请输入社区账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="党员账号" name="isAuctioneer" rules={
                                <Form.Item label="党员账号" name="partyMemberHandlingTime" rules={
                                    [{ required: true, message: '请输入党员账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
@@ -84,29 +90,29 @@
                                </span></div>
                            <Space style={{ marginTop: 20, display: 'flex', flexWrap: 'wrap' }}>
                                <Form.Item label="市级账号" name="isAuctioneer" rules={
                                <Form.Item label="市级账号" name="cityDeadlineReminder" rules={
                                    [{ required: true, message: '请输入市级账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="区县账号" name="isAuctioneer" rules={
                                <Form.Item label="区县账号" name="districtDeadlineReminder" rules={
                                    [{ required: true, message: '请输入区县账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="街道账号" name="isAuctioneer" rules={
                                <Form.Item label="街道账号" name="streetDeadlineReminder" rules={
                                    [{ required: true, message: '请输入街道账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="社区账号" name="isAuctioneer" rules={
                                <Form.Item label="社区账号" name="communityDeadlineReminder" rules={
                                    [{ required: true, message: '请输入社区账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
                                </Form.Item>
                                <Form.Item label="党员账号" name="isAuctioneer" rules={
                                <Form.Item label="党员账号" name="partyMemberDeadlineReminder" rules={
                                    [{ required: true, message: '请输入党员账号' }]
                                }>
                                    <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
@@ -117,7 +123,7 @@
                            <div style={{ marginBottom: 20 }}><span style={{ fontSize: '14px', fontWeight: 600 }}>*诉求处理时间:
                            </span><span style={{ marginLeft: 8, color: '#a5a5a5' }}>超过时间未处理诉求,系统自动对该事件承办者发送短信提醒,并知会至上一级管理层进行督办。
                                </span></div>
                            <Form.Item label="添加后处理时间" name="isAuctioneer" rules={
                            <Form.Item label="添加后处理时间" name="demandProcessingTime" rules={
                                [{ required: true, message: '请输入添加后处理时间' }]
                            }>
                                <InputNumber precision={0} min={0} addonAfter="天内" controls={false}></InputNumber>
@@ -125,7 +131,7 @@
                        </Card>
                        <Access accessible={access['/work_order_transaction_management/work_order_item_configuration/save'] || false}>
                            <div style={{ marginTop: 20, display: 'flex', justifyContent: 'center' }}>
                                <Button type="primary" htmlType="submit" style={{ marginRight: 20 }}>
                                <Button type="primary" htmlType="submit" style={{ marginRight: 20 }} onClick={() => {save()}} >
                                    保存
                                </Button>
                            </div>
management/src/pages/work-order-setting/service.js
New file
@@ -0,0 +1,17 @@
import { request } from '@umijs/max';
// 获取工单事项配置
export const getSetting = async (data) => {
    return request(`/api/huacheng-sangeshenbian/workOrderItemConfig/getWorkOrderItemConfigInfo`, {
        method: 'GET',
        params:data
    });
}
// 配置工单事项配置
export const addSetting = async (data) => {
    return request(`/api/huacheng-sangeshenbian/workOrderItemConfig/addWorkOrderItemConfig`, {
        method: 'POST',
        data
    });
}
management/src/utils/antdUtils.js
@@ -103,7 +103,8 @@
}
export async function buildProTableDataSource(fun, params) {
  params.pageNum = params.current;
  params.pageNum = params.current || 1;
  params.pageSize = params.pageSize || 10
  delete params.current
  const response = await fun(params);
  const data = Promise.resolve({