Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | } 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 |
| | |
| | | <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> |
| | |
| | | {{ 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>
|
| | |
| | | <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>
|
| | |
| | | </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> |
| | |
| | | getComplaintDetail({ |
| | | id: params.id |
| | | }).then(res => { |
| | | this.info = res.data |
| | | console.log('res', res) |
| | | this.info = { |
| | | ...res.data |
| | | } |
| | | }) |
| | | }, |
| | | methods: { |
| | |
| | | }).then(res => { |
| | | this.showPop = false |
| | | // this.getDetailInfo() |
| | | uni.navigateBack() |
| | | uni.showToast({ |
| | | title: '操作成功', |
| | | icon: 'success', |
| | | mask: true |
| | | }) |
| | | setTimeout(() => { |
| | | uni.navigateBack() |
| | | }, 1500) |
| | | |
| | | }) |
| | | } else { //延期 |
| | | delayAudit({ |
| | |
| | | rejectReason: this.rejectText |
| | | }).then(res => { |
| | | this.showPop = false |
| | | uni.showToast({ |
| | | title: '操作成功', |
| | | icon: 'success', |
| | | mask: true |
| | | }) |
| | | // this.getDetailInfo() |
| | | uni.navigateBack() |
| | | setTimeout(() => { |
| | | uni.navigateBack() |
| | | }, 1500) |
| | | }) |
| | | } |
| | | |
| | |
| | | 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) |
| | | }) |
| | | } |
| | | }, |
| | |
| | | }, |
| | | addProgress() { |
| | | uni.navigateTo({ |
| | | url: `/pages/add-progress/index?id=${this.id}` |
| | | url: `/pages/progress/progress?id=${this.id}` |
| | | }) |
| | | }, |
| | | resultEntery() { |
| | |
| | | component: './setting/role', |
| | | access: '/system_setting/role_management', |
| | | }, |
| | | { |
| | | name: '人员管理', |
| | | path: '/setting/user', |
| | | component: './setting/user', |
| | | // access: '/system_setting/user_management', |
| | | } |
| | | ], |
| | | }, |
| | | { |
| | |
| | | |
| | | 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); |
| | | }, []); |
| | | |
| | | |
| | |
| | | */ |
| | | 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); |
| | |
| | | > |
| | | <Form layout="horizontal" {...formItemLayout} form={form} initialValues={{ isAuctioneer: 1 }}> |
| | | <Form.Item |
| | | name="deptName" |
| | | name="name" |
| | | required |
| | | label="职位名称" |
| | | rules={[{ required: true, message: '请输入职位名称' }]} |
| | |
| | | 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(); |
| | |
| | | const columns = [ |
| | | { |
| | | title: '职位名称', |
| | | dataIndex: 'deptName', |
| | | dataIndex: 'name', |
| | | }, |
| | | { |
| | | title: '操作', |
| | |
| | | columns={columns} |
| | | pagination={false} |
| | | request={async (params) => { |
| | | return await buildProTableDataSource(getList, params); |
| | | return buildProTableDataSource(getList, params); |
| | | }} |
| | | toolBarRender={(action, selectRows) => [ |
| | | <Space> |
| | |
| | | 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, |
| | | }); |
| | |
| | | |
| | | // 修改部门 |
| | | 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', |
| | | }); |
| | | } |
New file |
| | |
| | | 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); |
New file |
| | |
| | | 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; |
New file |
| | |
| | | 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', |
| | | }); |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | // import AddAndEdit from './components/addAndEdit'; |
| | | // import { getConfig, saveConfig } from './service'; |
| | | import { getSetting, addSetting } from './service'; |
| | | // const TabPane = Tabs.TabPane; |
| | | const Account = () => { |
| | | const actionRef = useRef(); |
| | |
| | | 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) { |
| | | |
| | | } |
| | | }) |
| | | }); |
| | | }; |
| | | |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | <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> |
| | |
| | | </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> |
New file |
| | |
| | | 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 |
| | | }); |
| | | } |
| | |
| | | } |
| | | |
| | | 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({ |