This commit is contained in:
oneao committed 2025-10-10 16:46:03 +08:00
1 parent 18a0a81c20
commit 5bc05923f2
28 files changed
+834 -237

No files matched your search

@@ -19,7 +19,7 @@ onHide(() => {
<style>
page {
background-color: #fcfbfe;
background-color: #f7f7f8;
}
</style>
@@ -1,6 +1,6 @@
import { createSSRApp } from 'vue'
import App from './App.vue'
import { routeInterceptor } from './interceptor/router'
import { routeInterceptor } from './router/interceptor'
import store from './store'
import '@/style/index.scss'
@@ -1,5 +1,5 @@
{
"name": "BASE-UNIAPP",
"name": "App",
"appid": "__UNI__871096C",
"description": "",
"versionName": "1.0.0",
@@ -3,7 +3,6 @@ import type { UploadFile, UploadFileItem } from 'sard-uniapp'
import { isImageUrl, isVideoUrl, toast } from 'sard-uniapp'
import { aliyunpluploadApi, delSubRecordApi, searchdataApi } from '@/request/api'
import { downloadFile, formatFileSize, imageCompress, isImage, uploadFileToAliyun } from '@/utils/file'
import { isH5 } from '@/utils/platform'
const fileList = ref<UploadFileItem[]>([])
@@ -50,8 +49,9 @@ async function loadFileData() {
}
function onItemClick(fileItem: UploadFileItem) {
console.log(fileItem)
if (!isImageUrl(fileItem.mx_mapfilename) && !isVideoUrl(fileItem.mx_mapfilename)) {
downloadFile(fileItem.mx_mapfilename)
downloadFile(fileItem.mx_mapfilename,fileItem.name)
}
}
@@ -94,58 +94,52 @@ function onSubmit() {
<view class="form-list">
<sar-form-item-plain name="orgid">
<template #custom="{ fieldId }">
<view class="form-label" :class="fieldId">
<text>机构码</text>
</view>
<view class="form-input">
<sar-input
v-model="formModel.orgid"
placeholder="请输入机构码"
clearable
>
<template #prepend>
<sar-icon family="iconfont" name="company" size="36rpx" />
</template>
</sar-input>
</view>
</template>
<view class="form-label">
<text>机构码</text>
</view>
<view class="form-input">
<sar-input
v-model="formModel.orgid"
placeholder="请输入机构码"
clearable
>
<template #prepend>
<sar-icon family="iconfont" name="company" size="36rpx" />
</template>
</sar-input>
</view>
</sar-form-item-plain>
<sar-form-item-plain name="userid">
<template #custom="{ fieldId }">
<view class="form-label" :class="fieldId">
账号
</view>
<view class="form-input">
<sar-input
v-model="formModel.userid"
placeholder="请输入账号"
clearable
>
<template #prepend>
<sar-icon family="iconfont" name="user" size="36rpx" />
</template>
</sar-input>
</view>
</template>
<view class="form-label">
账号
</view>
<view class="form-input">
<sar-input
v-model="formModel.userid"
placeholder="请输入账号"
clearable
>
<template #prepend>
<sar-icon family="iconfont" name="user" size="36rpx" />
</template>
</sar-input>
</view>
</sar-form-item-plain>
<sar-form-item-plain name="password">
<template #custom="{ fieldId }">
<view class="form-label" :class="fieldId">
密码
</view>
<view class="form-input">
<sar-input
v-model="formModel.password"
placeholder="请输入密码"
clearable
>
<template #prepend>
<sar-icon family="iconfont" name="lock" size="36rpx" />
</template>
</sar-input>
</view>
</template>
<view class="form-label">
密码
</view>
<view class="form-input">
<sar-input
v-model="formModel.password"
placeholder="请输入密码"
clearable
>
<template #prepend>
<sar-icon family="iconfont" name="lock" size="36rpx" />
</template>
</sar-input>
</view>
</sar-form-item-plain>
</view>
@@ -1,9 +1,12 @@
<script setup lang="ts">
import { toast } from 'sard-uniapp'
import { ref } from 'vue'
import { searchdatapageindexApi } from '@/request/api'
import { saveobjtApi, searchdatapageindexApi } from '@/request/api'
import { useUserStore } from '@/store'
import { useCounts } from '@/store/counts'
import { getCurrentDateTimeWithSeconds } from '@/utils/time'
const { taskCounts } = useCounts()
const userStore = useUserStore()
const pagingRef = ref<any>(null)
@@ -11,15 +14,30 @@ const dataList = ref<any[]>([])
// 自定义 tabs
const tabList = computed(() => [
{ name: '未完成', count: 0 },
{ name: '已完成', count: 0 },
{ name: '全部', count: 0 },
{ name: '未完成', count: taskCounts.yx.todo },
{ name: '已完成', count: taskCounts.yx.finished },
{ name: '全部', count: taskCounts.yx.total },
])
const activeTab = ref(tabList.value[0])
// 搜索关键字
const searchValue = ref('')
const confirmDialogVisible = ref(false)
const confirmFormRef = ref()
const confirmFormModel = ref<any>({})
const bconkzOptions = ref([
{
value: '空箱',
label: '空箱',
},
{
value: '重箱',
label: '重箱',
},
])
// 切换 tab
function switchTab(tab: any) {
activeTab.value = tab
@@ -38,19 +56,19 @@ function queryList(pageNo: number, pageSize: number) {
const userid = userStore.userInfo.userid
let searchcondition = `2>1 AND b_kd_finish = '1' AND b_yx_finish = '1' `
let searchcondition = `2>1 AND b_kd_finish = '1' `
if (activeTab.value.name === '未完成') {
searchcondition += ` AND ISNULL(b_dc_finish,'') <> '1' AND ISNULL(b_dcman_id,'') IN ('', '${userid}')`
searchcondition += ` AND ISNULL(b_yx_finish,'') <> '1' AND ISNULL(b_yxman_id,'') IN ('', '${userid}')`
}
else if (activeTab.value.name === '已完成') {
searchcondition += ` AND ISNULL(b_dc_finish,'') = '1' AND ISNULL(b_dcman_id,'') = '${userid}'`
searchcondition += ` AND ISNULL(b_yx_finish,'') = '1' AND ISNULL(b_yxman_id,'') = '${userid}'`
}
else {
searchcondition += ` AND (
(ISNULL(b_dc_finish,'') <> '1' AND ISNULL(b_dcman_id,'') IN ('', '${userid}'))
OR (ISNULL(b_dc_finish,'') = '1' AND ISNULL(b_dcman_id,'') = '${userid}')
)`
(ISNULL(b_yx_finish,'') <> '1' AND ISNULL(b_yxman_id,'') IN ('', '${userid}'))
OR (ISNULL(b_yx_finish,'') = '1' AND ISNULL(b_yxman_id,'') = '${userid}')
)`
}
if (searchValue.value) {
@@ -67,7 +85,14 @@ function queryList(pageNo: number, pageSize: number) {
})
.then((res) => {
const rows = res.data.rows || []
pagingRef.value.complete(rows)
if (rows) {
pagingRef.value.complete(rows)
}
if (activeTab.value.name === '未完成' && res.data.total) {
taskCounts.yx.todo = res.data.total
}
})
.finally(() => {
toast.hide()
@@ -79,9 +104,190 @@ function handleToFile(itemData) {
url: `/pages-sub/file/index?moduleid=xc_conyard_in&father=${itemData.b_id}&cateid=014&edit=1`,
})
}
function showConfirmDialog(itemData: any) {
confirmFormModel.value = JSON.parse(JSON.stringify(itemData))
confirmDialogVisible.value = true
}
async function handleConfirmDialogBeforeClose(type: string) {
if (type !== 'confirm') {
return
}
try {
await confirmFormRef.value?.validate()
}
catch {
return Promise.reject()
}
if (confirmFormModel.value.b_kd_finish !== '1') {
toast.fail('尚未开票,请先开票')
return Promise.reject()
}
if (confirmFormModel.value.b_yx_finish !== '1') {
toast.fail('请先验箱')
return Promise.reject()
}
const obj: any = {
b_id: confirmFormModel.value.b_id,
b_yx_finishdate: getCurrentDateTimeWithSeconds(),
b_yxman_id: userStore.userInfo.userid,
b_yx_finish: '1',
b_conno: confirmFormModel.value.b_conno,
b_conkz: confirmFormModel.value.b_conkz,
b_contype: confirmFormModel.value.b_contype,
b_constate: confirmFormModel.value.b_constate,
b_conxk: confirmFormModel.value.b_conxk,
}
const strmainvalue = `[${JSON.stringify(obj)}]`
const res = await saveobjtApi({
tables: '[xc_consite_in]',
insertValues: '[]',
delValues: '[]',
updateValues: strmainvalue,
keys: '[b_id]',
})
if (res?.data !== 'OK') {
toast.fail(`堆高机验证失败:${res.data}`)
return Promise.reject()
}
const idx = dataList.value.findIndex(i => i.b_id === confirmFormModel.value.b_id)
if (idx !== -1) {
if (activeTab.value.name === '未完成') {
dataList.value.splice(idx, 1)
}
else {
Object.assign(dataList.value[idx], obj)
}
}
if (taskCounts.yx.todo > 0) {
taskCounts.yx.todo -= 1
taskCounts.yx.total -= 1
}
toast.success('验箱成功')
}
function handleConfirmDialogAfterLeave() {
confirmFormModel.value = {}
}
</script>
<template>
<sar-dialog
v-model:visible="confirmDialogVisible"
popup-style="top: 50%"
title="验箱表单"
:confirm-props="{
size: 'small',
theme: 'success',
square: true,
}"
:cancel-props="{
size: 'small',
square: true,
}"
:before-close="handleConfirmDialogBeforeClose"
:after-leave="handleConfirmDialogAfterLeave"
>
<scroll-view
style="max-height: 60vh; margin-top: 1px; margin-bottom: 16rpx"
scroll-y
>
<sar-form ref="confirmFormRef" :model="confirmFormModel" label-width="150rpx" label-align="end">
<sar-form-item
name="b_conno"
label="箱号"
:rules="[{ required: true }]"
>
<sar-input
v-model="confirmFormModel.b_conno"
inlaid
/>
</sar-form-item>
<sar-form-item
name="b_id"
label="进场单号"
>
<sar-input
v-model="confirmFormModel.b_id"
inlaid
readonly
/>
</sar-form-item>
<sar-form-item
name="b_contype"
label="箱型"
>
<picker-select-input
v-model:label="confirmFormModel.b_contype"
v-model:value="confirmFormModel.b_contype"
viewname="b_con_type"
label-field="b_name"
value-field="b_name"
field1="b_name"
field2="b_id"
placeholder="请选择箱型"
/>
</sar-form-item>
<sar-form-item
name="b_conkz"
label="空箱重"
>
<sar-picker-input
v-model="confirmFormModel.b_conkz"
title="请选择空箱重"
placeholder="请选择空箱重"
clearable
:columns="bconkzOptions"
/>
</sar-form-item>
<sar-form-item
name="b_constate"
label="箱态"
>
<picker-select-input
v-model:label="confirmFormModel.b_constate"
v-model:value="confirmFormModel.b_constate"
viewname="b_constate"
label-field="b_name"
value-field="b_name"
field1="b_name"
field2="b_id"
placeholder="请选择箱态"
/>
</sar-form-item>
<sar-form-item
name="b_conxk"
label="箱况"
>
<picker-select-input
v-model:label="confirmFormModel.b_conxk"
v-model:value="confirmFormModel.b_conxk"
viewname="b_conxk"
label-field="b_name"
value-field="b_name"
field1="b_name"
field2="b_id"
placeholder="请选择箱况"
/>
</sar-form-item>
</sar-form>
</scroll-view>
</sar-dialog>
<view>
<z-paging ref="pagingRef" v-model="dataList" @query="queryList">
<template #top>
@@ -99,9 +305,13 @@ function handleToFile(itemData) {
:class="{ 'tabs__item--active': activeTab.name === tab.name }"
@click="switchTab(tab)"
>
<sar-badge :value="tab.count">
<sar-badge v-if="tab.count > 0" :value="tab.count">
{{ tab.name }}
</sar-badge>
<text v-else>
{{ tab.name }}
</text>
</view>
</view>
</template>
@@ -117,10 +327,10 @@ function handleToFile(itemData) {
箱号:{{ item.b_conno }}
</view>
<view class="list-item__extra">
<sar-tag v-if="item.b_dc_finish === '1'" theme="success" size="small">
<sar-tag v-if="item.b_yx_finish === '1'" theme="success" size="small">
已完成
</sar-tag>
<sar-tag v-else>
<sar-tag v-else theme="secondary">
未完成
</sar-tag>
</view>
@@ -138,6 +348,8 @@ function handleToFile(itemData) {
</view>
</view>
</sar-col>
</sar-row>
<sar-row>
<sar-col :span="12">
<view class="list-item__info">
<view class="list-item__label">
@@ -148,6 +360,8 @@ function handleToFile(itemData) {
</view>
</view>
</sar-col>
</sar-row>
<sar-row>
<sar-col :span="6">
<view class="list-item__info">
<view class="list-item__label">
@@ -168,6 +382,8 @@ function handleToFile(itemData) {
</view>
</view>
</sar-col>
</sar-row>
<sar-row>
<sar-col :span="6">
<view class="list-item__info">
<view class="list-item__label">
@@ -188,16 +404,6 @@ function handleToFile(itemData) {
</view>
</view>
</sar-col>
<sar-col :span="6">
<view class="list-item__info">
<view class="list-item__label">
箱位:
</view>
<view class="list-item__value">
{{ item.b_xwt }}
</view>
</view>
</sar-col>
</sar-row>
</view>
@@ -206,12 +412,13 @@ function handleToFile(itemData) {
拍照
</sar-button>
<sar-button
v-if="item.b_dc_finish !== '1'"
v-if="item.b_yx_finish !== '1'"
inline
square
type="default"
theme="success"
size="mini"
@click="showConfirmDialog(item)"
>
确认
</sar-button>
@@ -263,13 +470,16 @@ function handleToFile(itemData) {
}
.list-item__body {
padding: 24rpx 0rpx;
display: flex;
flex-direction: column;
@include flexGap(16rpx, 'column');
.list-item__info {
display: flex;
align-items: start;
width: 100%;
font-size: 26rpx;
line-height: 1;
margin-top: 16rpx;
.list-item__label {
display: block;
@@ -288,7 +498,6 @@ function handleToFile(itemData) {
}
.list-item__footer {
margin-top: 16rpx;
display: flex;
justify-content: flex-end;
@include flexGap(36rpx, '');
@@ -2,7 +2,7 @@
"globalStyle": {
"navigationStyle": "default",
"navigationBarTitleText": "App",
"navigationBarBackgroundColor": "#2c3e50",
"navigationBarBackgroundColor": "#34495E",
"navigationBarTextStyle": "white",
"backgroundColor": "#FFFFFF"
},
@@ -15,8 +15,8 @@
},
"tabBar": {
"color": "#A0A3A6",
"selectedColor": "#026bff",
"backgroundColor": "#F8F8F8",
"selectedColor": "#34495e",
"backgroundColor": "#ffffff",
"borderStyle": "white",
"height": "50px",
"fontSize": "10px",
@@ -82,9 +82,9 @@
}
},
{
"path": "xcjin/index",
"path": "yx/index",
"style": {
"navigationBarTitleText": "进场堆高机",
"navigationBarTitleText": "验箱",
"navigationStyle": "default"
}
}
@@ -1,5 +1,10 @@
<script setup lang="ts">
import { ref } from 'vue'
import { loaddatabysqlApi } from '@/request/api'
import { useUserStore } from '@/store'
import { useCounts } from '@/store/counts'
const { taskCounts } = useCounts()
const userStore = useUserStore()
const swiperCurrent = ref(0)
const swiperList = [
@@ -8,6 +13,58 @@ const swiperList = [
{},
]
onShow(() => {
if (!userStore.isLogined) {
return
}
loaddatabysqlApi({
sql: `
SELECT COUNT(*) AS total
FROM v_xc_conyard_in
WHERE b_kd_finish = '1'
AND ISNULL(b_yx_finish, '') <> '1'
AND ISNULL(b_yxman_id, '') IN ('', '${userStore.userInfo.userid}');
`,
orderfield: '',
soption: '',
}).then((res) => {
if (res.data.length > 0) {
taskCounts.yx.todo = res.data[0].total || 0
}
})
loaddatabysqlApi({
sql: `
SELECT COUNT(*) as total
FROM v_xc_conyard_in
WHERE b_yx_finish = '1'
AND ISNULL(b_dc_finish, '') <> '1'
AND ISNULL(b_dcman_id, '') IN ('', '${userStore.userInfo.userid}')
`,
orderfield: '',
soption: '',
}).then((res) => {
if (res.data.length > 0) {
taskCounts.xcjin.todo = res.data[0].total || 0
}
})
loaddatabysqlApi({
sql: `
SELECT COUNT(*) as total
FROM v_xc_conyard_out
WHERE b_kd_finish = '1' AND ISNULL(b_dc_finish, '') <> '1'
AND ISNULL(b_dcman_id, '') IN ('', '${userStore.userInfo.userid}')
`,
orderfield: '',
soption: '',
}).then((res) => {
if (res.data.length > 0) {
taskCounts.xcchu.todo = res.data[0].total || 0
}
})
})
function toLinkUrl(url) {
if (!url) {
return
@@ -30,19 +87,19 @@ function toLinkUrl(url) {
>
<swiper-item>
<image
src="@/static/images/800x400.png"
src="@/static/images/bg.jpg"
style="width: 100%;height:100%"
/>
</swiper-item>
<swiper-item>
<image
src="@/static/images/800x400.png"
src="@/static/images/bg1.jpg"
style="width: 100%;height:100%"
/>
</swiper-item>
<swiper-item>
<image
src="@/static/images/800x400.png"
src="@/static/images/bg2.jpg"
style="width: 100%;height:100%"
/>
</swiper-item>
@@ -53,38 +110,46 @@ function toLinkUrl(url) {
/>
</view>
<view class="grid-container">
<sar-grid :columns="2" gap="20rpx">
<sar-grid :columns="2" gap="16rpx">
<sar-grid-item
text="装箱"
text="验箱"
icon="image"
:root-style="{
flex: '0 0 100%',
width: '100%',
}"
:badge="taskCounts.yx.todo"
:badge-props="{
color: `#E74C3C`,
}"
@click="toLinkUrl('/pages-sub/yx/index')"
>
<view class="grid-item">
<image src="@/static/images/柴犬.png" />
<text>内容</text>
<sar-icon family="iconfont" name="jiaoyan" size="128rpx" color="#fff" />
<text>验箱</text>
</view>
</sar-grid-item>
<sar-grid-item>
<sar-grid-item
:badge="taskCounts.xcjin.todo"
:badge-props="{
color: `#E74C3C`,
}"
@click="toLinkUrl('/pages-sub/xcjin/index')"
>
<view class="grid-item">
<image src="@/static/images/柴犬.png" />
<text>内容</text>
</view>
</sar-grid-item>
<sar-grid-item>
<view class="grid-item">
<image src="@/static/images/柴犬.png" />
<text>内容</text>
</view>
</sar-grid-item>
<sar-grid-item @click="toLinkUrl('/pages-sub/xcjin/index')">
<view class="grid-item">
<image src="@/static/images/柴犬.png" />
<sar-icon family="iconfont" name="jin" size="128rpx" color="#fff" />
<text>进场堆高机</text>
</view>
</sar-grid-item>
<sar-grid-item
:badge="taskCounts.xcchu.todo"
@click="toLinkUrl('/pages-sub/xcchu/index')"
>
<view class="grid-item">
<sar-icon family="iconfont" name="chu" size="128rpx" color="#fff" />
<text>出场堆高机</text>
</view>
</sar-grid-item>
</sar-grid>
</view>
</view>
@@ -99,23 +164,34 @@ function toLinkUrl(url) {
}
}
.grid-container {
margin-top: 32rpx;
padding-top: 32rpx;
:deep(.sar-grid__content) {
background-color: var(--sar-primary);
}
:deep(.sar-grid) {
row-gap: 0 !important;
}
:deep(.sar-grid__item) {
margin-bottom: 16rpx;
}
:deep(.sar-badge) {
width: 42rpx;
height: 42rpx;
}
.grid-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 28rpx;
font-size: 32rpx;
image {
width: 128rpx;
height: 128rpx;
}
text {
margin-top: 16rpx;
font-weight: bold;
font-weight: 500;
color: #fff;
}
}
@@ -81,16 +81,16 @@ export function delSubRecordApi(params: DelSubRecordParams) {
return request.postForm('/DelSubRecord.jsp', params)
}
interface getaliyunkeyParams {
interface GetaliyunkeyParams {
orgid: string
bucket: string
}
export function getaliyunkeyApi(params: getaliyunkeyParams) {
export function getaliyunkeyApi(params: GetaliyunkeyParams) {
return request.postForm(`/getaliyunkey.jsp`, params)
}
interface aliyunpluploadParams {
interface AliyunpluploadParams {
despathfile: string
myfilename: string
size: string
@@ -99,6 +99,15 @@ interface aliyunpluploadParams {
mx_moduleid: string
mx_cate_id: string
}
export function aliyunpluploadApi(params: aliyunpluploadParams) {
export function aliyunpluploadApi(params: AliyunpluploadParams) {
return request.postForm(`/aliyunplupload.jsp`, params)
}
interface LoaddatabysqlParams {
sql: string
orderfield: string
soption: string
}
export function loaddatabysqlApi(params: LoaddatabysqlParams) {
return request.postForm('/loaddatabysql.jsp', params)
}
@@ -1,7 +1,7 @@
import { useUserStore } from '@/store'
const whiteList = [
'/pages-sub/login/index'
'/pages-sub/login/index',
]
export const navigateToInterceptor = {
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

@@ -0,0 +1,24 @@
// 全局任务数量统计
const taskCounts = reactive({
yx: {
todo: 0,
finished: 0,
total: 0,
},
xcjin: {
todo: 0,
finished: 0,
total: 0,
},
xcchu: {
todo: 0,
finished: 0,
total: 0,
},
})
export function useCounts() {
return {
taskCounts,
}
}
@@ -1,6 +1,6 @@
@font-face {
font-family: 'iconfont'; /* Project id 5031675 */
src: url('data:font/ttf;charset=utf-8;base64,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 truncated
src: url('data:font/ttf;charset=utf-8;base64,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 truncated
format('truetype');
}
@@ -12,6 +12,18 @@
-moz-osx-font-smoothing: grayscale;
}
.iconfont-jin:before {
content: '\e617';
}
.iconfont-chu:before {
content: '\e629';
}
.iconfont-jiaoyan:before {
content: '\e708';
}
.iconfont-updatePassword:before {
content: '\e628';
}
@@ -1,12 +1,16 @@
@import 'sard-uniapp/index.scss';
@import './iconfont.css';
@import './mixins.scss';
page,
.sar-portal {
--sar-input-border-color: #ddd;
--sar-primary: #34495E;
--sar-primary: #34495e;
--sar-rounded: 4rpx;
}
.sar-upload__wrapper {
gap: 0rpx !important;
@include flexGap(16rpx, '');
}
.picker-select__pagination-root {
width: 100%;
@@ -206,6 +206,9 @@ export function downloadFile(fileUrl: string, fileName?: string) {
/** =================== H5 下载 =================== */
async function downloadH5(fileUrl: string, fileName: string) {
try {
console.log(fileUrl)
console.log(fileName)
const response = await fetch(fileUrl, { mode: 'cors' })
if (!response.ok)
throw new Error(`下载失败: ${response.status}`)