u
No files matched your search
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"Print Vue3 SFC": {
|
||||
"scope": "vue",
|
||||
"prefix": "v3",
|
||||
"body": [
|
||||
"<script lang=\"ts\" setup>",
|
||||
"",
|
||||
"</script>\n",
|
||||
"<template>",
|
||||
" <view class=\"\">$1</view>",
|
||||
"</template>\n",
|
||||
"<style lang=\"scss\" scoped>",
|
||||
"",
|
||||
"</style>\n"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -17,5 +17,6 @@ export default antfu({
|
||||
|
||||
rules: {
|
||||
'no-console': 'off', // 允许 console.log 不报错
|
||||
"prefer-promise-reject-errors": "off"
|
||||
},
|
||||
})
|
||||
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="/public/logo.png" type="image/x-icon" />
|
||||
<script>
|
||||
const coverSupport =
|
||||
'CSS' in window &&
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"dayjs": "^1.11.18",
|
||||
"pinia": "^3.0.3",
|
||||
"pinia-plugin-persistedstate": "^4.5.0",
|
||||
"sard-uniapp": "^1.24.6",
|
||||
"sard-uniapp": "^1.24.7",
|
||||
"vue": "^3.5.21",
|
||||
"z-paging": "^2.8.8"
|
||||
},
|
||||
|
||||
@@ -69,8 +69,8 @@ importers:
|
||||
specifier: ^4.5.0
|
||||
version: 4.5.0(pinia@3.0.3(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)))
|
||||
sard-uniapp:
|
||||
specifier: ^1.24.6
|
||||
version: 1.24.6(@dcloudio/types@3.4.21)(vue@3.5.22(typescript@5.8.3))
|
||||
specifier: ^1.24.7
|
||||
version: 1.24.7(@dcloudio/types@3.4.21)(vue@3.5.22(typescript@5.8.3))
|
||||
vue:
|
||||
specifier: ^3.5.21
|
||||
version: 3.5.22(typescript@5.8.3)
|
||||
@@ -4621,8 +4621,8 @@ packages:
|
||||
safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
|
||||
sard-uniapp@1.24.6:
|
||||
resolution: {integrity: sha512-T8TK4cPlVlcm7K57niQurRC6KdjkmjyE3a+RUoGnPR8t32Sim7F7kApATR4NewTZt6pGscuEaC/pcHx1cxvJoQ==}
|
||||
sard-uniapp@1.24.7:
|
||||
resolution: {integrity: sha512-QXk/zWH5j62VOUsaf8mSk0i8k/OMkUoSIqOTmxb7vpC+UpiJ5Uwypayb9HarlgStXpqIc3HmTOIG+2cNo+yFCA==}
|
||||
engines: {HBuilderX: ^3.6.0, uni-app: ^4.11, uni-app-x: ''}
|
||||
peerDependencies:
|
||||
'@dcloudio/types': ^3.4.8
|
||||
@@ -11078,7 +11078,7 @@ snapshots:
|
||||
|
||||
safer-buffer@2.1.2: {}
|
||||
|
||||
sard-uniapp@1.24.6(@dcloudio/types@3.4.21)(vue@3.5.22(typescript@5.8.3)):
|
||||
sard-uniapp@1.24.7(@dcloudio/types@3.4.21)(vue@3.5.22(typescript@5.8.3)):
|
||||
dependencies:
|
||||
'@dcloudio/types': 3.4.21
|
||||
vue: 3.5.22(typescript@5.8.3)
|
||||
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -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 = {
|
||||
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 4.3 KiB |
|
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,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI8FUtYAAABjAAAAGBjbWFwP5hu8AAAAggAAAHeZ2x5ZlGqgqUAAAP4AAALSGhlYWQtOK1iAAAA4AAAADZoaGVhB94DiAAAALwAAAAkaG10eBwAAAAAAAHsAAAAHGxvY2EKnAt+AAAD6AAAABBtYXhwASwCvgAAARgAAAAgbmFtZRCjPLAAAA9AAAACZ3Bvc3ScCFivAAARqAAAAGcAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAcAAQAAAAEAAG9opn9fDzz1AAsEAAAAAADlDLS8AAAAAOUMtLwAAP+DBAADagAAAAgAAgAAAAAAAAABAAAABwKyABsAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQEAAGQAAUAAAKJAswAAACPAokCzAAAAesAMgEIAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOYA6IgDgP+AAAAD3ACAAAAAAQAAAAAAAAAAAAAAAAACBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAUAAAADAAAALAAAAAQAAAGGAAEAAAAAAIAAAwABAAAALAADAAoAAAGGAAQAVAAAAA4ACAACAAbmAOYo5kfmsehf6Ij//wAA5gDmKOZH5rHoX+iI//8AAAAAAAAAAAAAAAAAAQAOAA4ADgAOAA4ADgAAAAIAAQADAAQABQAGAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAABYAAAAAAAAAAYAAOYAAADmAAAAAAIAAOYoAADmKAAAAAEAAOZHAADmRwAAAAMAAOaxAADmsQAAAAQAAOhfAADoXwAAAAUAAOiIAADoiAAAAAYAAAAAAAAAdADSBNAFCAVYBaQABAAA/5cD6QNpABgAIQBAAEkAAAEiBw4BBwYUFx4BFxYyNz4BNzY0Jy4BJyYBNzYWHwEHJyYlBgcOAiYnBw4CLgI0Nj8BLgE+ATc+ATIeAhQnIgYUFjI2NCYCAGNbWIclJiYlh1hbxltYhyUmJiWHWFv+vRoNGAgbSBgZAfsLFxIrLi8WowcSFBMPCAcHowoGBxYSFzg8OC0XnRYfHysgIANoJiWHWFvGW1iHJSYmJYdYW8ZbWIclJv3lGg0DCBtIFxlXHBcSFQgHCqMHCAEGDxQWEwejFi8uKhIXFhctODxWICsgICsgAAMAAP+gA+EDYQAUAC8APAAAATIXFhcWEAcGBwYgJyYnJhA3Njc2BR0BHgEOAi4CNjc9AQ4CHgIyPgIuASciBhURFBYyNjURNCYCAIJwbT9CQj9tcP78cG0/QkI/bXABEiEVHUlgYEocFCI4SBchUnOBdFIhF0nHFBwcKBwcA2BCP21w/vxwbT9CQj9tcAEEcG0/QuYKcSZhYEYYGEdfYSZxCiBpfX1hNjZhfX1pRhwU/uAUHBwUASAUHAAAGwAA/4MD6wNqAA8ASwCBAK8A5wEJAQ0BIQE0AUEBSgFTAVwBZQFuAZ4B0AH7Ah0CSwJpAnICewKEAo0CnwKxAAAXNjc2MzYfAQcGIyInJicxEwYHBh8BBwYHBhcWFxYXFhcWNzY3Njc2Nz4BJi8BNzYnJicmJyYHDgMPAScmJyYPAScmJyYnJicmBic2FxYXFhcWFzYzFhc2NzY3Njc2FxYXFgcWFxYHBgcGBwYHBgcGJyYnJicmJyY3NjcmNzY3NjcmBwYHBhcGBwYXFhcWFxYXFjc2NzY3NiYnNicmJyYHBgcOAQcmJyIHJicmJyYTFjY3Njc2NzYzMhcWHwEeATc2NzY3Njc2FxYXFhcWBwYHBgcGBwYjIicmJyYnJicmNjc2FxYXFgU2LgEOAgcGJyYnJgcGJyYnJiIGFx4BHwEWMjczNjc+AQcmBxY3BhcyNzE2FxYXMR4BNzYmJyYHBgcWByInMSYHBgcOAScmNjc2FxYXMj4BNTQmIgYVFB4BJxQOASImPgEWJzI2NCYiBhQWMzI2NCYiBhQWFzI2NCYiBhQWITI2NCYiBhQWBTY/AT4BMzIWFzI3NTYzMh4BHwEWFxYXHgEHBgcGBwYHBicmJyYnJjc+ATc2NzM2NyYiBwYPAQ4BDwEGBwYHBhcWFxYXHgE3Njc2NzY3NicmJyYnJi8BJicuASciBzEGIyIFNDc2NzY3NhYXFhcWFxYdAQYHBi8BBwYHBicmLwEHBiMGJyYvAQcGJy4BNyYHBgcGBwYVFB4BNxYXFjI3FhcWNjcWNzY3NicmJyYnJiUwMTY3NhcWMzI3MTYzMhYXFhcxFhcWFx4BBwYHBgcGBwYnJicmJyY2NzY3PgEFBicmNSY3Njc2FxYXFhcWFxYHBgcGJwYHBicGIyIlMjY0JiIGFBYXMjY0JiIGFBYXFAYmNTQ2MhYHFj4BLgEOARYBIiY3Njc2Mx4BFxYGBwYHMQYFFjYnJicmIyIGBwYWFxYXMRb6LS5oQnO5v63GeHa5XEVoCgECBQEDKRAPCxJIMUUsPEdHU0hTQSoaGAsdIQQBBwwLGBIZExcLKzMsDAYLIDAqGwsFLTwUFA4HIS0BIDIMExYYPS4dJCwgHjEbFxsRHxklGDsOIxAOBQYbHTBFWExXSUo/L0k2ThQMDxEqBQECCw1rNhwXBQQHKRAPCxNJMkU/VmlfdFU7GxkXLQoWEiYaJRMjH0MRIDcwHR8oHyEYLR8kDAYNGBEdIiwiFBkGBiIRCxAJFB0QGxgcGhEHBwsOJihJOkozMWJZUyoeHSMNECcjHCYVIxEBdwEECQkDEQsbFCEaISEbFg4JAw4HBAwlFQErRzQCERIPF4IhHh5qAQcEDhUJEBgMCgEBHxUXExXOAQcEDhUJEBgMCgEBHxQYExVtEBwQIjUiERwEBQkIAQYJB1QNEhIaEhLmDBISGRISqBciIi8hIf4AGCEhLyIiAdEICQQFBgUIGQ4IDgwFCAwGBAIFBgkOFRADAgwOFRkdIiZIHQwDAgQDCwgGDQIPSxEZCwQHAgYNDQMOCBgJBQMEDhAbHlYoIR0YEA8DBQsMHgkGBAQBBQQGFQ0IDg0GCf2TBgcNDxYbTBsWDQoEAQQGCBINBQgMBgcJCwoLCwwHBQcGBg0UDgYHhi4kHxQRCAYVIxUHCA0gEAwNECEMGBENBwQEBQ0QGx8BgAoGDBMJCwYMDAYKDwUDBAUEBwwXEwQCDQ4VGR0iJTEeGQkHCw0IFQ0N/hMWERcBCw0bITEmGxYNCwQDAwUJDRcJEBUYDxAWAe8HDAwPCwtRCAsLEAsLahMTCxALhx4wCSQ7MAkk/fYIBQYGDhEZBjQUFwMWDiY7AmAIBQUHDhEZBjQTGAMXDSY8NwMCBAEKFQkJCQQFAx41RzxABQQ6Qz4yVj8sHBILDgEBFBgvIDUzeXAmBAaHV0gkGwYEBgMkNjkUCgMJAQEFAglXMBAKBgEDPC8sBQEJCxIxVgQBCC80HRMXBAgGCCVY/is+Oz9CODskMxkVAQEODBMeL0VgN0RGPkE7SDZDMAU/NWBJWztEQDRZQSwcGgsNERU/LFBMpDauXUoVDgoEIh1RHQoBBT0tIhQP/gcHAggCCA8GCw0IEQQEBQEBBwQLEQYJAwQXDysvND0wMyAYCwgYFyIYKzIvOlQNCQkFDwdtBQgDBAsOBg0FCAEBCgcPCQ8GDAYTGQEBCw0DCAcVIAUGA90JAQMEAQIIBAEFChYEBAUGEAkBAwQBAggEAQQKFwQEBQaeERkLDxISDwsZEUECBAMEBQMBeRIaEhIaEhIaEhIaEmYOEw4OEw4OEw4OEw7tBQkDBQQLAQIBAQYICAMLBwoFCSIVCxEWEBQHCQkRMhMWExEODwUDBgYuCAcDCAIGBgYBBgQPIhQYGxcbExYUCgkXEhkVEB0XGgsEBgQIAwoFCQsBAgK+GBccExYICRMUEBYREQcGBA4EBgYFDRIGAgEDDAoJCgEEBQwNBgkCAQijDA0LHRghGxsWGAUHCwYJCgoEBRATBQ0KFgsUFxYaFBccCgICCAUCAgkGBAgKBQkECiYXDRIWEBQHCQkMHBggGy4LBwgFB7QKAwMcIR4mERYNChQQFhISDwgQBgoIFQgKGg2NCw8MDA8LCQsQCwsQCxMLCwsLCAsLXgcQJCQPECQkAkFKKzMeJQErFhoTFAsdLBgBSiwyHyQsFhoTEwwcLQAAAAQAAAAAA9YDAQAWABoAHgAiAAAlMxUhNTMRNDYzITIWFREzESM1MzIWFSURIREBMxUjETMVIwOAVfxWVRkSAaoSGatWgBIZ/VUBVv8AqqqqqlVVVQKAEhkZEv2AAVZVGRLW/aoCVv8AVgEAVQAAAAAEAAD/1QOBA1YAGQAdACkAMwAAATU0PgEyHgEdATMyFhURFAYjISImNRE0NjMFIREhJS4BPgEyHgEGBxUjAyE1NC4BIg4BFQEARXWMdUVVEhkZEv1WEhkZEgKA/aoCVv6qGRYPLjouDxYZVoABVi5PXE8uAisqRnVFLine 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}`)
|
||||
|
||||
@@ -1,119 +1,367 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>附件管理</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
background-color: #f8f9fa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.header {
|
||||
background-color: #2c3e50;
|
||||
color: #fff;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
}
|
||||
.upload-area {
|
||||
background: #fff;
|
||||
margin: 15px;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,0.05);
|
||||
}
|
||||
.upload-area input[type="file"] {
|
||||
display: none;
|
||||
}
|
||||
.upload-label {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
border: 2px dashed #ccc;
|
||||
border-radius: 8px;
|
||||
color: #666;
|
||||
cursor: pointer;
|
||||
}
|
||||
.attachment-list {
|
||||
margin: 15px;
|
||||
}
|
||||
.attachment-item {
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,0.05);
|
||||
}
|
||||
.attachment-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
.attachment-thumb {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 4px;
|
||||
object-fit: cover;
|
||||
background-color: #eaeaea;
|
||||
}
|
||||
.attachment-name {
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
.attachment-actions button {
|
||||
margin-left: 5px;
|
||||
padding: 5px 10px;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
}
|
||||
.btn-primary {
|
||||
background-color: #2c3e50;
|
||||
color: white;
|
||||
}
|
||||
.btn-danger {
|
||||
background-color: #e74c3c;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">附件管理</div>
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>物流管理系统 - 首页</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: 'Helvetica Neue', Arial, sans-serif;
|
||||
}
|
||||
|
||||
<div class="upload-area">
|
||||
<label for="file-upload" class="upload-label">点击上传附件</label>
|
||||
<input type="file" id="file-upload" multiple />
|
||||
</div>
|
||||
body {
|
||||
background-color: #f5f7fa;
|
||||
color: #333;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
<div class="attachment-list">
|
||||
<div class="attachment-item">
|
||||
<div class="attachment-info">
|
||||
<img src="https://via.placeholder.com/50" class="attachment-thumb" />
|
||||
<div class="attachment-name">工单图片1.jpg</div>
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* 头部样式 */
|
||||
header {
|
||||
background-color: #34495e;
|
||||
color: white;
|
||||
padding: 15px 20px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 0 0 10px 10px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header-content {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.user-info img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/* 轮播图样式 */
|
||||
.carousel {
|
||||
position: relative;
|
||||
height: 300px;
|
||||
overflow: hidden;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.carousel-inner {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.carousel-item {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0;
|
||||
transition: opacity 1s ease-in-out;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: white;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
|
||||
font-size: 2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.carousel-item.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.carousel-item:nth-child(1) {
|
||||
background:
|
||||
linear-gradient(rgba(52, 73, 94, 0.7), rgba(52, 73, 94, 0.7)),
|
||||
url('https://images.unsplash.com/photo-1601493700631-2b16ec4b4716?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxfDB8MXxyYW5kb218MHx8d2FyZWhvdXNlfHx8fHx8MTY5OTQwODQ0MQ&ixlib=rb-4.0.3&q=80&utm_campaign=api-credit&utm_medium=referral&utm_source=unsplash_source&w=1080');
|
||||
}
|
||||
|
||||
.carousel-item:nth-child(2) {
|
||||
background:
|
||||
linear-gradient(rgba(52, 73, 94, 0.7), rgba(52, 73, 94, 0.7)),
|
||||
url('https://images.unsplash.com/photo-1488521787991-ed7bbaae773c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxfDB8MXxyYW5kb218MHx8dHJ1Y2t8fHx8fHwxNjk5NDA4NDYy&ixlib=rb-4.0.3&q=80&utm_campaign=api-credit&utm_medium=referral&utm_source=unsplash_source&w=1080');
|
||||
}
|
||||
|
||||
.carousel-item:nth-child(3) {
|
||||
background:
|
||||
linear-gradient(rgba(52, 73, 94, 0.7), rgba(52, 73, 94, 0.7)),
|
||||
url('https://images.unsplash.com/photo-1518458028785-8fbcd101ebb9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxfDB8MXxyYW5kb218MHx8Y29udGFpbmVyfHx8fHx8MTY5OTQwODQ3Mg&ixlib=rb-4.0.3&q=80&utm_campaign=api-credit&utm_medium=referral&utm_source=unsplash_source&w=1080');
|
||||
}
|
||||
|
||||
.carousel-controls {
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.carousel-indicator {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
margin: 0 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.carousel-indicator.active {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
/* 操作模块样式 */
|
||||
.operations {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
color: #34495e;
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #e0e6ed;
|
||||
}
|
||||
|
||||
.operation-cards {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.operation-row {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.operation-card {
|
||||
background: white;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08);
|
||||
padding: 25px;
|
||||
transition:
|
||||
transform 0.3s,
|
||||
box-shadow 0.3s;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.operation-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.operation-icon {
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
background-color: #eef5ff;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.operation-icon i {
|
||||
font-size: 32px;
|
||||
color: #34495e;
|
||||
}
|
||||
|
||||
.operation-title {
|
||||
font-size: 1.3rem;
|
||||
font-weight: bold;
|
||||
color: #34495e;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.operation-desc {
|
||||
color: #7f8c8d;
|
||||
font-size: 0.95rem;
|
||||
margin-bottom: 20px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.btn {
|
||||
background-color: #34495e;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 10px 25px;
|
||||
border-radius: 25px;
|
||||
font-size: 1rem;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s;
|
||||
width: 80%;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background-color: #2c3e50;
|
||||
}
|
||||
|
||||
.check-operation {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 底部样式 */
|
||||
footer {
|
||||
margin-top: 40px;
|
||||
text-align: center;
|
||||
color: #7f8c8d;
|
||||
font-size: 0.9rem;
|
||||
padding: 20px;
|
||||
border-top: 1px solid #e0e6ed;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.operation-row {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.carousel {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.carousel-item {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="header-content">
|
||||
<div class="logo">物流管理系统</div>
|
||||
<div class="user-info">
|
||||
<img src="https://ui-avatars.com/api/?name=管理员&background=random" alt="用户头像" />
|
||||
<span>管理员</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="attachment-actions">
|
||||
<button class="btn-primary">预览</button>
|
||||
<button class="btn-danger">删除</button>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
<!-- 轮播图 -->
|
||||
<div class="carousel">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active">
|
||||
<div>高效物流管理,提升运营效率</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<div>智能仓储解决方案</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<div>实时追踪,全程可视</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-controls">
|
||||
<div class="carousel-indicator active"></div>
|
||||
<div class="carousel-indicator"></div>
|
||||
<div class="carousel-indicator"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 操作模块 -->
|
||||
<div class="operations">
|
||||
<h2 class="section-title">核心操作</h2>
|
||||
<div class="operation-cards">
|
||||
<!-- 验箱单独一行 -->
|
||||
<div class="operation-card check-operation">
|
||||
<div class="operation-icon">
|
||||
<i>📦</i>
|
||||
</div>
|
||||
<h3 class="operation-title">验箱</h3>
|
||||
<p class="operation-desc">对集装箱进行质量检查、状态评估和记录,确保运输安全</p>
|
||||
<button class="btn">开始验箱</button>
|
||||
</div>
|
||||
|
||||
<!-- 进场和出场在同一行 -->
|
||||
<div class="operation-row">
|
||||
<div class="operation-card">
|
||||
<div class="operation-icon">
|
||||
<i>⬇️</i>
|
||||
</div>
|
||||
<h3 class="operation-title">进场</h3>
|
||||
<p class="operation-desc">记录集装箱进入仓库或场站的信息,包括时间、位置和状态</p>
|
||||
<button class="btn">进场登记</button>
|
||||
</div>
|
||||
|
||||
<div class="operation-card">
|
||||
<div class="operation-icon">
|
||||
<i>⬆️</i>
|
||||
</div>
|
||||
<h3 class="operation-title">出场</h3>
|
||||
<p class="operation-desc">记录集装箱离开仓库或场站的信息,生成出库单据</p>
|
||||
<button class="btn">出场登记</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="attachment-item">
|
||||
<div class="attachment-info">
|
||||
<div class="attachment-thumb"></div>
|
||||
<div class="attachment-name">报告文档.pdf</div>
|
||||
</div>
|
||||
<div class="attachment-actions">
|
||||
<button class="btn-primary">预览</button>
|
||||
<button class="btn-danger">删除</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<footer>
|
||||
<p>© 2023 物流管理系统 | 版本 2.1.0</p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// 轮播图功能
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const items = document.querySelectorAll('.carousel-item')
|
||||
const indicators = document.querySelectorAll('.carousel-indicator')
|
||||
let currentIndex = 0
|
||||
|
||||
function showSlide(index) {
|
||||
// 隐藏所有幻灯片
|
||||
items.forEach((item) => item.classList.remove('active'))
|
||||
indicators.forEach((indicator) => indicator.classList.remove('active'))
|
||||
|
||||
// 显示当前幻灯片
|
||||
items[index].classList.add('active')
|
||||
indicators[index].classList.add('active')
|
||||
|
||||
currentIndex = index
|
||||
}
|
||||
|
||||
// 添加指示器点击事件
|
||||
indicators.forEach((indicator, index) => {
|
||||
indicator.addEventListener('click', () => {
|
||||
showSlide(index)
|
||||
})
|
||||
})
|
||||
|
||||
// 自动轮播
|
||||
setInterval(() => {
|
||||
let nextIndex = (currentIndex + 1) % items.length
|
||||
showSlide(nextIndex)
|
||||
}, 5000)
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||