Commit 8c4ea6c0 by lijinqi

Merge remote-tracking branch 'origin/develop' into develop

parents 896100d3 5b06e08d
...@@ -31,7 +31,7 @@ VITE_OUT_DIR=dist ...@@ -31,7 +31,7 @@ VITE_OUT_DIR=dist
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
# 验证码的开关 # 验证码的开关
VITE_APP_CAPTCHA_ENABLE=true VITE_APP_CAPTCHA_ENABLE=false
# GoView域名 # GoView域名
VITE_GOVIEW_URL='http://127.0.0.1:3000' VITE_GOVIEW_URL='http://127.0.0.1:3000'
...@@ -53,5 +53,10 @@ export const ApiOrderApi = { ...@@ -53,5 +53,10 @@ export const ApiOrderApi = {
// 导出api订单 Excel // 导出api订单 Excel
exportApiOrder: async (params) => { exportApiOrder: async (params) => {
return await request.download({ url: `/apihub/api-order/export-excel`, params }) return await request.download({ url: `/apihub/api-order/export-excel`, params })
},
issueInvoice: async (data) =>{
return await request.put({ url: `/apihub/api-order/issue-invoice`, data})
} }
} }
...@@ -161,7 +161,7 @@ service.interceptors.response.use( ...@@ -161,7 +161,7 @@ service.interceptors.response.use(
}) })
} }
} else if (code === 500) { } else if (code === 500) {
ElMessage.error(t('sys.api.errMsg500')) ElMessage.error(msg)
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg))
} else if (code === 901) { } else if (code === 901) {
ElMessage.error({ ElMessage.error({
......
<template>
<Dialog v-model="dialogVisible" title="上传发票" width="45%">
<el-form-item label="发票地址" prop="invoiceUrl">
<UploadImg v-model="formData.invoiceUrl" />
<p class="upload-tips">
请上传 大小不超过 <span class="red-text">5MB</span> 格式为
<span class="red-text">png/jpg/jpeg</span>
的文件
</p>
</el-form-item>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="dialogVisible = false">取 消</el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import {ApiOrderApi} from "@/api/apihub/apiorder";
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗是否展示
const formRef = ref() // 表单 Ref
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
const submitForm = async () => {
// 提交请求
formLoading.value = true
try {
const data = unref(formData)
await ApiOrderApi.issueInvoice(data)
message.success(t('common.updateSuccess'))
dialogVisible.value = false
// 发送操作成功的事件
emit('success', true)
} catch (error) {
console.error(error);
}finally {
formLoading.value = false
}
}
const formData = ref({
id: undefined, // 订单编号
invoiceStatus: undefined,
invoiceUrl: ''
})
const open = async (row) => {
resetForm()
// 设置数据
formData.value.id = row.id
formData.value.invoiceStatus = row.invoiceStatus
formData.value.invoiceUrl = row.invoiceUrl
dialogVisible.value = true
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined, // 订单编号
invoiceStatus: undefined,
invoiceUrl: ''
}
formRef.value?.resetFields()
}
</script>
<style scoped lang="scss">
</style>
<template>
<!-- 图片查看弹窗 -->
<el-dialog
v-model="dialogVisible"
title="查看发票图片"
:width="`600px`"
:close-on-click-modal="false">
<div class="flex justify-center p-4">
<img
:src="formData.invoiceUrl"
alt="发票图片"
class="max-w-full max-h-[500px] object-contain"
@error="handleImageError"
/>
</div>
</el-dialog>
</template>
<script setup lang="ts">
const dialogVisible = ref(false) // 弹窗是否展示
const formData = ref({
id: undefined, // 订单编号
invoiceStatus: undefined,
invoiceUrl: ''
})
const open = async (row) => {
resetForm()
// 设置数据
formData.value.id = row.id
formData.value.invoiceStatus = row.invoiceStatus
formData.value.invoiceUrl = row.invoiceUrl
dialogVisible.value = true
}
defineExpose({open}) // 提供 open 方法,用于打开弹窗
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined, // 订单编号
invoiceStatus: undefined,
invoiceUrl: ''
}
}
const handleImageError = (e) => {
e.target.src = 'https://picsum.photos/600/400?grayscale&blur=2'; // 占位图
e.target.alt = '图片加载失败';
};
</script>
<style scoped lang="scss">
</style>
...@@ -26,15 +26,15 @@ ...@@ -26,15 +26,15 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item label="套餐名称" prop="packageId">--> <!-- <el-form-item label="套餐名称" prop="packageId">-->
<!-- <el-input--> <!-- <el-input-->
<!-- v-model="queryParams.packageId"--> <!-- v-model="queryParams.packageId"-->
<!-- placeholder="请输入套餐名称"--> <!-- placeholder="请输入套餐名称"-->
<!-- clearable--> <!-- clearable-->
<!-- @keyup.enter="handleQuery"--> <!-- @keyup.enter="handleQuery"-->
<!-- class="!w-240px"--> <!-- class="!w-240px"-->
<!-- />--> <!-- />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="订单编号" prop="orderNo"> <el-form-item label="订单编号" prop="orderNo">
<el-input <el-input
v-model="queryParams.orderNo" v-model="queryParams.orderNo"
...@@ -51,59 +51,66 @@ ...@@ -51,59 +51,66 @@
clearable clearable
class="!w-240px" class="!w-240px"
> >
<el-option label="请选择字典生成" value="" /> <el-option label="请选择字典生成" value=""/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item label="支付订单编号" prop="payOrderId">--> <!-- <el-form-item label="支付订单编号" prop="payOrderId">-->
<!-- <el-input--> <!-- <el-input-->
<!-- v-model="queryParams.payOrderId"--> <!-- v-model="queryParams.payOrderId"-->
<!-- placeholder="请输入支付订单编号"--> <!-- placeholder="请输入支付订单编号"-->
<!-- clearable--> <!-- clearable-->
<!-- @keyup.enter="handleQuery"--> <!-- @keyup.enter="handleQuery"-->
<!-- class="!w-240px"--> <!-- class="!w-240px"-->
<!-- />--> <!-- />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- <el-form-item label="订单支付时间" prop="payTime">--> <!-- <el-form-item label="订单支付时间" prop="payTime">-->
<!-- <el-date-picker--> <!-- <el-date-picker-->
<!-- v-model="queryParams.payTime"--> <!-- v-model="queryParams.payTime"-->
<!-- value-format="YYYY-MM-DD HH:mm:ss"--> <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
<!-- type="daterange"--> <!-- type="daterange"-->
<!-- start-placeholder="开始日期"--> <!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"--> <!-- end-placeholder="结束日期"-->
<!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"--> <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
<!-- class="!w-220px"--> <!-- class="!w-220px"-->
<!-- />--> <!-- />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- <el-form-item label="支付成功的支付渠道" prop="payChannelCode">--> <!-- <el-form-item label="支付成功的支付渠道" prop="payChannelCode">-->
<!-- <el-input--> <!-- <el-input-->
<!-- v-model="queryParams.payChannelCode"--> <!-- v-model="queryParams.payChannelCode"-->
<!-- placeholder="请输入支付成功的支付渠道"--> <!-- placeholder="请输入支付成功的支付渠道"-->
<!-- clearable--> <!-- clearable-->
<!-- @keyup.enter="handleQuery"--> <!-- @keyup.enter="handleQuery"-->
<!-- class="!w-240px"--> <!-- class="!w-240px"-->
<!-- />--> <!-- />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- <el-form-item label="创建时间" prop="createTime">--> <!-- <el-form-item label="创建时间" prop="createTime">-->
<!-- <el-date-picker--> <!-- <el-date-picker-->
<!-- v-model="queryParams.createTime"--> <!-- v-model="queryParams.createTime"-->
<!-- value-format="YYYY-MM-DD HH:mm:ss"--> <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
<!-- type="daterange"--> <!-- type="daterange"-->
<!-- start-placeholder="开始日期"--> <!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"--> <!-- end-placeholder="结束日期"-->
<!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"--> <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
<!-- class="!w-220px"--> <!-- class="!w-220px"-->
<!-- />--> <!-- />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery">
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <Icon icon="ep:search" class="mr-5px"/>
搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px"/>
重置
</el-button>
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openForm('create')" @click="openForm('create')"
v-hasPermi="['apihub:api-order:create']" v-hasPermi="['apihub:api-order:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px"/>
新增
</el-button> </el-button>
<el-button <el-button
type="success" type="success"
...@@ -112,7 +119,8 @@ ...@@ -112,7 +119,8 @@
:loading="exportLoading" :loading="exportLoading"
v-hasPermi="['apihub:api-order:export']" v-hasPermi="['apihub:api-order:export']"
> >
<Icon icon="ep:download" class="mr-5px" /> 导出 <Icon icon="ep:download" class="mr-5px"/>
导出
</el-button> </el-button>
<el-button <el-button
type="danger" type="danger"
...@@ -121,7 +129,8 @@ ...@@ -121,7 +129,8 @@
@click="handleDeleteBatch" @click="handleDeleteBatch"
v-hasPermi="['apihub:api-order:delete']" v-hasPermi="['apihub:api-order:delete']"
> >
<Icon icon="ep:delete" class="mr-5px" /> 批量删除 <Icon icon="ep:delete" class="mr-5px"/>
批量删除
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -137,19 +146,19 @@ ...@@ -137,19 +146,19 @@
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
@selection-change="handleRowCheckboxChange" @selection-change="handleRowCheckboxChange"
> >
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55"/>
<!-- <el-table-column label="订单ID" align="center" prop="id" />--> <!-- <el-table-column label="订单ID" align="center" prop="id" />-->
<el-table-column label="用户手机号" align="center" prop="userMobile" width="120px" /> <el-table-column label="用户手机号" align="center" prop="userMobile" width="120px"/>
<el-table-column label="API应用" align="center" prop="apiName" width="100px" /> <el-table-column label="API应用" align="center" prop="apiName" width="100px"/>
<el-table-column label="套餐名称" align="center" prop="packageName" width="100px" /> <el-table-column label="套餐名称" align="center" prop="packageName" width="100px"/>
<el-table-column label="订单编号" align="center" prop="orderNo" width="100px" /> <el-table-column label="订单编号" align="center" prop="orderNo" width="100px"/>
<el-table-column label="订单金额" align="center" prop="costPrice"> <el-table-column label="订单金额" align="center" prop="costPrice">
<template #default="scope"> <template #default="scope">
{{ (scope.row.costPrice / 100).toFixed(2) }} {{ (scope.row.costPrice / 100).toFixed(2) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单状态" align="center" prop="statusName" /> <el-table-column label="订单状态" align="center" prop="statusName"/>
<!-- <el-table-column label="支付订单编号" align="center" prop="payOrderId" />--> <!-- <el-table-column label="支付订单编号" align="center" prop="payOrderId" />-->
<el-table-column <el-table-column
label="订单支付时间" label="订单支付时间"
align="center" align="center"
...@@ -157,29 +166,29 @@ ...@@ -157,29 +166,29 @@
:formatter="dateFormatter" :formatter="dateFormatter"
width="180px" width="180px"
/> />
<el-table-column label="支付状态" align="center" prop="payStatusName" /> <el-table-column label="支付状态" align="center" prop="payStatusName"/>
<!-- <el-table-column--> <!-- <el-table-column-->
<!-- label="订单完成时间"--> <!-- label="订单完成时间"-->
<!-- align="center"--> <!-- align="center"-->
<!-- prop="finishTime"--> <!-- prop="finishTime"-->
<!-- :formatter="dateFormatter"--> <!-- :formatter="dateFormatter"-->
<!-- width="180px"--> <!-- width="180px"-->
<!-- />--> <!-- />-->
<!-- <el-table-column--> <!-- <el-table-column-->
<!-- label="订单取消时间"--> <!-- label="订单取消时间"-->
<!-- align="center"--> <!-- align="center"-->
<!-- prop="cancelTime"--> <!-- prop="cancelTime"-->
<!-- :formatter="dateFormatter"--> <!-- :formatter="dateFormatter"-->
<!-- width="180px"--> <!-- width="180px"-->
<!-- />--> <!-- />-->
<!-- <el-table-column label="备注" align="center" prop="remark" />--> <!-- <el-table-column label="备注" align="center" prop="remark" />-->
<!-- <el-table-column--> <!-- <el-table-column-->
<!-- label="创建时间"--> <!-- label="创建时间"-->
<!-- align="center"--> <!-- align="center"-->
<!-- prop="createTime"--> <!-- prop="createTime"-->
<!-- :formatter="dateFormatter"--> <!-- :formatter="dateFormatter"-->
<!-- width="180px"--> <!-- width="180px"-->
<!-- />--> <!-- />-->
<el-table-column label="操作" align="center" min-width="120px"> <el-table-column label="操作" align="center" min-width="120px">
<template #default="scope"> <template #default="scope">
<el-button <el-button
...@@ -198,6 +207,25 @@ ...@@ -198,6 +207,25 @@
> >
删除 删除
</el-button> </el-button>
<el-button
v-if="scope.row.invoiceStatus === InvoiceRequestEnum.UNINVOICED.type ||
scope.row.invoiceStatus === InvoiceRequestEnum.INVOICING.type"
link
type="warning"
plain
@click="issueInvoice(scope.row)"
>
开票
</el-button>
<el-button
v-if="scope.row.invoiceStatus === InvoiceRequestEnum.INVOICED.type"
link
type="success"
plain
@click="viewInvoice(scope.row)"
>
展示发票
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -211,21 +239,27 @@ ...@@ -211,21 +239,27 @@
</ContentWrap> </ContentWrap>
<!-- 表单弹窗:添加/修改 --> <!-- 表单弹窗:添加/修改 -->
<ApiOrderForm ref="formRef" @success="getList" /> <ApiOrderForm ref="formRef" @success="getList"/>
<OrderIssueInvoiceForm ref="issueInvoiceFormRef" @success="getList"/>
<OrderViewInvoiceForm ref="OrderViewInvoiceFormRef" @success="getList"/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { isEmpty } from '@/utils/is' import {isEmpty} from '@/utils/is'
import { dateFormatter } from '@/utils/formatTime' import {dateFormatter} from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import { ApiOrderApi, ApiOrder } from '@/api/apihub/apiorder' import {ApiOrder, ApiOrderApi} from '@/api/apihub/apiorder'
import ApiOrderForm from './ApiOrderForm.vue' import ApiOrderForm from './ApiOrderForm.vue'
import OrderIssueInvoiceForm from "@/views/apihub/apiorder/OrderIssueInvoiceForm.vue";
import OrderViewInvoiceForm from "@/views/apihub/apiorder/OrderViewInvoiceForm.vue"
import {InvoiceRequestEnum} from "@/utils/constants";
/** api订单 列表 */ /** api订单 列表 */
defineOptions({ name: 'ApiOrder' }) defineOptions({name: 'ApiOrder'})
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化 const {t} = useI18n() // 国际化
const loading = ref(true) // 列表的加载中 const loading = ref(true) // 列表的加载中
const list = ref<ApiOrder[]>([]) // 列表的数据 const list = ref<ApiOrder[]>([]) // 列表的数据
...@@ -276,6 +310,18 @@ const openForm = (type: string, id?: number) => { ...@@ -276,6 +310,18 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id) formRef.value.open(type, id)
} }
/**
* 开票
*/
const issueInvoiceFormRef = ref()
const issueInvoice = (row) => {
issueInvoiceFormRef.value.open(row);
}
const OrderViewInvoiceFormRef = ref()
const viewInvoice = (row) => {
OrderViewInvoiceFormRef.value.open(row)
}
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (id: number) => { const handleDelete = async (id: number) => {
try { try {
...@@ -286,7 +332,8 @@ const handleDelete = async (id: number) => { ...@@ -286,7 +332,8 @@ const handleDelete = async (id: number) => {
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
// 刷新列表 // 刷新列表
await getList() await getList()
} catch {} } catch {
}
} }
/** 批量删除api订单 */ /** 批量删除api订单 */
...@@ -297,7 +344,8 @@ const handleDeleteBatch = async () => { ...@@ -297,7 +344,8 @@ const handleDeleteBatch = async () => {
await ApiOrderApi.deleteApiOrderList(checkedIds.value); await ApiOrderApi.deleteApiOrderList(checkedIds.value);
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
await getList(); await getList();
} catch {} } catch {
}
} }
const checkedIds = ref<number[]>([]) const checkedIds = ref<number[]>([])
......
...@@ -93,18 +93,18 @@ ...@@ -93,18 +93,18 @@
> >
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<!-- <el-table-column label="资讯类别" align="center" prop="category" />--> <!-- <el-table-column label="资讯类别" align="center" prop="category" />-->
<el-table-column label="资讯类别" align="center" prop="category"> <!-- <el-table-column label="资讯类别" align="center" prop="category">-->
<template #default="scope"> <!-- <template #default="scope">-->
<dict-tag :type="DICT_TYPE.HOME_INFO_INFORMATION_CATEGORY" :value="Number(scope.row.category)" /> <!-- <dict-tag :type="DICT_TYPE.HOME_INFO_INFORMATION_CATEGORY" :value="Number(scope.row.category)" />-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<!-- <el-table-column label="行业类别" align="center" prop="industryCategory" />--> <!-- <el-table-column label="行业类别" align="center" prop="industryCategory" />-->
<el-table-column label="行业类别" align="center" prop="industryCategory"> <!-- <el-table-column label="行业类别" align="center" prop="industryCategory">-->
<template #default="scope"> <!-- <template #default="scope">-->
<dict-tag :type="DICT_TYPE.HOME_INFO_INDUSTRY_CATEGORY" :value="Number(scope.row.industryCategory)" /> <!-- <dict-tag :type="DICT_TYPE.HOME_INFO_INDUSTRY_CATEGORY" :value="Number(scope.row.industryCategory)" />-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="标题" align="center" prop="title" /> <el-table-column label="标题" align="center" prop="title" />
<!-- <el-table-column label="描述内容" align="center" prop="description" />--> <!-- <el-table-column label="描述内容" align="center" prop="description" />-->
......
...@@ -249,6 +249,8 @@ ...@@ -249,6 +249,8 @@
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import OrderDeliveryForm from '@/views/mall/trade/order/form/OrderDeliveryForm.vue' import OrderDeliveryForm from '@/views/mall/trade/order/form/OrderDeliveryForm.vue'
import OrderUpdateRemarkForm from '@/views/mall/trade/order/form/OrderUpdateRemarkForm.vue' import OrderUpdateRemarkForm from '@/views/mall/trade/order/form/OrderUpdateRemarkForm.vue'
import OrderIssueInvoiceForm from "@/views/mall/trade/order/form/OrderIssueInvoiceForm.vue";
import OrderViewInvoiceForm from "@/views/mall/trade/order/form/OrderViewInvoiceForm.vue";
import * as TradeOrderApi from '@/api/mall/trade/order' import * as TradeOrderApi from '@/api/mall/trade/order'
import * as PickUpStoreApi from '@/api/mall/trade/delivery/pickUpStore' import * as PickUpStoreApi from '@/api/mall/trade/delivery/pickUpStore'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment