Commit c887e038 by zhuzhequan

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

parents 790a6e55 9ac27630
......@@ -16,6 +16,7 @@ declare module 'vue' {
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
......@@ -54,7 +55,6 @@ declare module 'vue' {
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElUpload: typeof import('element-plus/es')['ElUpload']
......
......@@ -14,6 +14,7 @@
"axios": "^1.6.7",
"bignumber.js": "^9.3.0",
"dayjs": "^1.11.13",
"echarts": "^6.0.0",
"element-plus": "^2.6.0",
"lodash-es": "^4.17.21",
"luxon": "^3.7.1",
......@@ -3635,6 +3636,16 @@
"node": ">= 0.4"
}
},
"node_modules/echarts": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-6.0.0.tgz",
"integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "2.3.0",
"zrender": "6.0.0"
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.157",
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz",
......@@ -6009,6 +6020,12 @@
"typescript": ">=4.2.0"
}
},
"node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
},
"node_modules/type": {
"version": "2.7.3",
"resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz",
......@@ -6848,6 +6865,15 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zrender": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-6.0.0.tgz",
"integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==",
"license": "BSD-3-Clause",
"dependencies": {
"tslib": "2.3.0"
}
}
}
}
......@@ -16,6 +16,7 @@
"axios": "^1.6.7",
"bignumber.js": "^9.3.0",
"dayjs": "^1.11.13",
"echarts": "^6.0.0",
"element-plus": "^2.6.0",
"lodash-es": "^4.17.21",
"luxon": "^3.7.1",
......
......@@ -127,6 +127,7 @@ export function getOrderList(
params: SearchForm,
currentPage: number,
pageSize: number,
orderTracking?: boolean,
) {
return axios.post<never, BasePaginationData<PodCnOrderListData[]>>(
'/factory/podJomallOrderCn/list_page',
......@@ -134,6 +135,7 @@ export function getOrderList(
...params,
currentPage,
pageSize,
orderTracking,
},
)
}
......
......@@ -55,6 +55,7 @@ export function getOrderList(
params: SearchForm,
currentPage: number,
pageSize: number,
orderTracking?: boolean,
) {
return axios.post<never, BasePaginationData<PodUsOrderListData>>(
'/factory/podJomallOrderUs/list_page',
......@@ -62,6 +63,7 @@ export function getOrderList(
...params,
currentPage,
pageSize,
orderTracking,
},
)
}
......@@ -284,11 +286,11 @@ export function clearBoxApi(
},
)
}
export function clearAllBoxApi(warehouseId: string | number,factoryNo: string | number | undefined) {
export function clearAllBoxApi(warehouseId: string | number, factoryNo: string | number | undefined) {
return axios.get<never, BaseRespData<never>>(
'factory/podJomallOrderUs/delPodBoxOrderDetails',
{
params: { warehouseId,factoryNo },
params: { warehouseId, factoryNo },
},
)
}
......
import axios from './axios'
import { BaseRespData } from '@/types/api'
import { statisticData, trendType } from '@/types/api/statistic'
//1、核心数据看板
export function getStatisticData() {
return axios.get<never, BaseRespData<statisticData>>(
'factory/overview/statistic',
)
}
//2、趋势图(订单趋势+24/48发货率图+超时发货率图)
export function trendApi(params: {
timeUnit: string | number
trendType: string
}) {
return axios.post<never, BaseRespData<trendType[]>>(
'/factory/overview/trend',
params,
)
}
......@@ -20,6 +20,7 @@
>
复制店铺单号
</div>
<div v-if="showCopyCount" class="menu-item" @click="onChangeCopy('count')">
统计数量
</div>
......@@ -28,7 +29,7 @@
</template>
<script setup lang="ts">
import { ref, defineExpose, onMounted, onUnmounted } from 'vue'
import { ref, onMounted, onUnmounted } from 'vue'
const visible = ref(false)
const position = ref({ x: 0, y: 0 })
......
export interface statisticData {
todayNewOrderNum: number
todayNewProductNum: number
todayConfirmOrderNum: number
todayConfirmProductNum: number
notShipmentOrderNum: number
overTimeNotShipmentOrderNum: number
yesterdayShipmentOrderNum: number
beforeYesterdayShipmentOrderNum: number
compareYesterdayShipmentOrderNum: number
shipmentRateOf24Hour: number
compareLastDayShipmentRateOf24Hour: number
shipmentRateOf48Hour: number
compareLastDayShipmentRateOf48Hour: number
overTimeShipmentRate: number
compareLastDayOverTimeShipmentRate: number
waitCreateLogisticOrderNum: number
waitArrangeOrderNum: number
producingOrderNum: number
waitShipmentNum: number
blockApplyOrderNum: number
exceptionOrderNum: number
outOfStockOrderNum: number
outOfStock24HourOrderNum: number
outOfStock48HourOrderNum: number
outOfStockOver48HourOrderNum: number
outOfStockSkuNum: number
outOfStockProductNum: number
yesterdayOverTimeShipmentOrderNum: number
}
export interface trendType {
confirmNum: number // 接单数
produceNum: number // 生产数
shipmentNum: number // 发货数
shipmentRateOf24Hour: number // 24小时发货率
shipmentRateOf48Hour: number // 48小时发货率
overtimeShipmentRate: number // 超48小时发货率
overtimeShipmentOrderNum: number // 超时发货单数
startTime: string // 周期开始时间
endTime: string // 周期结束时间
}
......@@ -2,6 +2,8 @@
defineOptions({
name: 'OrderTracking',
})
import { WarningFilled } from '@element-plus/icons-vue'
import LogisticsWaySelect from '../../logistics/components/LogisticsWaySelect.tsx'
import {
factoryWarehouseInfo,
......@@ -75,6 +77,7 @@ const tableColumns = computed(() => {
prop: 'factoryOrderNumber',
width: 160,
align: 'center',
slot: 'factoryOrderNumber',
},
{
label: '第三方订单号',
......@@ -549,6 +552,7 @@ const getOrderListFn = async () => {
},
currentPage,
pageSize,
true,
)
tableData.value = data.records
pagination.value.total = data.total
......@@ -706,6 +710,44 @@ function changeChinaTime(zone: string) {
})
}
const handleRadioGroupClick = (event: Event) => {
const target = event.target as HTMLElement
const radioButton = target.closest('.el-radio-button')
if (radioButton) {
const input = radioButton.querySelector(
'input[type="radio"]',
) as HTMLInputElement
if (input) {
const value = input.value
if (searchForm.value.customizedQuantity === value) {
event.preventDefault()
event.stopPropagation()
searchForm.value.customizedQuantity = ''
}
}
}
}
const handleMultiRadioGroupClick = (event: Event) => {
const target = event.target as HTMLElement
const radioButton = target.closest('.el-radio-button')
if (radioButton) {
const input = radioButton.querySelector(
'input[type="radio"]',
) as HTMLInputElement
if (input) {
const value = input.value === 'true' ? true : false
if (searchForm.value.multi === value) {
event.preventDefault()
event.stopPropagation()
searchForm.value.multi = null
}
}
}
}
const resultConfirm = () => {
search()
loadTabData()
......@@ -796,7 +838,7 @@ onMounted(() => {
clearable
filterable
popper-class="customize-select-style"
style="width: 150px"
style="width: 180px"
>
<ElOption
v-for="(item, index) in platformJson"
......@@ -878,16 +920,27 @@ onMounted(() => {
</ElSelect>
</ElFormItem>
<ElFormItem label="类型">
<ElFormItem
label="印刷"
@click.stop="(e: Event) => handleRadioGroupClick(e)"
>
<el-radio-group v-model="searchForm.customizedQuantity">
<el-radio-button value="single">单面</el-radio-button>
<el-radio-button value="multiple">多面</el-radio-button>
<el-radio-button value="normal">普品</el-radio-button>
</el-radio-group>
</ElFormItem>
<ElFormItem label="数量">
<el-radio-group v-model="searchForm.multi">
<el-radio-button :value="false">单件</el-radio-button>
<el-radio-button :value="true">多件</el-radio-button>
<el-radio-group
v-model="searchForm.multi"
@click.stop="(e: Event) => handleMultiRadioGroupClick(e)"
>
<el-radio-button :value="false" class="radioBtn"
>单件</el-radio-button
>
<el-radio-button :value="true" class="radioBtn"
>多件</el-radio-button
>
</el-radio-group>
</ElFormItem>
<ElFormItem>
......@@ -1087,6 +1140,28 @@ onMounted(() => {
@row-click="rowClick"
@selection-change="handleSelectionChange"
>
<template #factoryOrderNumber="{ row }">
<div style="display: flex; align-items: center">
{{ row.factoryOrderNumber }}
<el-tooltip
effect="light"
content="该订单已拦截"
placement="bottom"
>
<el-icon
v-if="
row.interceptStatus !== null &&
(row.interceptStatus === 1 ||
row.interceptStatus === 3)
"
style="margin-left: 5px; cursor: pointer"
color="#E6A23C"
>
<WarningFilled />
</el-icon>
</el-tooltip>
</div>
</template>
<template #status="{ row }">
<div>{{ getStatus(row.status) }}</div>
</template>
......@@ -1283,12 +1358,9 @@ onMounted(() => {
}
}
}
.search-form {
::v-deep .el-radio-button {
.radioBtn {
::v-deep .el-radio-button__inner {
width: 75px;
.el-radio-button__inner {
width: 100%;
}
}
}
</style>
......@@ -103,8 +103,8 @@
? row.previewImgs
: [{ url: row.variantImage }]"
:key="img"
@click.stop="handleCurrentChange(img.url)"
style="cursor: pointer; margin-right: 5px; flex: 1"
@click.stop="handleCurrentChange(img.url)"
>
<img v-if="img.url" :src="img.url" alt="" />
</div>
......@@ -128,12 +128,30 @@
</span>
<span class="box-top-item-box-index-text">号箱</span>
<span style="font-size: 30px">放入第</span>
<div class="box-top-item-box-index-number">
{{ podOrderDetailsData?.pickingNumber }}
</div>
<span style="font-size: 30px">件商品</span>
<template v-if="pickFlag">
<strong
style="
font-size: 60px;
color: #00ff00;
display: inline-block;
text-align: center;
width: 90px;
"
>
{{ podOrderDetailsData?.pickingNumber }}
</strong>
<span style="font-size: 30px">{{ '件已配齐' }}</span>
</template>
<template v-else>
<span style="font-size: 30px">放入第</span>
<div class="box-top-item-box-index-number">
{{ podOrderDetailsData?.pickingNumber }}
</div>
<span style="font-size: 30px">件商品</span>
</template>
</div>
<div class="box-top-item-status">
<span
v-if="
......@@ -146,7 +164,7 @@
<span v-if="podOrderDetailsData?.printResult">
面单{{ renderPrintResult(podOrderDetailsData?.printResult) }}
</span>
<span v-else>面单打印中。。。</span>
<span v-else>The receipt is being printed。。。</span>
</span>
<span v-else>验货中。。。</span>
</div>
......@@ -401,6 +419,19 @@ watch(
const podBoxIndex = computed(() => orderStore.podBoxIndex)
// 判断订单是否已配齐
const pickFlag = computed(() => {
if (
podOrderDetailsData.value?.productList &&
podOrderDetailsData.value.productList.length > 0
) {
return podOrderDetailsData.value.productList.every((item) => {
return item.power
})
}
return false
})
let renderLock = false
const renderItemBox = (bool: boolean) => {
......@@ -985,6 +1016,9 @@ const handleCurrentChange = (url: string) => {
}
.right-content {
width: 400px;
height: 100%;
display: flex;
flex-direction: column;
}
.basic-info {
display: grid;
......@@ -1073,6 +1107,8 @@ const handleCurrentChange = (url: string) => {
grid-template-columns: repeat(7, 50px);
gap: 8px;
position: relative;
overflow-y: auto;
overflow-x: hidden;
}
.box-list-item {
position: relative;
......
......@@ -167,7 +167,7 @@
v-model.trim="searchForm.thirdSkuCode"
placeholder="库存SKU"
clearable
style="width: 150px"
style="width: 180px"
></ElInput>
</ElFormItem>
<ElFormItem label="款号" v-if="status !== 'BATCH_DOWNLOAD'">
......@@ -229,13 +229,14 @@
<el-option value="asc" label="按创建时间从旧到新"></el-option>
</el-select>
</ElFormItem>
<ElFormItem label="类型" v-if="status !== 'BATCH_DOWNLOAD'">
<ElFormItem label="印刷" v-if="status !== 'BATCH_DOWNLOAD'">
<el-radio-group
v-model="searchForm.customizedQuantity"
@click.stop="(e: Event) => handleRadioGroupClick(e)"
>
<el-radio-button value="single">单面</el-radio-button>
<el-radio-button value="multiple">多面</el-radio-button>
<el-radio-button label="single">单面</el-radio-button>
<el-radio-button label="multiple">多面</el-radio-button>
<el-radio-button label="normal">普品</el-radio-button>
</el-radio-group>
</ElFormItem>
<ElFormItem label="数量" v-if="status !== 'BATCH_DOWNLOAD'">
......@@ -243,8 +244,12 @@
v-model="searchForm.multi"
@click.stop="(e: Event) => handleMultiRadioGroupClick(e)"
>
<el-radio-button :value="false">单件</el-radio-button>
<el-radio-button :value="true">多件</el-radio-button>
<el-radio-button :value="false" class="radioBtn"
>单件</el-radio-button
>
<el-radio-button :value="true" class="radioBtn"
>多件</el-radio-button
>
</el-radio-group>
</ElFormItem>
<ElFormItem v-if="status !== 'BATCH_DOWNLOAD'">
......@@ -372,6 +377,7 @@
></ElOption>
</ElSelect>
</ElFormItem>
<ElFormItem
v-if="searchForm.replaceShipment === 0"
label="物流类型"
......@@ -1171,10 +1177,15 @@
</template>
<template v-else>
<img
:src="item.variantImage"
:src="getNewImageFn(item.variantImage)"
alt="商品图片"
style="cursor: pointer"
@click="handlePictureCardPreview(item.variantImage)"
@click="
handlePictureCardPreview(
item.variantImage,
'variantImage',
)
"
/>
<div class="triangle-container-wrap">
<div class="triangle-container">
......@@ -1653,6 +1664,15 @@
{{ row.prepaidAmount || 0 }}
</span>
</div>
<div
v-if="['COMPLETE'].includes(status)"
class="order-price-item"
>
<span class="order-price-item-label">实际运费¥:</span>
<span class="order-price-item-value">
{{ row.actualAmount || 0 }}
</span>
</div>
<!-- <div
v-if="
['WAIT_TRACK', 'IN_TRANSIT', 'COMPLETE', 'CANCEL'].includes(
......@@ -2302,6 +2322,9 @@
<div class="menu-item" @click="rightChange('order-number')">
复制订单号
</div>
<div class="menu-item" @click="rightChange('factorySubOrderNumber')">
复制生产单号
</div>
</template>
</RightClickMenu>
<el-dialog
......@@ -2879,7 +2902,11 @@ const totalAmountPrice = (item: PodCnOrderListData): string => {
const productAmount = new BigNumber(item?.productAmount ?? 0)
const serviceAmount = new BigNumber(item?.serviceAmount ?? 0)
// const freightAmount = usePrepaid ? item?.prepaidAmount : item?.actualAmount
const actualFreight = new BigNumber(item?.actualAmount ?? 0)
const payFreight = new BigNumber(item?.prepaidAmount ?? 0)
if (item.status === 'COMPLETE') {
return productAmount.plus(serviceAmount).plus(actualFreight).toString()
}
return productAmount.plus(serviceAmount).plus(payFreight).toString()
}
const countryList = ref([])
......@@ -4574,13 +4601,40 @@ const rightChange = async (code: string) => {
} else if (code === 'copy_shopNumber') {
const str = (tableData.value as ProductList[] | PodCnOrderListData[])
.map((item) => item?.shopNumber)
.join()
.filter(Boolean)
.join(',')
if (!str) return ElMessage.warning('当前数据没有店铺单号')
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
} else if (code === 'order-number') {
const str = (tableData.value as ProductList[] | PodCnOrderListData[])
.map((item) => item?.factoryOrderNumber)
.join()
.filter(Boolean)
.join(',')
if (!str) return ElMessage.warning('当前数据没有订单号')
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
} else if (code === 'factorySubOrderNumber') {
let str
if (flat) {
str = (tableData.value as (ProductList | PodCnOrderListData)[])
.flatMap(
(item) =>
(item as PodCnOrderListData)?.productList
?.map((product) => product.factorySubOrderNumber)
?.filter(Boolean) ?? [],
)
.filter(Boolean)
.join(',')
} else {
str = (tableData.value as ProductList[])
.map((item) => item?.factorySubOrderNumber)
.filter(Boolean)
.join(',')
}
if (!str) return ElMessage.warning('当前数据没有生产单号')
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
}
......@@ -5741,8 +5795,11 @@ const handleMark = (mark: string) => {
const dialogVisible = ref(false)
const dialogImageUrl = ref('')
const handlePictureCardPreview = (fileUrl: string) => {
const handlePictureCardPreview = (fileUrl: string, type?: string) => {
dialogImageUrl.value = fileUrl
if (type == 'variantImage')
dialogImageUrl.value = getNewImageFn(fileUrl) as string
dialogVisible.value = true
}
// 全局 loading 改为每行 loading map
......@@ -5775,6 +5832,16 @@ const handleStockOut = async (row: PodCnOrderListData) => {
})
}
const getNewImageFn = (img: string) => {
try {
if (img.startsWith('http')) return img
if (img.startsWith('/')) return `https://img.jomalls.com/upload/erp${img}`
return `https://image.jomalls.com/${img}`
} catch (error) {
console.log(error)
}
}
useRouter().beforeEach((to, from, next) => {
handleBeforeRouteLeave(to, from, next)
})
......@@ -6173,14 +6240,14 @@ useEnterKeyTrigger({
color: white;
font-weight: bold;
}
.search-form {
::v-deep .el-radio-button {
width: 75px;
.el-radio-button__inner {
width: 100%;
}
}
}
// .search-form {
// ::v-deep .el-radio-button {
// width: 75px;
// .el-radio-button__inner {
// width: 100%;
// }
// }
// }
.triangle-container-wrap {
position: absolute;
top: 0;
......@@ -6209,6 +6276,11 @@ useEnterKeyTrigger({
font-size: 12px;
}
}
.radioBtn {
::v-deep .el-radio-button__inner {
width: 75px;
}
}
</style>
<style lang="scss">
.customize-select-style {
......
......@@ -132,7 +132,7 @@
<LogisticsWaySelect
v-model="searchForm.craftCode"
:company-list="craftList"
:start-width="'178px'"
:start-width="'150px'"
search-placeholder="搜索工艺名称"
start-placeholder="请选择工艺名称"
></LogisticsWaySelect>
......@@ -142,7 +142,7 @@
v-model.trim="searchForm.thirdSkuCode"
placeholder="库存SKU"
clearable
style="width: 150px"
style="width: 180px"
></ElInput>
</ElFormItem>
<ElFormItem label="款号" v-if="status !== 'BATCH_DOWNLOAD'">
......@@ -219,7 +219,7 @@
</ElSelect>
</ElFormItem>
<!-- </div> -->
<ElFormItem label="类型" v-if="status !== 'BATCH_DOWNLOAD'">
<ElFormItem label="印刷" v-if="status !== 'BATCH_DOWNLOAD'">
<el-radio-group
v-model="searchForm.customizedQuantity"
@click.stop="(e: Event) => handleRadioGroupClick(e)"
......@@ -234,8 +234,12 @@
v-model="searchForm.multi"
@click.stop="(e: Event) => handleMultiRadioGroupClick(e)"
>
<el-radio-button :label="false">单件</el-radio-button>
<el-radio-button :label="true">多件</el-radio-button>
<el-radio-button :label="false" class="radioBtn"
>单件</el-radio-button
>
<el-radio-button :label="true" class="radioBtn"
>多件</el-radio-button
>
</el-radio-group>
</ElFormItem>
<ElFormItem>
......@@ -1256,10 +1260,15 @@
</template>
<template v-else>
<img
:src="item.variantImage"
:src="getNewImageFn(item.variantImage)"
alt="商品图片"
style="cursor: pointer"
@click="handlePictureCardPreview(item.variantImage)"
@click="
handlePictureCardPreview(
item.variantImage,
'variantImage',
)
"
/>
<div class="triangle-container-wrap">
<div class="triangle-container">
......@@ -1583,9 +1592,9 @@
</div>
<div
v-if="
(status === 'WAIT_SHIPMENT' &&
item.productMark === 'custom_normal') ||
item.productMark === 'normal'
status === 'WAIT_SHIPMENT' &&
(item.productMark === 'custom_normal' ||
item.productMark === 'normal')
"
style="
display: flex;
......@@ -2548,6 +2557,9 @@
<div class="menu-item" @click="rightChange('order-number')">
复制订单号
</div>
<div class="menu-item" @click="rightChange('factorySubOrderNumber')">
复制生产单号
</div>
</template>
</RightClickMenu>
<el-dialog
......@@ -5184,13 +5196,38 @@ const rightChange = async (code: string) => {
} else if (code === 'copy_shopNumber') {
const str = (tableData.value as ProductList[] | PodUsOrderListData[])
.map((item) => item?.shopNumber)
.join()
.filter(Boolean)
.join(',')
if (!str) return ElMessage.warning('当前数据没有店铺单号')
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
} else if (code === 'order-number') {
const str = (tableData.value as ProductList[] | PodUsOrderListData[])
.map((item) => item?.factoryOrderNumber)
.join()
.filter(Boolean)
.join(',')
if (!str) return ElMessage.warning('当前数据没有订单号')
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
} else if (code === 'factorySubOrderNumber') {
let str
if (flat) {
str = (tableData.value as (ProductList | PodUsOrderListData)[])
.flatMap(
(item) =>
(item as PodUsOrderListData)?.productList
?.map((product) => product.factorySubOrderNumber)
?.filter(Boolean) ?? [],
)
.filter(Boolean)
.join(',')
} else {
str = (tableData.value as ProductList[])
.map((item) => item?.factorySubOrderNumber)
.filter(Boolean)
.join(',')
}
if (!str) return ElMessage.warning('当前数据没有生产单号')
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
}
......@@ -6539,8 +6576,11 @@ function getQuantityText(qty: number) {
const dialogVisible = ref(false)
const dialogImageUrl = ref('')
const handlePictureCardPreview = (fileUrl: string) => {
const handlePictureCardPreview = (fileUrl: string, type?: string) => {
dialogImageUrl.value = fileUrl
if (type == 'variantImage')
dialogImageUrl.value = getNewImageFn(fileUrl) as string
dialogVisible.value = true
}
// 全局 loading 改为每行 loading map
......@@ -6781,6 +6821,16 @@ const globalProperties =
getCurrentInstance()?.appContext.config.globalProperties // 获取全局挂载
const isPermissionBtn = globalProperties?.$isPermissionBtn
const getNewImageFn = (img: string) => {
try {
if (img.startsWith('http')) return img
if (img.startsWith('/')) return `https://img.jomalls.com/upload/erp${img}`
return `https://image.jomalls.com/${img}`
} catch (error) {
console.log(error)
}
}
useRouter().beforeEach((to, from, next) => {
handleBeforeRouteLeave(to, from, next)
})
......@@ -7224,6 +7274,11 @@ const printNormal = async () => {
font-size: 12px;
}
}
.radioBtn {
::v-deep .el-radio-button__inner {
width: 75px;
}
}
</style>
<style lang="scss">
.customize-select-style {
......
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 to comment