123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- <template>
- <div class="app-container" ref="appContainer">
- <PropTable :loading="loading" @selection-change="selectionChange" :columns="column" :data="list" @reset="reset"
- @onSubmit="onSubmit">
- <template v-slot:btn>
- <div style="display: flex; justify-content: flex-end">
- <el-button type="primary" @click="importByExcel"><el-icon>
- <Upload />
- </el-icon>导入</el-button>
- <el-button type="primary" @click="add"><el-icon>
- <plus />
- </el-icon>添加</el-button>
- <el-button type="danger" @click="batchDelete"><el-icon>
- <delete />
- </el-icon>删除</el-button>
- </div>
- </template>
- <template v-slot:isOpenSvr="scope">{{ getIsOpenSvrLabel(scope.row.isOpenSvr) }}</template>
- <template v-slot:operation="scope">
- <el-button type="primary" size="small" icon="Edit" @click="edit(scope.row)">
- 编辑
- </el-button>
- <el-button @click="del(scope.row)" type="danger" size="small" icon="Delete">
- 删除
- </el-button>
- </template>
- </PropTable>
- <el-dialog v-model="dialogVisible" :title='title' width="50%">
- <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm"
- :size="formSize">
- <el-form-item label="ID" prop="id">
- <el-input v-model="ruleForm.id" type="number"/>
- </el-form-item>
- <el-form-item label="模版名称" prop="name">
- <el-input v-model="ruleForm.name" />
- </el-form-item>
- <el-form-item label="模版描述" prop="des">
- <el-input v-model="ruleForm.des" />
- </el-form-item>
- <el-form-item label="模版奖励" prop="reward">
- <el-input v-model="ruleForm.reward" />
- </el-form-item>
- <el-form-item label="模版备注" prop="remark">
- <el-input v-model="ruleForm.remark" />
- </el-form-item>
- <el-form-item label="持续天数" prop="keepDay">
- <el-input v-model="ruleForm.keepDay" type="number"/>
- </el-form-item>
- <el-form-item label="停留天数" prop="stayDay">
- <el-input v-model="ruleForm.stayDay" type="number"/>
- </el-form-item>
- <el-form-item label="开服活动" prop="isOpenSvr">
- <el-radio-group v-model="ruleForm.isOpenSvr">
- <el-radio :label="0">否</el-radio>
- <el-radio :label="1">是</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-form>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="dialogVisible = false">取消</el-button>
- <el-button type="primary" @click="handleClose(ruleFormRef)">确定</el-button>
- </span>
- </template>
- </el-dialog>
- <el-dialog v-model="importVisible" :title='title' width="70%" @close="importClose">
- <PageWrapLayout class="m-upload-excel">
- <el-upload style="width: 100%" ref="upload" class="upload-demo" drag action="/" :before-upload="beforeUploadAction" type="file"
- accept=".xlsx, .xls" :limit="1" :on-remove="handleRemove">
- <el-icon class="el-icon--upload"><upload-filled /></el-icon>
- <div class="el-upload__text"> 拖拽上传 <em>或者点击上传 Excel</em> </div>
- </el-upload>
- <div>
- <el-table :data="tableData" border highlight-current-row style="width: 100%; margin-top: 20px">
- <el-table-column v-for="item of tableHeader" :prop="item.value" :label="item.label" :key="item">
- </el-table-column>
- </el-table>
- </div>
- </PageWrapLayout>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="importClose">取消</el-button>
- <el-button type="primary" @click="handleConfirm">确定</el-button>
- </span>
- </template>
- </el-dialog>
- </div>
- </template>
- <script lang="ts" setup name="comprehensive">
- import { ref, reactive, onMounted, nextTick, onBeforeMount } from 'vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance } from 'element-plus'
- import activityTemplateApi from '@/api/activityTemplate'
- import dateUtils from '@/common/dateUtils'
- const loading = ref(true)
- const appContainer = ref(null)
- import PropTable from '@/components/Table/PropTable/index.vue'
- // import { ref } from 'vue'
- import ExcelJS from 'exceljs'
- import { UploadFilled } from '@element-plus/icons-vue'
- import type { UploadProps, UploadInstance } from 'element-plus'
- // import { ElMessage } from 'element-plus'
- const tableData = ref([])
- const tableHeader = ref([])
- const upload = ref<UploadInstance>()
- const tableColumn = ["id","name","des","reward","remark","keepDay","stayDay","isOpenSvr"]
- const beforeUploadAction = (file, fileLi) => {
- return new Promise((resolve, reject) => {
- const reader = new FileReader()
- reader.onload = async (e) => {
- const data = e.target.result
- const workbook = new ExcelJS.Workbook()
- try {
- let res = await workbook.xlsx.load(data)
- const sheets =
- res._worksheets && res._worksheets.filter((item) => typeof item !== 'undefined')
- const table = []
- let headers = []
- sheets.forEach((sheet) => {
- sheet._rows.forEach((row, index) => {
- if (index === 0) {
- row.values.forEach((it, i) => {
- // console.log("string" + it + " " + i + "" + tableColumn[i])
- headers.push({label: it, value: tableColumn[i - 1]})
- })
- } else {
- let obj = {}
- let arr = []
- row.values.forEach((it) => {
- arr.push(it)
- })
- tableColumn.forEach((ite, i) => {
- if (arr[i] == undefined) {
- obj[ite] = null
- } else {
- obj[ite] = arr[i]
- }
- })
- table.push(obj)
- }
- // const tableRow = {
- // position: "",
- // val: "",
- // };
- // row._cells.forEach((cell) => {
- // tableRow.position = cell._address;
- // tableRow.val = cell._value.model.value || "";
- // });
- })
- })
- tableData.value = table
- tableHeader.value = headers
- console.log("table", table)
- console.log("headers", headers)
- } catch (e) {
- ElMessage.error('解析失败')
- }
- }
- reader.readAsArrayBuffer(file)
- })
- }
- const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
- tableData.value = null
- tableHeader.value = null
- }
- const data = ref([])
- let currPageNum = 1;
- const pageSize = 1000;
- onBeforeMount(() => {
- loadActivityTemplateInfo()
- })
- const loadActivityTemplateInfo = () => {
- let queryParams = reactive({
- pageNum: currPageNum,
- pageSize: pageSize
- })
- activityTemplateApi.query(queryParams).then(res => {
- data.value = res.data.result;
- console.log(data)
- })
- }
- const column = [
- { type: 'selection', width: 60, fixed: 'left' },
- { name: 'id', label: 'ID', width: 80 },
- { name: 'name', label: '模版名称', inSearch: true, valueType: 'input' },
- { name: 'des', label: '模版描述'},
- { name: 'reward', label: '模版奖励'},
- { name: 'remark', label: '模版备注'},
- { name: 'keepDay', label: '持续天数'},
- { name: 'stayDay', label: '停留天数'},
- { name: 'isOpenSvr', label: '开服活动', slot: true },
- { name: 'operation', slot: true, fixed: 'right', width: 200, label: '操作' },
- ]
- const getIsOpenSvrLabel = (val) => {
- if (val == 0) {
- return '否'
- } else if (val == 1) {
- return '是'
- }
- }
- const list = ref(data)
- const formSize = ref('default')
- const ruleFormRef = ref<FormInstance>()
- const ruleForm = reactive({
- id: null,
- name: null,
- des: null,
- reward: null,
- remark: null,
- keepDay: null,
- stayDay: null,
- isOpenSvr:0
- })
- const rules = reactive({
- name: [
- {
- required: true,
- message: '请输入名称',
- trigger: 'change',
- },
- ],
- keepDay: [
- {
- required: true,
- message: '请输入持续天数',
- trigger: 'change',
- },
- ]
- })
- const dialogVisible = ref(false)
- const importVisible = ref(false)
- const rowObj = ref({})
- const selectObj = ref([])
- const title = ref('详情')
- const importClose = () => {
- importVisible.value = false
- upload.value!.clearFiles()
- tableData.value = null
- tableHeader.value = null
- }
- const importByExcel = () => {
- title.value = '导入'
- importVisible.value = true
- tableData.value = null
- tableHeader.value = null
- }
- const add = () => {
- title.value = '新增'
- dialogVisible.value = true
- ruleForm.id = null
- ruleForm.name = null
- ruleForm.des = null
- ruleForm.reward = null
- ruleForm.remark = null
- ruleForm.keepDay = null
- ruleForm.stayDay = null
- ruleForm.isOpenSvr = 0
- }
- const handleConfirm = () => {
- // 验证table数据
- // ...
- let importParams = reactive({
- importValue: tableData.value
- })
- activityTemplateApi.importBatch(importParams).then(res => {
- console.log('result', res)
- if (res.data.code = 200) {
- loadActivityTemplateInfo()
- importVisible.value = false
- return ElMessage.success(res.data.msg)
- } else {
- return ElMessage.error(res.data.msg)
- }
- })
- console.log('import submit!')
- }
- const handleClose = async (done: () => void) => {
- await ruleFormRef.value.validate((valid, fields) => {
- if (valid) {
- if (title.value == '新增') {
- activityTemplateApi.add(ruleForm).then(res => {
- console.log('result', res)
- if (res.data.code = 200) {
- loadActivityTemplateInfo()
- dialogVisible.value = false
- return ElMessage.success(res.data.msg)
- } else {
- return ElMessage.error(res.data.msg)
- }
- })
- console.log('add submit!')
- } else {
- // let updateParams = reactive({
- // id: rowObj.value.id,
- // updateValue: ruleForm
- // })
- activityTemplateApi.update(ruleForm).then(res => {
- if (res.data.code = 200) {
- loadActivityTemplateInfo()
- dialogVisible.value = false
- return ElMessage.success('修改成功')
- } else {
- return ElMessage.error('修改失败')
- }
- })
- console.log('update submit!')
- }
- console.log('submit!', ruleForm)
- } else {
- console.log('error submit!', fields)
- }
- })
- }
- const batchDelete = () => {
- if (!selectObj.value.length) {
- return ElMessage.error('未选中任何行')
- }
- ElMessageBox.confirm('你确定要删除选中项吗?', '温馨提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- draggable: true,
- })
- .then(() => {
- let selectActivityTemplateIds = reactive([])
- for (let value of selectObj.value) {
- selectActivityTemplateIds.push(value.id)
- }
- let deleteParams = reactive({
- actTemIds: selectActivityTemplateIds
- })
- activityTemplateApi.deleteBatch(deleteParams).then(res => {
- loadActivityTemplateInfo()
- ElMessage.success('批量删除成功')
- })
- list.value = list.value.concat([])
- })
- .catch(() => { })
- }
- const selectionChange = (val) => {
- selectObj.value = val
- }
- const edit = (row) => {
- title.value = '编辑'
- rowObj.value = row
- dialogVisible.value = true
- ruleForm.id = row.id.toString()
- ruleForm.name = row.name
- ruleForm.des = row.des
- ruleForm.reward = row.reward
- ruleForm.remark = row.remark
- ruleForm.keepDay = row.keepDay.toString()
- ruleForm.stayDay = row.stayDay == null ? row.stayDay : row.stayDay.toString()
- ruleForm.isOpenSvr = row.isOpenSvr
- }
- const del = (row) => {
- console.log('row==', row)
- ElMessageBox.confirm('你确定要删除当前项吗?', '温馨提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- draggable: true,
- })
- .then(() => {
- let deleteParams = reactive({
- id: row.id
- })
- activityTemplateApi.delete(deleteParams).then(res => {
- loadActivityTemplateInfo()
- ElMessage.success('删除成功')
- })
- loading.value = true
- setTimeout(() => {
- loading.value = false
- }, 500)
- })
- .catch(() => { })
- }
- const reset = () => {
- loadActivityTemplateInfo()
- loading.value = true
- setTimeout(() => {
- loading.value = false
- }, 500)
- ElMessage.success('重置成功')
- }
- const onSubmit = (val) => {
- if ((val.name == null || val.name == "") && val.isOpenSvr == null) {
- ElMessage.warning('请输入查询条件')
- return
- }
- let queryParams = reactive({
- pageNum: 1,
- pageSize: pageSize,
- condition: val
- })
- activityTemplateApi.query(queryParams).then(res => {
- data.value = res.data.result;
- console.log(data.value)
- })
- loading.value = true
- setTimeout(() => {
- loading.value = false
- }, 500)
- }
- const getHeight = () => {
- }
- onMounted(() => {
- nextTick(() => {
- // let data = appContainer.value.
- })
- setTimeout(() => {
- loading.value = false
- }, 500)
- })
- </script>
- <style scoped>
- .edit-input {
- padding-right: 100px;
- }
- .app-container {
- flex: 1;
- display: flex;
- width: 100%;
- padding: 16px;
- box-sizing: border-box;
- }
- .cancel-btn {
- position: absolute;
- right: 15px;
- top: 10px;
- }
- .m-upload-excel {
- .el-upload {
- width: 100%;
- }
- .el-upload-dragger {
- width: 100%;
- }
- }
- </style>
|