소스 검색

feat: 云版详情赠送功能

outaozhen 4 년 전
부모
커밋
1f83c43c85

+ 148 - 5
src/pages/Product/Cloud/components/Detail/TabList.jsx

@@ -1,6 +1,10 @@
-import React, { useRef } from 'react'
-import { Tabs, Tag } from 'antd'
+import React, { useState, useRef } from 'react'
+import { Button, Tabs, Tag, message } from 'antd'
 import ProTable from '@ant-design/pro-table'
+import consts from '@/consts'
+import { useDispatch } from 'dva'
+import UpgradeModal, { titleType, upgradeTypeEnum, lockTypeEnum } from './UpgradeModal'
+import { apiRoadPricingUpgrade } from '@/services/product'
 
 export const lockEnum = {
   1: '借出',
@@ -12,13 +16,15 @@ const RoadpricingTabList = props => {
   const {
     compilationList,
     cloudUser: { online_list = [] },
-    projectType
+    projectType,
+    ssoId
   } = props
   const isUpgradeEnum = {
     true: '已升级',
     undefined: ''
   }
   const { TabPane } = Tabs
+  const dispatch = useDispatch()
   const tRef = useRef(null)
   const titleEnum = {
     1: '养护云造价',
@@ -26,6 +32,32 @@ const RoadpricingTabList = props => {
     3: '公路云计价',
     4: '大司空概算'
   }
+  const [roadPricingUpgrade, setRoadPricingUpgrade] = useState({
+    type: '',
+    compilationId: '',
+    compilationName: '',
+    upgradeTypeEnum: '',
+    lockTypeEnum: '',
+    visible: false,
+    loading: false
+  })
+  const handleRoadPricingUpgrade = async values => {
+    setRoadPricingUpgrade({ ...roadPricingUpgrade, loading: true })
+    const { code = -1 } = await apiRoadPricingUpgrade({
+      ...values,
+      ssoId
+    })
+    if (code === consts.RET_CODE.SUCCESS) {
+      message.success('新增成功')
+      // 请求完了
+      setRoadPricingUpgrade({ ...roadPricingUpgrade, loading: false, visible: false })
+      // 刷新数据
+      dispatch({
+        type: 'refresh/commitAction',
+        payload: 'cloud'
+      })
+    }
+  }
   const columns = [
     {
       title: '产品',
@@ -53,8 +85,106 @@ const RoadpricingTabList = props => {
     },
     {
       title: '操作',
-      // dataIndex: 'deadline',
-      width: '25%'
+      width: '25%',
+      render: (_, record) => (
+        <>
+          {record.isUpgrade ? (
+            <>
+              <Button
+                type="primary"
+                ghost
+                size="small"
+                className="m-2px"
+                onClick={() =>
+                  setRoadPricingUpgrade({
+                    ...setRoadPricingUpgrade,
+                    visible: true,
+                    type: titleType.GIVE,
+                    // eslint-disable-next-line no-underscore-dangle
+                    compilationId: record._id,
+                    compilationName: record.name,
+                    lockTypeEnum: lockTypeEnum.GIVE,
+                    upgradeTypeEnum: upgradeTypeEnum.UPGRADE
+                  })
+                }>
+                赠送
+              </Button>
+              <Button
+                type="primary"
+                ghost
+                size="small"
+                className="m-2px"
+                onClick={() =>
+                  setRoadPricingUpgrade({
+                    ...setRoadPricingUpgrade,
+                    visible: true,
+                    type: titleType.DEMOTION
+                  })
+                }>
+                降级
+              </Button>
+              <Button
+                type="primary"
+                ghost
+                size="small"
+                onClick={() =>
+                  setRoadPricingUpgrade({
+                    ...setRoadPricingUpgrade,
+                    visible: true,
+                    type: titleType.DEADLINE
+                  })
+                }>
+                限期
+              </Button>
+            </>
+          ) : (
+            <>
+              <Button
+                type="primary"
+                ghost
+                size="small"
+                className="m-2px"
+                onClick={() =>
+                  setRoadPricingUpgrade({
+                    ...setRoadPricingUpgrade,
+                    visible: true,
+                    type: titleType.GIVE
+                  })
+                }>
+                赠送
+              </Button>
+              <Button
+                type="primary"
+                ghost
+                size="small"
+                className="m-2px"
+                onClick={() =>
+                  setRoadPricingUpgrade({
+                    ...setRoadPricingUpgrade,
+                    visible: true,
+                    type: titleType.LEND
+                  })
+                }>
+                借出
+              </Button>
+              <Button
+                type="primary"
+                ghost
+                size="small"
+                className="m-2px"
+                onClick={() =>
+                  setRoadPricingUpgrade({
+                    ...setRoadPricingUpgrade,
+                    visible: true,
+                    type: titleType.SALE
+                  })
+                }>
+                销售
+              </Button>
+            </>
+          )}
+        </>
+      )
     }
   ]
   const columnOnline = [
@@ -103,6 +233,19 @@ const RoadpricingTabList = props => {
           </TabPane>
         </Tabs>
       </div>
+      <UpgradeModal
+        onConfirm={handleRoadPricingUpgrade}
+        loading={roadPricingUpgrade.loading}
+        visible={roadPricingUpgrade.visible}
+        type={roadPricingUpgrade.type}
+        onCancel={() => setRoadPricingUpgrade({ ...roadPricingUpgrade, visible: false })}
+        projectType={projectType}
+        ssoId={ssoId}
+        compilationId={roadPricingUpgrade.compilationId}
+        compilationName={roadPricingUpgrade.compilationName}
+        lock={roadPricingUpgrade.lockTypeEnum}
+        upgradeType={roadPricingUpgrade.upgradeTypeEnum}
+      />
     </div>
   )
 }

+ 101 - 0
src/pages/Product/Cloud/components/Detail/UpgradeModal.jsx

@@ -0,0 +1,101 @@
+import React from 'react'
+import { Modal, Form, Switch, DatePicker } from 'antd'
+import dayjs from 'dayjs'
+import { dayjsFormat } from '@/utils/utils'
+import { useDispatch } from 'umi'
+
+export const upgradeTypeEnum = {
+  UPGRADE: 1, // 升级
+  DEMOTION: 2, // 降级
+  DEADLINE: 3 // 限期
+}
+export const lockTypeEnum = {
+  LEND: 1, // 借出
+  SALE: 2, // 销售
+  GIVE: 3, // 赠送
+  DEADLINE: 0 // 限期
+}
+
+export const titleType = {
+  LEND: 1, // 借出
+  SALE: 2, // 销售
+  GIVE: 3, // 赠送
+  DEMOTION: 4, // 降级
+  DEADLINE: 5 // 限期
+}
+
+const UpgradeModal = props => {
+  const modalTitleEnum = {
+    1: '确认借出',
+    2: '确认销售',
+    3: '确认赠送',
+    4: '确认降级',
+    5: '确认限期'
+  }
+  const {
+    visible,
+    onCancel,
+    loading,
+    onConfirm,
+    type,
+    projectType,
+    ssoId,
+    compilationId,
+    compilationName,
+    lock,
+    upgradeType
+  } = props
+  const [form] = Form.useForm()
+  const dispatch = useDispatch()
+  const layout = {
+    layout: 'vertical'
+  }
+  const handleonOk = () => {
+    form.validateFields().then(values => {
+      onConfirm({
+        ...values,
+        projectType,
+        ssoId,
+        compilationId,
+        compilationName,
+        lock,
+        upgradeType
+      })
+      dispatch({
+        type: 'refresh/commitAction',
+        payload: 'cloud'
+      })
+    })
+  }
+  return (
+    <Modal
+      getContainer={false}
+      width={800}
+      title={modalTitleEnum[type]}
+      visible={visible}
+      confirmLoading={loading}
+      onCancel={onCancel}
+      onOk={handleonOk}>
+      {type === lockTypeEnum.GIVE ? (
+        <div className="mb-6">
+          <p className="pb-3">为用户aaa,bbb 赠送 ccc</p>
+          <div className="pb-5">
+            <Switch />
+            <span className="ml-2">限期</span>
+          </div>
+          <Form {...layout} form={form}>
+            <Form.Item
+              name="deadline"
+              label="到期时间"
+              initialValue={dayjs(new Date())}
+              rules={[{ required: true, message: '到期时间' }]}>
+              <DatePicker style={{ width: '100%' }} />
+            </Form.Item>
+          </Form>
+        </div>
+      ) : null}
+    </Modal>
+  )
+}
+
+export default UpgradeModal

+ 1 - 0
src/pages/Product/Cloud/components/Detail/index.jsx

@@ -150,6 +150,7 @@ const Detail = props => {
               compilationList={state.compilationList}
               cloudUser={state.cloudUser}
               projectType={projectType}
+              ssoId={state.cloudUser.ssoId}
             />
             <LowerList log={state.log} serviceLog={state.serviceLog} />
           </Col>

+ 7 - 2
src/services/product.js

@@ -81,16 +81,21 @@ export async function apiRoadpricingDetail(params) {
   return request('/RoadPricing/detail', { params })
 }
 
-/** 关联客户 */
+/** 云版关联客户 */
 export async function apiRoadPricingLinkClient(params) {
   return request.post('/RoadPricing/link/client', {
     data: params
   })
 }
 
-/** 移除客户 */
+/** 云版移除客户 */
 export async function apiRoadPricingUnLinkClient(params) {
   return request.post('/RoadPricing/unlink/client', {
     data: params
   })
 }
+
+/** 设云版置升级产品 */
+export async function apiRoadPricingUpgrade(payload) {
+  return request.post('/RoadPricing/upgrade', { data: payload })
+}