diff --git a/src/views/Config/Global/ImageConfig/components/UploadDialog.vue b/src/views/Config/Global/ImageConfig/components/UploadDialog.vue
index 4ed1ee1..be27ff0 100644
--- a/src/views/Config/Global/ImageConfig/components/UploadDialog.vue
+++ b/src/views/Config/Global/ImageConfig/components/UploadDialog.vue
@@ -96,14 +96,14 @@ watch(visible, (newVal) => {
-
+
diff --git a/src/views/Config/Global/MusicConfig/components/UploadDialog.vue b/src/views/Config/Global/MusicConfig/components/UploadDialog.vue
index 3d566f4..e9a88ff 100644
--- a/src/views/Config/Global/MusicConfig/components/UploadDialog.vue
+++ b/src/views/Config/Global/MusicConfig/components/UploadDialog.vue
@@ -9,6 +9,7 @@ import CustomDialog from '@/components/Dialog/index.vue'
import FileUpload from '@/components/FileUpload/index.vue'
import useStore from '@/store'
+const { t } = useI18n()
const toast = useToast()
const limitType = ref('audio/*')
const visible = defineModel('visible', {
@@ -41,7 +42,7 @@ async function uploadFile(fileData: IFileData | null) {
const isAudio = /audio*/.test(fileData?.type || '')
if (!isAudio) {
toast.open({
- message: '不是音频文件',
+ message: t('error.notAudioFile'),
type: 'error',
position: 'top-right',
})
@@ -71,7 +72,7 @@ function submitUpload() {
})
.then(() => {
toast.open({
- message: '上传成功',
+ message: t('error.uploadSuccess'),
type: 'success',
position: 'top-right',
})
@@ -79,7 +80,7 @@ function submitUpload() {
})
.catch(() => {
toast.open({
- message: '上传失败',
+ message: t('error.uploadFail'),
type: 'error',
position: 'top-right',
})
@@ -97,14 +98,14 @@ watch(visible, (newVal) => {
-
+
diff --git a/src/views/Config/Global/MusicConfig/index.vue b/src/views/Config/Global/MusicConfig/index.vue
index 6e878fd..4ce8586 100644
--- a/src/views/Config/Global/MusicConfig/index.vue
+++ b/src/views/Config/Global/MusicConfig/index.vue
@@ -5,6 +5,7 @@ import { storeToRefs } from 'pinia'
import { ref } from 'vue'
import { useI18n } from 'vue-i18n'
import PageHeader from '@/components/PageHeader/index.vue'
+import { sidebar } from '@/locales/modules'
import useStore from '@/store'
import UploadDialog from './components/UploadDialog.vue'
@@ -41,7 +42,7 @@ function deleteAll() {
-
+
{{ t('table.luckyPeopleNumber') }}:
diff --git a/src/views/Config/Person/PersonAll/useViewModel.ts b/src/views/Config/Person/PersonAll/useViewModel.ts
index b23318f..4710fce 100644
--- a/src/views/Config/Person/PersonAll/useViewModel.ts
+++ b/src/views/Config/Person/PersonAll/useViewModel.ts
@@ -3,6 +3,7 @@ import type { IPersonConfig } from '@/types/storeType'
import { storeToRefs } from 'pinia'
import { v4 as uuidv4 } from 'uuid'
import { inject, ref, toRaw } from 'vue'
+import { useI18n } from 'vue-i18n'
import { useToast } from 'vue-toast-notification'
import * as XLSX from 'xlsx'
import { loadingKey } from '@/components/Loading'
@@ -16,176 +17,177 @@ import ImportExcelWorker from './importExcel.worker?worker'
type IBasePersonConfig = Pick
export function useViewModel({ exportInputFileRef }: { exportInputFileRef: Ref }) {
- const baseUrl = import.meta.env.BASE_URL
- const toast = useToast()
- const worker: Worker | null = new ImportExcelWorker()
- const loading = inject(loadingKey)
- const personConfig = useStore().personConfig
- const { getAllPersonList: allPersonList, getAlreadyPersonList: alreadyPersonList } = storeToRefs(personConfig)
- const tableColumnList = tableColumns({ handleDeletePerson: delPersonItem })
- const addPersonModalVisible = ref(false)
- const singlePersonData = ref({
- uid: '',
- name: '',
- department: '',
- avatar: '',
- identity: '',
- })
- async function getExcelTemplateContent() {
- const locale = i18n.global.locale.value
- if (locale === 'zhCn') {
- const templateData = await readLocalFileAsArraybuffer(`${import.meta.env.BASE_URL}人口登记表-zhCn.xlsx`)
- return templateData
- }
- else {
- const templateData = await readLocalFileAsArraybuffer(`${import.meta.env.BASE_URL}personListTemplate-en.xlsx`)
- return templateData
- }
+ const { t } = useI18n()
+ const baseUrl = import.meta.env.BASE_URL
+ const toast = useToast()
+ const worker: Worker | null = new ImportExcelWorker()
+ const loading = inject(loadingKey)
+ const personConfig = useStore().personConfig
+ const { getAllPersonList: allPersonList, getAlreadyPersonList: alreadyPersonList } = storeToRefs(personConfig)
+ const tableColumnList = tableColumns({ handleDeletePerson: delPersonItem })
+ const addPersonModalVisible = ref(false)
+ const singlePersonData = ref({
+ uid: '',
+ name: '',
+ department: '',
+ avatar: '',
+ identity: '',
+ })
+ async function getExcelTemplateContent() {
+ const locale = i18n.global.locale.value
+ if (locale === 'zhCn') {
+ const templateData = await readLocalFileAsArraybuffer(`${import.meta.env.BASE_URL}人口登记表-zhCn.xlsx`)
+ return templateData
}
- /// 向worker发送消息
- function sendWorkerMessage(message: any) {
- if (worker) {
- worker.postMessage(message)
+ else {
+ const templateData = await readLocalFileAsArraybuffer(`${import.meta.env.BASE_URL}personListTemplate-en.xlsx`)
+ return templateData
+ }
+ }
+ /// 向worker发送消息
+ function sendWorkerMessage(message: any) {
+ if (worker) {
+ worker.postMessage(message)
+ }
+ }
+ /// 开始导入
+ async function startWorker(data: string) {
+ loading?.show()
+ getExcelTemplateContent()
+ sendWorkerMessage({ type: 'start', data, templateData: await getExcelTemplateContent() })
+ }
+ /**
+ * 获取用户数据
+ */
+ async function handleFileChange(e: Event) {
+ if (worker) {
+ worker.onmessage = (e) => {
+ if (e.data.type === 'done') {
+ personConfig.resetPerson()
+ personConfig.addNotPersonList(e.data.data)
+ // 提示导入成功
+ toast.open({
+ message: t('error.importSuccess'),
+ type: 'success',
+ position: 'top-right',
+ })
+ // 导入成功后清空file input
+ clearFileInput()
}
- }
- /// 开始导入
- async function startWorker(data: string) {
- loading?.show()
- getExcelTemplateContent()
- sendWorkerMessage({ type: 'start', data, templateData: await getExcelTemplateContent() })
- }
- /**
- * 获取用户数据
- */
- async function handleFileChange(e: Event) {
- if (worker) {
- worker.onmessage = (e) => {
- if (e.data.type === 'done') {
- personConfig.resetPerson()
- personConfig.addNotPersonList(e.data.data)
- // 提示导入成功
- toast.open({
- message: '导入成功',
- type: 'success',
- position: 'top-right',
- })
- // 导入成功后清空file input
- clearFileInput()
- }
- if (e.data.type === 'error') {
- toast.open({
- message: e.data.message || '导入错误',
- type: 'error',
- position: 'top-right',
- })
- // toast.warning(e.data.message || '导入错误')
- }
- loading?.hide()
- }
+ if (e.data.type === 'error') {
+ toast.open({
+ message: e.data.message || t('error.importFail'),
+ type: 'error',
+ position: 'top-right',
+ })
+ // toast.warning(e.data.message || '导入错误')
}
- const dataBinary = await readFileBinary(((e.target as HTMLInputElement).files as FileList)[0]!)
- startWorker(dataBinary)
+ loading?.hide()
+ }
}
- // 清空file input
- function clearFileInput() {
- if (exportInputFileRef.value) {
- exportInputFileRef.value.value = ''
- }
+ const dataBinary = await readFileBinary(((e.target as HTMLInputElement).files as FileList)[0]!)
+ startWorker(dataBinary)
+ }
+ // 清空file input
+ function clearFileInput() {
+ if (exportInputFileRef.value) {
+ exportInputFileRef.value.value = ''
}
- function downloadTemplate() {
- // 下载
- const templateFileName = i18n.global.t('data.xlsxName')
- const fileUrl = `${baseUrl}${templateFileName}`
- fetch(fileUrl)
- .then(res => res.blob())
- .then((blob) => {
- const url = window.URL.createObjectURL(blob)
- const a = document.createElement('a')
- a.href = url
- a.download = templateFileName
- a.click()
- toast.open({
- message: '下载成功',
- type: 'success',
- position: 'top-right',
- })
- })
+ }
+ function downloadTemplate() {
+ // 下载
+ const templateFileName = i18n.global.t('data.xlsxName')
+ const fileUrl = `${baseUrl}${templateFileName}`
+ fetch(fileUrl)
+ .then(res => res.blob())
+ .then((blob) => {
+ const url = window.URL.createObjectURL(blob)
+ const a = document.createElement('a')
+ a.href = url
+ a.download = templateFileName
+ a.click()
+ toast.open({
+ message: t('error.downloadSuccess'),
+ type: 'success',
+ position: 'top-right',
+ })
+ })
+ }
+ // 导出数据
+ function exportData() {
+ let data = JSON.parse(JSON.stringify(allPersonList.value))
+ // 排除一些字段
+ for (let i = 0; i < data.length; i++) {
+ delete data[i].x
+ delete data[i].y
+ delete data[i].id
+ delete data[i].createTime
+ delete data[i].updateTime
+ delete data[i].prizeId
+ // 修改字段名称
+ if (data[i].isWin) {
+ data[i].isWin = i18n.global.t('data.yes')
+ }
+ else {
+ data[i].isWin = i18n.global.t('data.no')
+ }
+ // 格式化数组为
+ data[i].prizeTime = data[i].prizeTime.join(',')
+ data[i].prizeName = data[i].prizeName.join(',')
}
- // 导出数据
- function exportData() {
- let data = JSON.parse(JSON.stringify(allPersonList.value))
- // 排除一些字段
- for (let i = 0; i < data.length; i++) {
- delete data[i].x
- delete data[i].y
- delete data[i].id
- delete data[i].createTime
- delete data[i].updateTime
- delete data[i].prizeId
- // 修改字段名称
- if (data[i].isWin) {
- data[i].isWin = i18n.global.t('data.yes')
- }
- else {
- data[i].isWin = i18n.global.t('data.no')
- }
- // 格式化数组为
- data[i].prizeTime = data[i].prizeTime.join(',')
- data[i].prizeName = data[i].prizeName.join(',')
- }
- let dataString = JSON.stringify(data)
- dataString = dataString
- .replaceAll(/uid/g, i18n.global.t('data.number'))
- .replaceAll(/isWin/g, i18n.global.t('data.isWin'))
- .replaceAll(/department/g, i18n.global.t('data.department'))
- .replaceAll(/name/g, i18n.global.t('data.name'))
- .replaceAll(/identity/g, i18n.global.t('data.identity'))
- .replaceAll(/prizeName/g, i18n.global.t('data.prizeName'))
- .replaceAll(/prizeTime/g, i18n.global.t('data.prizeTime'))
+ let dataString = JSON.stringify(data)
+ dataString = dataString
+ .replaceAll(/uid/g, i18n.global.t('data.number'))
+ .replaceAll(/isWin/g, i18n.global.t('data.isWin'))
+ .replaceAll(/department/g, i18n.global.t('data.department'))
+ .replaceAll(/name/g, i18n.global.t('data.name'))
+ .replaceAll(/identity/g, i18n.global.t('data.identity'))
+ .replaceAll(/prizeName/g, i18n.global.t('data.prizeName'))
+ .replaceAll(/prizeTime/g, i18n.global.t('data.prizeTime'))
- data = JSON.parse(dataString)
+ data = JSON.parse(dataString)
- if (data.length > 0) {
- const dataBinary = XLSX.utils.json_to_sheet(data)
- const dataBinaryBinary = XLSX.utils.book_new()
- XLSX.utils.book_append_sheet(dataBinaryBinary, dataBinary, 'Sheet1')
- XLSX.writeFile(dataBinaryBinary, 'data.xlsx')
- }
+ if (data.length > 0) {
+ const dataBinary = XLSX.utils.json_to_sheet(data)
+ const dataBinaryBinary = XLSX.utils.book_new()
+ XLSX.utils.book_append_sheet(dataBinaryBinary, dataBinary, 'Sheet1')
+ XLSX.writeFile(dataBinaryBinary, 'data.xlsx')
}
+ }
- function resetData() {
- personConfig.resetAlreadyPerson()
- }
+ function resetData() {
+ personConfig.resetAlreadyPerson()
+ }
- function deleteAll() {
- personConfig.deleteAllPerson()
- }
+ function deleteAll() {
+ personConfig.deleteAllPerson()
+ }
- function delPersonItem(row: IPersonConfig) {
- personConfig.deletePerson(row)
- }
- function addOnePerson(addOnePersonDrawerRef: any, event: any) {
- event.preventDefault()
- // 表单中的验证信息清除
+ function delPersonItem(row: IPersonConfig) {
+ personConfig.deletePerson(row)
+ }
+ function addOnePerson(addOnePersonDrawerRef: any, event: any) {
+ event.preventDefault()
+ // 表单中的验证信息清除
- const personData = addOtherInfo([toRaw(singlePersonData.value)])
- personData[0].id = uuidv4()
- personConfig.addOnePerson(personData)
- // singlePersonData.value = {} as IBasePersonConfig
- addOnePersonDrawerRef.closeDrawer()
- singlePersonData.value = {} as IBasePersonConfig
- }
- return {
- resetData,
- deleteAll,
- handleFileChange,
- exportData,
- alreadyPersonList,
- allPersonList,
- tableColumnList,
- addOnePerson,
- addPersonModalVisible,
- singlePersonData,
- downloadTemplate,
- }
+ const personData = addOtherInfo([toRaw(singlePersonData.value)])
+ personData[0].id = uuidv4()
+ personConfig.addOnePerson(personData)
+ // singlePersonData.value = {} as IBasePersonConfig
+ addOnePersonDrawerRef.closeDrawer()
+ singlePersonData.value = {} as IBasePersonConfig
+ }
+ return {
+ resetData,
+ deleteAll,
+ handleFileChange,
+ exportData,
+ alreadyPersonList,
+ allPersonList,
+ tableColumnList,
+ addOnePerson,
+ addPersonModalVisible,
+ singlePersonData,
+ downloadTemplate,
+ }
}
diff --git a/src/views/Config/Person/PersonAlready/index.vue b/src/views/Config/Person/PersonAlready/index.vue
index 3e13249..b9efaae 100644
--- a/src/views/Config/Person/PersonAlready/index.vue
+++ b/src/views/Config/Person/PersonAlready/index.vue
@@ -2,7 +2,6 @@
import { useI18n } from 'vue-i18n'
import DaiysuiTable from '@/components/DaiysuiTable/index.vue'
import PageHeader from '@/components/PageHeader/index.vue'
-import { Switch } from '@/components/ui/switch'
import { useViewModel } from './useViewModel'
const { t } = useI18n()
diff --git a/src/views/Config/Prize/usePrizeConfig.ts b/src/views/Config/Prize/usePrizeConfig.ts
index 4922fab..a7b5b97 100644
--- a/src/views/Config/Prize/usePrizeConfig.ts
+++ b/src/views/Config/Prize/usePrizeConfig.ts
@@ -8,133 +8,133 @@ import i18n from '@/locales/i18n'
import useStore from '@/store'
export function usePrizeConfig() {
- const toast = useToast()
- const imageDbStore = localforage.createInstance({
- name: 'imgStore',
- })
- const prizeConfig = useStore().prizeConfig
- const globalConfig = useStore().globalConfig
- const { getPrizeConfig: localPrizeList, getCurrentPrize: currentPrize } = storeToRefs(prizeConfig)
+ const toast = useToast()
+ const imageDbStore = localforage.createInstance({
+ name: 'imgStore',
+ })
+ const prizeConfig = useStore().prizeConfig
+ const globalConfig = useStore().globalConfig
+ const { getPrizeConfig: localPrizeList, getCurrentPrize: currentPrize } = storeToRefs(prizeConfig)
- const { getImageList: localImageList } = storeToRefs(globalConfig)
- const imgList = ref([])
+ const { getImageList: localImageList } = storeToRefs(globalConfig)
+ const imgList = ref([])
- const prizeList = ref(cloneDeep(localPrizeList.value))
- const selectedPrize = ref()
+ const prizeList = ref(cloneDeep(localPrizeList.value))
+ const selectedPrize = ref()
- function selectPrize(item: IPrizeConfig) {
- selectedPrize.value = item
- selectedPrize.value.isUsedCount = 0
- selectedPrize.value.isUsed = false
+ function selectPrize(item: IPrizeConfig) {
+ selectedPrize.value = item
+ selectedPrize.value.isUsedCount = 0
+ selectedPrize.value.isUsed = false
- if (selectedPrize.value.separateCount.countList.length > 1) {
- return
- }
- selectedPrize.value.separateCount = {
- enable: true,
- countList: [
- {
- id: '0',
- count: item.count,
- isUsedCount: 0,
- },
- ],
- }
+ if (selectedPrize.value.separateCount.countList.length > 1) {
+ return
}
+ selectedPrize.value.separateCount = {
+ enable: true,
+ countList: [
+ {
+ id: '0',
+ count: item.count,
+ isUsedCount: 0,
+ },
+ ],
+ }
+ }
- function changePrizeStatus(item: IPrizeConfig) {
- item.isUsed ? item.isUsedCount = 0 : item.isUsedCount = item.count
- item.separateCount.countList = []
- item.isUsed = !item.isUsed
- }
+ function changePrizeStatus(item: IPrizeConfig) {
+ item.isUsed ? item.isUsedCount = 0 : item.isUsedCount = item.count
+ item.separateCount.countList = []
+ item.isUsed = !item.isUsed
+ }
- function 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
- }
+ function 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
+ }
}
- function submitData(value: any) {
- selectedPrize.value!.separateCount.countList = value
- selectedPrize.value = null
+ 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
}
+ }
+ function submitData(value: any) {
+ selectedPrize.value!.separateCount.countList = value
+ selectedPrize.value = null
+ }
- async function getImageDbStore() {
- const keys = await imageDbStore.keys()
- if (keys.length > 0) {
- imageDbStore.iterate((value, key) => {
- imgList.value.push({
- key,
- value,
- })
- })
- }
+ async function getImageDbStore() {
+ const keys = await imageDbStore.keys()
+ if (keys.length > 0) {
+ imageDbStore.iterate((value, key) => {
+ imgList.value.push({
+ key,
+ value,
+ })
+ })
}
+ }
- function delItem(item: IPrizeConfig) {
- prizeConfig.deletePrizeConfig(item.id)
- toast.success('删除成功')
+ function delItem(item: IPrizeConfig) {
+ prizeConfig.deletePrizeConfig(item.id)
+ toast.success(i18n.global.t('error.deleteSuccess'))
+ }
+ function addPrize() {
+ const defaultPrizeCOnfig: IPrizeConfig = {
+ id: new Date().getTime().toString(),
+ name: i18n.global.t('data.prizeName'),
+ sort: 0,
+ isAll: false,
+ count: 1,
+ isUsedCount: 0,
+ picture: {
+ id: '',
+ name: '',
+ url: '',
+ },
+ separateCount: {
+ enable: false,
+ countList: [],
+ },
+ desc: '',
+ isUsed: false,
+ isShow: true,
+ frequency: 1,
}
- function addPrize() {
- const defaultPrizeCOnfig: IPrizeConfig = {
- id: new Date().getTime().toString(),
- name: i18n.global.t('data.prizeName'),
- sort: 0,
- isAll: false,
- count: 1,
- isUsedCount: 0,
- picture: {
- id: '',
- name: '',
- url: '',
- },
- separateCount: {
- enable: false,
- countList: [],
- },
- desc: '',
- isUsed: false,
- isShow: true,
- frequency: 1,
- }
- prizeList.value.push(defaultPrizeCOnfig)
- toast.success('添加成功')
- }
- function resetDefault() {
- prizeConfig.resetDefault()
- prizeList.value = cloneDeep(localPrizeList.value)
- toast.success('重置成功')
- }
- async function delAll() {
- prizeList.value = []
- toast.success('删除成功')
- }
- onMounted(() => {
- getImageDbStore()
- })
- watch(() => prizeList.value, (val: IPrizeConfig[]) => {
- prizeConfig.setPrizeConfig(val)
- }, { deep: true })
+ prizeList.value.push(defaultPrizeCOnfig)
+ toast.success(i18n.global.t('error.success'))
+ }
+ function resetDefault() {
+ prizeConfig.resetDefault()
+ prizeList.value = cloneDeep(localPrizeList.value)
+ toast.success(i18n.global.t('error.success'))
+ }
+ async function delAll() {
+ prizeList.value = []
+ toast.success(i18n.global.t('error.success'))
+ }
+ onMounted(() => {
+ getImageDbStore()
+ })
+ watch(() => prizeList.value, (val: IPrizeConfig[]) => {
+ prizeConfig.setPrizeConfig(val)
+ }, { deep: true })
- return {
- addPrize,
- resetDefault,
- delAll,
- delItem,
- prizeList,
- currentPrize,
- selectedPrize,
- submitData,
- changePrizePerson,
- changePrizeStatus,
- selectPrize,
- localImageList,
- }
+ return {
+ addPrize,
+ resetDefault,
+ delAll,
+ delItem,
+ prizeList,
+ currentPrize,
+ selectedPrize,
+ submitData,
+ changePrizePerson,
+ changePrizeStatus,
+ selectPrize,
+ localImageList,
+ }
}
diff --git a/src/views/Config/index.vue b/src/views/Config/index.vue
index 0773c0e..0f4dfcd 100644
--- a/src/views/Config/index.vue
+++ b/src/views/Config/index.vue
@@ -69,7 +69,7 @@ function skip(path: string) {
-