main
ihzero 2024-04-25 06:23:11 +08:00
parent 2dcdb0a1c3
commit 7e46121079
25 changed files with 5150 additions and 3140 deletions

4
.env
View File

@ -1,5 +1 @@
VITE_COMMON_API_PREFIX = /api-base
VITE_COMMON_API_URL = http://store-manage.hmily.club

View File

@ -0,0 +1,4 @@
VITE_COMMON_API_PREFIX = /api-base
VITE_COMMON_API_URL = http://store-manage.hmily.club

View File

@ -1,3 +1,3 @@
VITE_COMMON_API_PREFIX = /api
VITE_COMMON_API_URL = http://store-manage.hmily.club
VITE_COMMON_API_URL = http://store-manage.hmily.club/api

View File

@ -0,0 +1,16 @@
{ // launch.json configurations app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtypelocalremote, localremote
"version": "0.0",
"configurations": [{
"app-plus" :
{
"launchtype" : "local"
},
"default" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}

49
package-lock.json generated
View File

@ -24,6 +24,8 @@
"@dcloudio/uni-mp-xhs": "3.0.0-3090920231225001",
"@dcloudio/uni-quickapp-webview": "3.0.0-3090920231225001",
"@qiun/ucharts": "^2.5.0-20230101",
"esbuild-darwin-arm64": "^0.15.18",
"luch-request": "^3.1.1",
"pinia": "2.0.33",
"pinia-plugin-persistedstate": "^3.2.1",
"vue": "^3.2.45",
@ -6280,6 +6282,20 @@
"@esbuild/win32-x64": "0.16.17"
}
},
"node_modules/esbuild-darwin-arm64": {
"version": "0.15.18",
"resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
"integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
"cpu": [
"arm64"
],
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
@ -9412,6 +9428,19 @@
"yallist": "^3.0.2"
}
},
"node_modules/luch-request": {
"version": "3.1.1",
"resolved": "https://registry.npmmirror.com/luch-request/-/luch-request-3.1.1.tgz",
"integrity": "sha512-p7+mlcEtgRcd0OfXC4XZbyiwSr1XgCeqNT7LlVUjnk7InYl/8d5Rk7BUqAYNA2WRafI1wRIUQWRWZRpeUwWR0w==",
"dependencies": {
"@dcloudio/types": "^2.0.16"
}
},
"node_modules/luch-request/node_modules/@dcloudio/types": {
"version": "2.6.12",
"resolved": "https://registry.npmmirror.com/@dcloudio/types/-/types-2.6.12.tgz",
"integrity": "sha512-mrCMwcINy1IFjU9VUqLeWBkj404yWs5paLDttBcA+eqUjanuUQbBcTVPqlrGgkyzLXDcV2oDDZRSNxNpXi4kMQ=="
},
"node_modules/magic-string": {
"version": "0.30.8",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.8.tgz",
@ -17044,6 +17073,11 @@
"@esbuild/win32-x64": "0.16.17"
}
},
"esbuild-darwin-arm64": {
"version": "0.15.18",
"resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
"integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA=="
},
"escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
@ -19445,6 +19479,21 @@
"yallist": "^3.0.2"
}
},
"luch-request": {
"version": "3.1.1",
"resolved": "https://registry.npmmirror.com/luch-request/-/luch-request-3.1.1.tgz",
"integrity": "sha512-p7+mlcEtgRcd0OfXC4XZbyiwSr1XgCeqNT7LlVUjnk7InYl/8d5Rk7BUqAYNA2WRafI1wRIUQWRWZRpeUwWR0w==",
"requires": {
"@dcloudio/types": "^2.0.16"
},
"dependencies": {
"@dcloudio/types": {
"version": "2.6.12",
"resolved": "https://registry.npmmirror.com/@dcloudio/types/-/types-2.6.12.tgz",
"integrity": "sha512-mrCMwcINy1IFjU9VUqLeWBkj404yWs5paLDttBcA+eqUjanuUQbBcTVPqlrGgkyzLXDcV2oDDZRSNxNpXi4kMQ=="
}
}
},
"magic-string": {
"version": "0.30.8",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.8.tgz",

View File

@ -56,6 +56,7 @@
"@dcloudio/uni-mp-xhs": "3.0.0-3090920231225001",
"@dcloudio/uni-quickapp-webview": "3.0.0-3090920231225001",
"@qiun/ucharts": "^2.5.0-20230101",
"esbuild-darwin-arm64": "^0.15.18",
"luch-request": "^3.1.1",
"pinia": "2.0.33",
"pinia-plugin-persistedstate": "^3.2.1",

View File

@ -1,7 +1,17 @@
<script>
// import { useUserStoreWithOut } from "@/store/modules/user";
import { useUserStoreWithOut } from '@/store/modules/user'
export default {
onLaunch: function () {
const userStore = useUserStoreWithOut()
if (userStore.isLogin) {
userStore.fetchUserInfo()
} else {
uni.navigateTo({
url: '/pages/login/index',
})
}
console.log('App Launch')
},
onShow: function () {

View File

@ -1,6 +1,6 @@
{
"name" : "",
"appid" : "",
"name" : "aa",
"appid" : "__UNI__ADB6360",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
@ -41,9 +41,13 @@
]
},
/* ios */
"ios" : {},
"ios" : {
"dSYMs" : false
},
/* SDK */
"sdkConfigs" : {}
"sdkConfigs" : {
"ad" : {}
}
}
},
/* */
@ -65,8 +69,8 @@
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics": {
"enable": false
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "3"
}

