Преглед на файлове

feat: 投诉建议相关

touchitvoid преди 2 години
родител
ревизия
b3257cd870
променени са 5 файла, в които са добавени 72 реда и са изтрити 50 реда
  1. 2 2
      src/services/complaint.ts
  2. 17 7
      src/views/Complaint/handle.tsx
  3. 21 5
      src/views/Complaint/index.tsx
  4. 29 19
      src/views/Complaint/order-detail.tsx
  5. 3 17
      src/views/Complaint/return-visit.tsx

+ 2 - 2
src/services/complaint.ts

@@ -10,8 +10,8 @@ export const ComplaintApi = params => {
 }
 
 // 获取投诉详情 /api/v1/suggestion/order/info
-export const GetComplaintInfo = () => request({
-  url: '/suggestion/order/info',
+export const GetComplaintInfo = search => request({
+  url: '/suggestion/order/info' + search,
   method: 'get'
 })
 

+ 17 - 7
src/views/Complaint/handle.tsx

@@ -80,24 +80,28 @@ const ComplaintHandle: React.FC = (props: any) => {
           <Button
             className="mr-1.5"
             onClick={() => {
+              orderForm.resetFields()
               setState(prevState => ({
                 ...prevState,
-                formMode: 'return',
-                orderVisible: true
+                formMode: 'refund',
+                orderVisible: true,
+                editId: row.id
               }))
             }}
           >退单</Button>,
           <Button
             className="mr-1.5"
             onClick={() => {
-              props.history.push('/admin/fix/order-detail')
+              props.history.push(`/admin/complaint/detail?id=${row.id}`)
             }}
           >详情</Button>,
           <Button onClick={() => {
+            orderForm.resetFields()
             setState(prevState => ({
               ...prevState,
               formMode: 'finish',
-              orderVisible: true
+              orderVisible: true,
+              editId: row.id
             }))
           }}>办结</Button>
         ]
@@ -156,7 +160,7 @@ const ComplaintHandle: React.FC = (props: any) => {
   </React.Fragment>
 
   const Forms = {
-    return: ChargeBackForm,
+    refund: ChargeBackForm,
     finish: FinishForm,
     send: SendForm
   }
@@ -171,7 +175,7 @@ const ComplaintHandle: React.FC = (props: any) => {
       finish: ComplaintOrderFinish
     }
     orderForm.validateFields().then(async values => {
-      await _Api[state.formMode]({ ...values, id: state.editId })
+      await _Api[state.formMode]({ ...values, id: state.editId, current_uid: 1 })
       message.success('操作成功!')
       orderForm.resetFields()
       actionRef.current?.reloadAndRest()
@@ -179,6 +183,12 @@ const ComplaintHandle: React.FC = (props: any) => {
     })
   }
 
+  const titleMap = {
+    refund: '退单',
+    finish: '办结工单',
+    send: '转单'
+  }
+
   return (
     <React.Fragment>
       <ProTable
@@ -190,7 +200,7 @@ const ComplaintHandle: React.FC = (props: any) => {
         columns={columns}
       />
       <Modal
-        title='转单'
+        title={titleMap[state.formMode]}
         visible={state.orderVisible}
         onOk={onSubmit}
         onCancel={() => setState(pre => ({ ...pre, orderVisible: false }))}

+ 21 - 5
src/views/Complaint/index.tsx

@@ -59,11 +59,21 @@ const ComplaintPage: React.FC = (props: any) => {
       dataIndex: 'option',
       search: false,
       render: (_, row, index, action) => {
-        return [
+        const DETAIL_BUTTON = <Button
+          className="mr-1.5"
+          onClick={() => {
+            props.history.push(`/admin/complaint/detail?id=${row.id}`)
+          }}
+        >详情</Button>
+        return ['已派单', '已完结'].includes(row.status) ? DETAIL_BUTTON : [
           <Button
             className="mr-1.5"
             onClick={() => {
               form.setFieldsValue(row)
+              setPic(row.apply_pic.map(url => ({
+                thumbUrl: url,
+                response: { data: url }
+              })))
               setState(prevState => ({
                 ...prevState,
                 visible: true,
@@ -73,12 +83,18 @@ const ComplaintPage: React.FC = (props: any) => {
           >编辑</Button>,
           <Button
             className="mr-1.5"
-            onClick={() => {}}
+            onClick={() => {
+              setState(prevState => ({
+                ...prevState,
+                orderVisible: true,
+                editId: row.id
+              }))
+            }}
           >派单</Button>,
           <Button
             className="mr-1.5"
             onClick={() => {
-              props.history.push('/admin/complaint/detail')
+              props.history.push(`/admin/complaint/detail?id=${row.id}`)
             }}
           >详情</Button>,
           <Button onClick={() => {
@@ -136,7 +152,7 @@ const ComplaintPage: React.FC = (props: any) => {
   const [orderForm] = Form.useForm()
   const handleSendOrder = () => {
     orderForm.validateFields().then(async values => {
-      await ComplaintOrderSend({ ...values, id: state.editId })
+      await ComplaintOrderSend({ ...values, id: state.editId, current_uid: 1 })
       message.success('操作成功!')
       orderForm.resetFields()
       actionRef.current?.reloadAndRest()
@@ -173,7 +189,7 @@ const ComplaintPage: React.FC = (props: any) => {
           wrapperCol={{ span: 15 }}
           form={orderForm}
         >
-          <Form.Item label='报修师傅' name="current_uid" rules={[{ required: true }]}>
+          <Form.Item label='处理对象' name="current_uid" rules={[{ required: true }]}>
             <Select placeholder='请选择' options={cUsers} />
           </Form.Item>
           <Form.Item label='处理意见' name="feedback" rules={[{ required: true }]}>

+ 29 - 19
src/views/Complaint/order-detail.tsx

@@ -6,19 +6,19 @@ import { GetComplaintInfo } from "../../services/complaint"
 const columns = [
   {
     title: 'ID',
-    dataIndex: ''
+    dataIndex: 'id'
   },
   {
     title: '处理人',
-    dataIndex: ''
+    dataIndex: 'user'
   },
   {
     title: '状态',
-    dataIndex: ''
+    dataIndex: 'status'
   },
   {
     title: '处理时间',
-    dataIndex: ''
+    dataIndex: 'handle_time'
   },
   {
     title: '意见',
@@ -26,22 +26,30 @@ const columns = [
   },
 ]
 const infoKeys = [
-  { label: '分类名称', key: '' },
-  { label: '联系地址', key: '' },
-  { label: '报修人', key: '' },
-  { label: '联系方式', key: '' },
-  { label: '预约时间', key: '' },
-  { label: '报修时间', key: '' },
-  { label: '报修内容', key: '' },
-  { label: '报修图片', key: '', col: 24, type: 'picture' },
+  { label: '投诉类型', key: 'suggestion_type' },
+  { label: '联系人', key: 'apply_people' },
+  { label: '联系方式', key: 'apply_people_phone' },
+  { label: '投诉内容', key: 'apply_content' },
+  { label: '投诉图片', key: '', col: 24, type: 'picture' },
 ]
 
 const OrderDetail: React.FC = () => {
 
-  const history = useHistory()
+  const history: any = useHistory()
+  const [orderInfo, setOrderInfo]: any = React.useState({
+    base_info: {
+      apply_pic: []
+    }
+  })
+
+  const statusItems = { 1: '投诉', 2: '建议' }
+  const visitLevel = { 1: '满意', 2: '不满意' }
 
   React.useEffect(() => {
-    GetComplaintInfo()
+    GetComplaintInfo(history.location.search).then((res: any) => {
+      res.base_info.suggestion_type = statusItems[res.base_info.suggestion_type]
+      setOrderInfo(res)
+    })
   }, [])
 
   return (
@@ -61,8 +69,10 @@ const OrderDetail: React.FC = () => {
                 <Col span={item.col || 8}>
                   <Form.Item label={item.label}>
                     { item.type === 'picture' ? (
-                      <Image className="mr-1.5" width={120} src="https://hbimg.huabanimg.com/683615e8e5dd8c4660efbdf1fbc3c26f1da40cae2a7a7-fcKebd_fw658/format/webp" />
-                    ) : item.label }
+                      orderInfo.base_info.apply_pic.map(url =>
+                        <Image width={100} src={url} />
+                      )
+                    ) : orderInfo?.base_info[item.key] }
                   </Form.Item>
                 </Col>
               ))
@@ -72,13 +82,13 @@ const OrderDetail: React.FC = () => {
       </Card>
       <Divider />
       <Card title="工单流转">
-        <Table columns={columns} bordered />
+        <Table dataSource={orderInfo.list} columns={columns} bordered />
       </Card>
       <Divider />
       <Card title="回访/业主评价">
         <Form>
-          <Form.Item label="满意度">xxxxxx</Form.Item>
-          <Form.Item label="业主评价">xxxxxxxxxxxxxxxxxx</Form.Item>
+          <Form.Item label="满意度">{ visitLevel[orderInfo.base_info?.return_visit_level] || '暂无' }</Form.Item>
+          <Form.Item label="业主评价">{ orderInfo.base_info?.return_visit_content || '暂无评价' }</Form.Item>
         </Form>
       </Card>
     </React.Fragment>

+ 3 - 17
src/views/Complaint/return-visit.tsx

@@ -3,7 +3,7 @@ import type { ActionType } from '@ant-design/pro-table'
 import ProTable from '@ant-design/pro-table'
 import { Button, Modal, Form, Input, message, Select } from 'antd'
 import { withRouter } from 'react-router-dom'
-import { ComplaintOrderFinish, ComplaintApi } from '../../services/complaint'
+import { ComplaintOrderReturnVisit, ComplaintApi } from '../../services/complaint'
 import './index.scss'
 
 const ComplaintReturnVisit: React.FC = (props: any) => {
@@ -52,16 +52,6 @@ const ComplaintReturnVisit: React.FC = (props: any) => {
         3: { text: '已完结' },
       }
     },
-    {
-      title: '状态',
-      dataIndex: 'status',
-      search: false,
-      valueEnum: {
-        1: { text: '未派单' },
-        2: { text: '已派单' },
-        3: { text: '已完结' },
-      }
-    },
     {
       title: '操作',
       dataIndex: 'option',
@@ -71,10 +61,8 @@ const ComplaintReturnVisit: React.FC = (props: any) => {
           <Button
             className="mr-1.5"
             onClick={() => {
-              orderForm.setFieldsValue(row)
               setState(prevState => ({
                 ...prevState,
-                formMode: 'send',
                 orderVisible: true,
                 editId: row.id
               }))
@@ -82,9 +70,7 @@ const ComplaintReturnVisit: React.FC = (props: any) => {
           >回访</Button>,
           <Button
             className="mr-1.5"
-            onClick={() => {
-              props.history.push('/admin/fix/order-detail')
-            }}
+            onClick={() => props.history.push(`/admin/complaint/detail?id=${row.id}`)}
           >详情</Button>,
         ]
       }
@@ -102,7 +88,7 @@ const ComplaintReturnVisit: React.FC = (props: any) => {
 
   const onSubmit = () => {
     orderForm.validateFields().then(async values => {
-      await ComplaintOrderFinish({ ...values, id: state.editId })
+      await ComplaintOrderReturnVisit({ ...values, id: state.editId })
       message.success('操作成功!')
       orderForm.resetFields()
       actionRef.current?.reloadAndRest()