fix: fix and new feature

This commit is contained in:
ex_zhangwenlei@exiot.cmcc
2024-01-27 00:43:09 +08:00
parent 31f3fb6309
commit a284ad7ba2
10 changed files with 236 additions and 149 deletions

View File

@@ -1,7 +1,6 @@
<script setup lang='ts'>
import { ref, watch, onMounted } from 'vue'
import useStore from '@/store'
import { filterData } from '@/utils'
import { storeToRefs } from 'pinia'
import { themeChange } from 'theme-change';
import zod from 'zod';
@@ -69,10 +68,8 @@ const resetPersonLayout = () => {
return
}
const allPersonList = alreadyPersonList.value.concat(notPersonList.value)
const newList = filterData(allPersonList, rowCountValue.value)
const newAlreadyPersonList = newList.slice(0, alreadyLen)
const newNotPersonList = newList.slice(alreadyLen, notLen + alreadyLen)
const newAlreadyPersonList = allPersonList.slice(0, alreadyLen)
const newNotPersonList = allPersonList.slice(alreadyLen, notLen + alreadyLen)
personConfig.deleteAllPerson()
personConfig.addNotPersonList(newNotPersonList)
personConfig.addAlreadyPersonList(newAlreadyPersonList, null)
@@ -238,11 +235,6 @@ onMounted(() => {
</div>
<input type="number" v-model="cardSizeValue.width" placeholder="Type here"
class="w-full max-w-xs input input-bordered" />
<div class="help">
<span class="text-sm text-red-400 help-text" v-if="formErr.rowCount">
{{ formErr.rowCount }}
</span>
</div>
</div>
<div>
<div class="label">
@@ -250,11 +242,6 @@ onMounted(() => {
</div>
<input type="number" v-model="cardSizeValue.height" placeholder="Type here"
class="w-full max-w-xs input input-bordered" />
<div class="help">
<span class="text-sm text-red-400 help-text" v-if="formErr.rowCount">
{{ formErr.rowCount }}
</span>
</div>
</div>
</label>
<label class="w-full max-w-xs mb-10 form-control">

View File

@@ -6,27 +6,23 @@ import { IPersonConfig } from '@/types/storeType';
import { storeToRefs } from 'pinia'
import * as XLSX from 'xlsx'
import { readFileBinary } from '@/utils/file'
import { filterData, addOtherInfo } from '@/utils'
import { addOtherInfo } from '@/utils'
import DaiysuiTable from '@/components/DaiysuiTable/index.vue'
const personConfig = useStore().personConfig
const globalConfig = useStore().globalConfig
const { getAllPersonList: allPersonList, getAlreadyPersonList: alreadyPersonList } = storeToRefs(personConfig)
const { getRowCount: rowCount } = storeToRefs(globalConfig)
const limitType = '.xlsx,.xls'
const excelData = ref<any[]>([])
// const personList = ref<any[]>([])
const resetDataDialog=ref()
const delAllDataDialog=ref()
const resetDataDialog = ref()
const delAllDataDialog = ref()
const handleFileChange = async (e: Event) => {
let dataBinary = await readFileBinary(((e.target as HTMLInputElement).files as FileList)[0]!)
let workBook = XLSX.read(dataBinary, { type: 'binary', cellDates: true })
let workSheet = workBook.Sheets[workBook.SheetNames[0]]
excelData.value = XLSX.utils.sheet_to_json(workSheet)
const uploadData = filterData(excelData.value, rowCount.value)
const allData = addOtherInfo(uploadData);
const excelData = XLSX.utils.sheet_to_json(workSheet)
const allData = addOtherInfo(excelData);
personConfig.resetPerson()
personConfig.addNotPersonList(allData)
}
@@ -47,8 +43,8 @@ const exportData = () => {
data[i].isWin = '否'
}
// 格式化数组为
data[i].prizeTime=data[i].prizeTime.join(',')
data[i].prizeName=data[i].prizeName.join(',')
data[i].prizeTime = data[i].prizeTime.join(',')
data[i].prizeName = data[i].prizeName.join(',')
}
let dataString = JSON.stringify(data)
dataString = dataString
@@ -159,7 +155,7 @@ onMounted(() => {
</div>
</dialog>
<div class="min-w-1000px">
<h2>人员管理</h2>
<div class="flex gap-3">
<button class="btn btn-error btn-sm" @click="delAllDataDialog.showModal()">全部删除</button>

View File

@@ -64,27 +64,43 @@ const selectPrize = (item: IPrizeConfig) => {
}
}
const changePrizeStatus=(item:IPrizeConfig)=>{
if(item.isUsed==true){
item.isUsedCount=0;
if(item.separateCount&&item.separateCount.countList.length){
item.separateCount.countList.forEach((countItem:any)=>{
countItem.isUsedCount=0;
})
}
}
else{
item.isUsedCount=item.count;
if(item.separateCount&&item.separateCount.countList.length){
item.separateCount.countList.forEach((countItem:any)=>{
countItem.isUsedCount=countItem.count;
})
}
}
item.isUsed=!item.isUsed
const changePrizeStatus = (item: IPrizeConfig) => {
// if (item.isUsed == true) {
// item.isUsedCount = 0;
// if (item.separateCount && item.separateCount.countList.length) {
// item.separateCount.countList.forEach((countItem: any) => {
// countItem.isUsedCount = 0;
// })
// }
// }
// else {
// item.isUsedCount = item.count;
// if (item.separateCount && item.separateCount.countList.length) {
// item.separateCount.countList.forEach((countItem: any) => {
// countItem.isUsedCount = countItem.count;
// })
// }
// }
item.isUsed?item.isUsedCount=0:item.isUsedCount=item.count;
item.separateCount.countList = []
item.isUsed = !item.isUsed
}
const clearSelectedPrize = (value:any) => {
selectedPrize.value!.separateCount.countList=value;
const changePrizePerson = (item: IPrizeConfig) => {
let indexPrize = -1;
for (let i = 0; i < prizeList.value.length; i++) {
if (prizeList.value[i].id == item.id) {
indexPrize = i;
break;
}
}
if (indexPrize > -1) {
prizeList.value[indexPrize].separateCount.countList = []
prizeList.value[indexPrize].isUsed?prizeList.value[indexPrize].isUsedCount=prizeList.value[indexPrize].count:prizeList.value[indexPrize].isUsedCount=0
}
}
const submitData = (value: any) => {
selectedPrize.value!.separateCount.countList = value;
selectedPrize.value = null
}
const resetDefault = () => {
@@ -176,9 +192,9 @@ watch(() => prizeList.value, (val: IPrizeConfig[]) => {
<div class="label">
<span class="label-text">抽奖人数</span>
</div>
<input type="number" v-model="item.count" placeholder="获奖人数"
<input type="number" v-model="item.count" placeholder="获奖人数" @change="changePrizePerson(item)"
class="w-full max-w-xs p-0 m-0 input-sm input input-bordered" />
<div class="tooltip tooltip-bottom" :data-tip="'已抽取:'+item.isUsedCount + '/' + item.count">
<div class="tooltip tooltip-bottom" :data-tip="'已抽取:' + item.isUsedCount + '/' + item.count">
<progress class="w-full progress" :value="item.isUsedCount" :max="item.count"></progress>
</div>
</label>
@@ -193,8 +209,7 @@ watch(() => prizeList.value, (val: IPrizeConfig[]) => {
<div class="label">
<span class="label-text">已抽取</span>
</div>
<input type="checkbox" :checked="item.isUsed"
@change="changePrizeStatus(item)"
<input type="checkbox" :checked="item.isUsed" @change="changePrizeStatus(item)"
class="mt-2 border-solid checkbox checkbox-secondary border-1" />
</label>
<label class="w-full max-w-xs mb-10 form-control">
@@ -217,11 +232,12 @@ watch(() => prizeList.value, (val: IPrizeConfig[]) => {
v-if="item.separateCount.countList.length">
<li class="relative flex items-center justify-center w-8 h-8 bg-slate-600/60 separated"
v-for="se in item.separateCount.countList" :key="se.id">
<div class="flex items-center justify-center w-full h-full tooltip" :data-tip="'已抽取:'+se.isUsedCount + '/' + se.count">
<div class="absolute left-0 z-50 h-full bg-blue-300/80"
:style="`width:${se.isUsedCount * 100 / se.count}%`"></div>
<span>{{ se.count }}</span>
</div>
<div class="flex items-center justify-center w-full h-full tooltip"
:data-tip="'已抽取:' + se.isUsedCount + '/' + se.count">
<div class="absolute left-0 z-50 h-full bg-blue-300/80"
:style="`width:${se.isUsedCount * 100 / se.count}%`"></div>
<span>{{ se.count }}</span>
</div>
</li>
</ul>
<button v-else class="btn btn-secondary btn-xs">设置</button>
@@ -238,7 +254,7 @@ watch(() => prizeList.value, (val: IPrizeConfig[]) => {
</li>
</ul>
<EditSeparateDialog :totalNumber="selectedPrize?.count" :separated-number="selectedPrize?.separateCount.countList"
@clearData="clearSelectedPrize" />
@submitData="submitData" />
</div>
</template>