View File

@ -1,17 +1,18 @@
{
"pages": [
{
"path": "pages/login/index",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/home/index",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/login/index",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/revert/index",
"style": {
@ -296,7 +297,8 @@
}
}
]
},{
},
{
"root": "pages/train-books",
"pages": [
{
@ -329,6 +331,17 @@
}
}
]
},
{
"root": "pages/audits",
"pages": [
{
"path": "detail",
"style": {
"navigationBarTitleText": "审核详情"
}
}
]
}
],
"globalStyle": {

View File

@ -0,0 +1,59 @@
<template>
<!-- <uv-list v-if="colums.length && data && Object.keys(data).length">
<template v-for="(item, i) in columsList" :key="i">
<slot :slotName="item.dataIndex" :data="item">
<uv-list-item :title="item.title" :right-text="item?.value">
</uv-list-item>
</slot>
</template>
</uv-list> -->
<uv-form labelWidth="160rpx">
<template v-for="(item, i) in columsList" :key="i">
<slot :slotName="item.dataIndex" :data="item">
<uv-form-item :label="item.title" :labelPosition="item.labelPosition">
<uv-input inputAlign="right" :border="`none`" v-model="item.value"></uv-input>
</uv-form-item>
</slot>
</template>
</uv-form>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps({
colums: {
type: Array,
default: () => [],
},
data: {
type: Object,
default: () => {},
},
})
const columsList = computed(() => {
const arr = []
props.colums.forEach((e) => {
const { dataIndex, format } = e
// console.log(props.data)
// props.data[dataIndex]
let str =getValue(props.data,dataIndex)
if (isFunction(format)) {
str = format(str)
}
arr.push({
...e,
value: str,
})
})
return arr
})
const getValue = (obj, path) => {
return path.split('.').reduce((acc, key) => (acc ? acc[key] : undefined), obj)
}
const isFunction = (fn) => {
return typeof fn === 'function'
}
</script>

View File

@ -0,0 +1,32 @@
import { timeFormat } from '@climblee/uv-ui/libs/function'
export default {
//清洁任务
task_hygienes: [
{
title: '申请人',
dataIndex: 'name',
},
{
title: '所属门店',
dataIndex: 'taskable.store.address',
},
{
title: '电话号码',
dataIndex: '',
},
{
title: '申请时间',
dataIndex: 'created_at',
format: timeFormat,
},
{
title: '清洁范围',
dataIndex: 'taskable.description',
labelPosition: 'top',
},
{
title: '清洁结果',
dataIndex: 'taskable.photos',
},
]
}

View File

@ -0,0 +1,35 @@
<template>
<view>
<CuNavbar title="任务详情">
<!-- <BaseData ></BaseData> -->
</CuNavbar>
{{ colums }}
</view>
</template>
<script setup>
import CuNavbar from '@/components/cu-navbar/index'
import { onLoad } from '@dcloudio/uni-app'
import { ref, computed } from 'vue'
import { http } from '@/utils/request'
import BaseData from './base-data.vue'
import datajson from './data.data'
const colums = computed(() => datajson[type.value] ?? [])
const id = ref(null)
const type = ref(null)
onLoad((opt) => {
id.value = opt.id
type.value = opt.type
getData()
})
const getData = async () => {
const resData = await http.get(`/workflow/${id.value}`, {
params: {
subject_type: type.value,
},
})
console.log(resData)
}
</script>

View File

@ -4,19 +4,27 @@
</view>
</template>
<script setup>
import { ref } from 'vue'
import { ref, watch, reactive } from 'vue'
const props = defineProps({
data: Array,
})
const opts = ref({
color: [
'#ee2c37',
],
padding: [15, 15, 0, 15],
color: ['#ee2c37'],
dataLabel: false,
dataPointShape: true,
enableScroll: false,
legend: {
show:false
show: false,
},
xAxis: {
disableGrid: true,
// disableGrid: true,
boundaryGap: 'justify',
format: 'ssss',
},
yAxis: {
gridType: 'dash',
@ -31,15 +39,30 @@ const opts = ref({
gradient: true,
activeType: 'hollow',
},
tooltip: {
legendShow: false,
},
},
})
const chartData = ref({
categories: ['2016', '2017', '2018', '2019', '2020', '2021'],
const chartData = reactive({
categories: [],
series: [
{
name: '目标值',
data: [35, 36, 31, 33, 13, 34],
}
name: '金额',
data: [],
},
],
})
watch(
() => props.data,
(e) => {
chartData.categories = e.map((el) => el.key)
chartData.series[0].data = e.map((el) => el.value)
},
{
immediate: true,
deep: true,
}
)
</script>

View File

@ -9,18 +9,18 @@
<uv-icon color="#fff" size="48rpx" name="chat"></uv-icon>
</view>
<view class="mt-60rpx">昨日累计金额</view>
<view class="mt-20rpx">截止2024-03-21</view>
<view class="mt-20rpx">截止{{ yesterday }}</view>
<view class="flex items-center mt-40rpx">
<view class="flex-1 text-center">
<view>销售</view>
<view>20000</view>
<view>{{ yesday_ledger.sales }}</view>
</view>
<view class="h-80rpx flex-none flex-center">
<uv-line direction="vertical"></uv-line>
</view>
<view class="flex-1 text-center">
<view>支出</view>
<view>20000</view>
<view>{{ yesday_ledger.expenditure }}</view>
</view>
</view>
</view>
@ -32,10 +32,12 @@
:activeStyle="{ color: '#ee2c37' }"
lineColor="#ee2c37"
:list="list"
:current="tabIndex"
@click="onTabClick"
:scrollable="false"
></uv-tabs>
<ChartComp></ChartComp>
<ChartComp :data="countData"></ChartComp>
</view>
</view>
</template>
@ -43,17 +45,63 @@
import { ref, reactive, computed } from 'vue'
import ChartComp from './components/chart.vue'
import StoreDropDown from '@/pages/home/components/store-drop-down/index.vue'
import { http } from '@/utils/request'
import { onShow } from '@dcloudio/uni-app'
import { timeFormat } from '@climblee/uv-ui/libs/function'
const list = ref([
{
name: '销售金额',
key: 'sales',
},
{
name: '支出金额',
key: 'expenditure',
},
])
const tabIndex = ref(0)
const detail = ref({
yesday_ledger: {
sales: 0,
expenditure: 0,
},
})
const yesday_ledger = computed(() => detail.value.yesday_ledger)
const trends_of_30days = computed(() => detail.value.trends_of_30days)
const yesterday = computed(() => {
return timeFormat(Number(new Date()) - 1000 * 60 * 60 * 24)
})
const tabObj = computed(() => list.value[tabIndex.value])
const countData = computed(() => {
const arr =
trends_of_30days?.value?.reduce((p, c) => {
p.push({
key: timeFormat(c.date, 'mm月dd日'),
value: c[tabObj.value.key],
})
return p
}, []) ?? []
return arr
})
const onTabClick = (e) => {
console.log(e)
tabIndex.value = e.index
}
onShow(() => {
getData()
})
const getData = () => {
http
.get('/statistics/dashboard', {
params: {
date: yesterday.value,
},
})
.then((res) => {
detail.value = res
})
}
</script>

View File

@ -49,6 +49,7 @@ const form = ref({
})
const handleClick = async () => {
try {
const { username, password } = form.value
await userStore.login({

View File

@ -1,6 +1,7 @@
<template>
<view>
<CuNavbar :isBack="isBack" title="上报"></CuNavbar>
<view
:class="[
checkPermission(['store']) && form.allow_rereport
@ -141,7 +142,7 @@
</view>
</uv-form>
</view>
<view class="h-130rpx">
<view class="h-130rpx" v-if="checkPermission(['store']) && form.allow_rereport">
<view
class="fixed bottom-0 left-0 right-0 h-120rpx bg-white flex-center box-border px-base"
:style="style"
@ -238,8 +239,9 @@ const style = computed(() => {
return style
})
onShow(() => {
getData(endDate)
onMounted(() => {
// console.log(endDate);
getData()
})
const submit = () => {
@ -249,6 +251,7 @@ const submit = () => {
}
const onSubmit = async () => {
const params = {
date: form.date,
sales: form.sales,
@ -279,6 +282,7 @@ const onSubmit = async () => {
}
const getData = async () => {
const resData = await http.get(`/ledgers/${form.date}`)
Object.assign(form, resData, {
@ -359,6 +363,7 @@ const uploadFilePromise = (url) => {
.upload('/fileupload', {
filePath: url,
name: 'file',
})
.then((res) => {
resolve(res.url)

View File

@ -7,10 +7,20 @@
<view class="text-30rpx">{{ item.name }}</view>
<view
:style="{
color: statusFun(item.taskable.status, item.taskable_type, 'color'),
color: statusFun(
item.taskable.status,
isCheck ? 'statusExpense' : item.taskable_type,
'color'
),
}"
class="text-24rpx"
>{{ statusFun(item.taskable.status, item.taskable_type, 'name') }}</view
>{{
statusFun(
item.taskable.status,
isCheck ? 'statusExpense' : item.taskable_type,
'name'
)
}}</view
>
</view>
<view class="text-24rpx text-hex-999999">
@ -25,21 +35,26 @@ import statusFun from '@/utils/status'
import { timeFormat } from '@climblee/uv-ui/libs/function/index'
const props = defineProps({
item: Object,
isCheck: Boolean,
type: String,
})
const onClick = () => {
console.log(props.item)
const type = props.item.taskable_type
const { status } = props.item.taskable
let url
if (type === 'task_hygienes') {
if (status === 2 || status == 4) {
url = `/pages/task/task_hygienes_submit?id=${props.item.id}`
} else {
url = `/pages/task/detail?id=${props.item.id}`
if (props.isCheck) {
url = `/pages/audits/detail?id=${props.item.id}&type=${type}`
} else {
if (type === 'task_hygienes') {
if (status === 2 || status == 4) {
url = `/pages/task/task_hygienes_submit?id=${props.item.id}`
} else {
url = `/pages/task/detail?id=${props.item.id}`
}
} else if (type === 'task_ledgers') {
url = `/pages/task/${type}_submit?id=${props.item.id}`
}
} else if (type === 'task_ledgers') {
url = `/pages/task/${type}_submit?id=${props.item.id}`
}
uni.navigateTo({
url: url,

View File

@ -1,76 +0,0 @@
<template>
<view class="px-base">
<CuNavbar title="任务详情"></CuNavbar>
<view
class="mt-30rpx card-shadow bg-white rounded-19rpx px-base text-[#333333] text-27rpx"
>
<view class="py-20rpx flex items-center justify-between">
<view>申请人</view>
<view class="text-hex-999999">测试人</view>
</view>
<uv-line></uv-line>
<view class="py-20rpx flex items-center justify-between">
<view>所属门店</view>
<view class="text-hex-999999">具体门店名称</view>
</view>
<uv-line></uv-line>
<view class="py-20rpx flex items-center justify-between">
<view>电话号码</view>
<view class="text-hex-999999">具体门店名称</view>
</view>
<uv-line></uv-line>
<view class="py-20rpx flex items-center justify-between">
<view>申请时间</view>
<view class="text-hex-999999">具体门店名称</view>
</view>
<uv-line></uv-line>
<view class="py-20rpx">
<view>申请范围</view>
<view class="text-hex-999999 mt-20rpx">具体门店名称</view>
</view>
<uv-line></uv-line>
<view class="py-20rpx">
<view>清洁结果</view>
<view class="text-hex-999999 mt-20rpx">
<view class="bg-gray-50 b-solid w-130rpx h-130rpx"></view>
</view>
</view>
</view>
<view class="h-100rpx">
<view
class="fixed bottom-0 left-0 right-0 h-120rpx bg-white flex items-center px-base space-x-30rpx"
>
<view class="flex-1">
<uv-button color="#999999" shape="circle" plain block>
拒绝
</uv-button>
</view>
<view class="flex-1">
<uv-button type="primary" shape="circle" block> 通过 </uv-button>
</view>
</view>
</view>
</view>
</template>
<script setup>
import CuNavbar from '@/components/cu-navbar/index'
import { onLoad } from '@dcloudio/uni-app'
import { http } from '@/utils/request'
import { ref } from 'vue'
const id = ref(null)
onLoad((opt) => {
id.value = opt.id
getDetail()
})
const getDetail = async () => {
const resdata = await http.get(`/tasks/${id.value}`, {
params: {
id: id.value,
},
})
console.log(resdata);
}
</script>

View File

@ -0,0 +1,64 @@
<template>
<view class="px-base">
<CuNavbar title="任务详情"></CuNavbar>
<BaseCompApi :apiUrl="`/tasks/${id}`" :colums="baseColums">
<!-- <template v-slot="{ slotName, data }">
<view v-if="slotName == 'taskable.description'">
{{ data }}
</view>
</template> -->
</BaseCompApi>
<view class="h-100rpx">
<view
class="fixed bottom-0 left-0 right-0 h-120rpx bg-white flex items-center px-base space-x-30rpx"
>
<view class="flex-1">
<uv-button color="#999999" shape="circle" plain block>
拒绝
</uv-button>
</view>
<view class="flex-1">
<uv-button type="primary" shape="circle" block> 通过 </uv-button>
</view>
</view>
</view>
</view>
</template>
<script setup>
import CuNavbar from '@/components/cu-navbar/index'
import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
import BaseCompApi from '@/components/base-comp/base-api.vue'
import { timeFormat } from '@climblee/uv-ui/libs/function'
const baseColums = [
{
title: '申请人',
dataIndex: 'name',
},
{
title: '所属门店',
dataIndex: 'taskable.store.address',
},
{
title: '电话号码',
dataIndex: '',
},
{
title: '申请时间',
dataIndex: 'created_at',
format: timeFormat,
},
{
title: '清洁范围',
dataIndex: 'taskable.description',
labelPosition: 'top',
},
]
const id = ref(null)
onLoad((opt) => {
id.value = opt.id
})
</script>

View File

@ -1,16 +1,38 @@
<template>
<view class="px-base">
<CuNavbar title="任务详情"></CuNavbar>
<BaseCompApi :apiUrl="`/tasks/${id}`" :colums="baseColums">
<template v-slot="{ slotName, data }">
<view v-if="slotName == 'taskable.description'">
{{ data }}
<view
class="mt-30rpx card-shadow bg-white rounded-19rpx px-base text-[#333333] text-27rpx"
>
<template v-for="(item, i) in columsList" :key="i">
<template v-if="item.dataIndex == 'taskable.photos'">
<view class="py-20rpx">
<view>{{ item.title }}</view>
<view class="grid grid-cols-3 gap-15rpx mt-20rpx">
<view class="" v-for="op in item.value" :key="op">
<image class="w-full" mode="widthFix" :src="op"></image>
</view>
</view>
</view>
</template>
<view
v-else
class="py-20rpx flex"
:class="[
[
item.labelPosition == 'top'
? 'flex-col space-y-10rpx'
: 'items-center justify-between',
],
]"
>
<view>{{ item.title }}</view>
<view class="text-hex-999999">{{ item.value }}</view>
</view>
<uv-line color="#f5f5f5" v-if="i != columsList.length - 1"></uv-line>
</template>
</BaseCompApi>
<view class="h-100rpx">
</view>
<!-- <view class="h-100rpx">
<view
class="fixed bottom-0 left-0 right-0 h-120rpx bg-white flex items-center px-base space-x-30rpx"
>
@ -23,14 +45,14 @@
<uv-button type="primary" shape="circle" block> 通过 </uv-button>
</view>
</view>
</view>
</view> -->
</view>
</template>
<script setup>
import CuNavbar from '@/components/cu-navbar/index'
import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
import BaseCompApi from '@/components/base-comp/base-api.vue'
import { http } from '@/utils/request'
import { ref, computed } from 'vue'
import { timeFormat } from '@climblee/uv-ui/libs/function'
const baseColums = [
{
@ -55,10 +77,49 @@ const baseColums = [
dataIndex: 'taskable.description',
labelPosition: 'top',
},
{
title: '清洁结果',
dataIndex: 'taskable.photos',
},
]
const id = ref(null)
const data = ref({})
const columsList = computed(() => {
const arr = []
baseColums.forEach((e) => {
const { dataIndex, format } = e
let str = getValue(data.value, dataIndex)
if (isFunction(format)) {
str = format(str)
}
arr.push({
...e,
value: str,
})
})
return arr
})
onLoad((opt) => {
id.value = opt.id
getDetail()
})
const getDetail = async () => {
const resdata = await http.get(`/tasks/${id.value}`, {
params: {
id: id.value,
},
})
data.value = resdata
}
const getValue = (obj, path) => {
return path.split('.').reduce((acc, key) => (acc ? acc[key] : undefined), obj)
}
const isFunction = (fn) => {
return typeof fn === 'function'
}
</script>

View File

@ -35,7 +35,19 @@
:index="tabIndex"
:apiUrl="tabList[1].apiUrl"
:params="tabList[1].params"
></MescrollItem>
>
<template v-slot="{ list }">
<view class="space-y-15rpx p-base">
<view v-for="(item, i) in list" :key="i">
<Item
:item="item"
isCheck
:type="tabList[1].params.subject_type"
></Item>
</view>
</view>
</template>
</MescrollItem>
</view>
</template>
<script setup>
@ -64,7 +76,7 @@ const tabList = ref([
name: '任务审核',
apiUrl: '/workflow',
params: {
// aaa:111
subject_type: 'task_hygienes'
},
},
])

View File

@ -6,7 +6,7 @@ export const useUserStore = defineStore({
id: 'app-user',
state: () => ({
userInfo: null,
token: '22|ua3STGluZFzDeV1nOs4I3S9s2UCDtQp9AtVLT2jN0535e0a5',
token: null,
roles: []
}),
getters: {

View File

@ -1,6 +1,6 @@
import { createPersistedState } from 'pinia-plugin-persistedstate';
export const PERSIST_KEY_PREFIX = 'lottery';
export const PERSIST_KEY_PREFIX = 'lottery1';
export function registerPiniaPersistPlugin(pinia) {
pinia.use(createPersistedState(createPersistedStateOptions(PERSIST_KEY_PREFIX)));

View File

@ -55,6 +55,10 @@ const cfu = {
//下面是自定义format配置因除H5端外的其他端无法通过props传递函数只能通过此属性对应下标的方式来替换
"formatter":{
"yAxisDemo1":function(val, index, opts){return val+'元'},
"ssss":function(val,index,opts){
console.log((index % 5)==0?val:'');
return (index % 8)==0?val:''
},
"yAxisDemo2":function(val, index, opts){return val.toFixed(2)},
"xAxisDemo1":function(val, index, opts){return val+'年';},
"xAxisDemo2":function(val, index, opts){return formatDateTime(val,'h:m')},

7632
yarn.lock

File diff suppressed because it is too large Load Diff