commit
This commit is contained in:
+1
-1
@@ -182,7 +182,7 @@ public class ActUserController {
|
|||||||
@At
|
@At
|
||||||
@SaCheckPermission("activity.user")
|
@SaCheckPermission("activity.user")
|
||||||
public Result getActivityList(String year){
|
public Result getActivityList(String year){
|
||||||
List<Activity> activityList = dao.query(Activity.class, Cnd.where("YEAR(startTime)", "=", year).and(Activity::getDelFlag, "=", false));
|
List<Activity> activityList = dao.query(Activity.class, Cnd.NEW().andEX("YEAR(startTime)", "=", year).and(Activity::getDelFlag, "=", false));
|
||||||
return Result.success(activityList);
|
return Result.success(activityList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+123
@@ -0,0 +1,123 @@
|
|||||||
|
package com.budwk.app.module.activity.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.budwk.app.base.page.PageForm;
|
||||||
|
import com.budwk.app.base.page.Pagination;
|
||||||
|
import com.budwk.app.base.result.Result;
|
||||||
|
import com.budwk.app.module.activity.models.ActWonderfulMoment;
|
||||||
|
import com.budwk.app.module.activity.models.Activity;
|
||||||
|
import com.budwk.app.module.activity.service.ActWonderfulMomentService;
|
||||||
|
import com.budwk.app.web.commons.auth.satoken.StpClientUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
|
import org.nutz.dao.Cnd;
|
||||||
|
import org.nutz.dao.sql.Sql;
|
||||||
|
import org.nutz.ioc.aop.Aop;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.lang.Lang;
|
||||||
|
import org.nutz.lang.util.NutMap;
|
||||||
|
import org.nutz.mvc.annotation.At;
|
||||||
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
import org.nutz.mvc.annotation.Param;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName ActWonderfulMomentController
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2025/5/6 15:30
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@IocBean
|
||||||
|
@Ok("json:full")
|
||||||
|
@At("/platform/activity/wonderfulMoment")
|
||||||
|
public class ActWonderfulMomentController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ActWonderfulMomentService wonderfulMomentService;
|
||||||
|
|
||||||
|
@At("")
|
||||||
|
@SaCheckPermission("activity.wonderfulMoment")
|
||||||
|
@Ok("beetl:/platform/activity/wonderfulMoment/index.html")
|
||||||
|
public void index() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckPermission("activity.wonderfulMoment")
|
||||||
|
public Result pageData(PageForm pageForm, String startTime, String endTime){
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||||
|
cnd.and("title", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||||
|
}
|
||||||
|
cnd.andEX("publishTime", ">=", startTime);
|
||||||
|
cnd.andEX("publishTime", "<=", endTime);
|
||||||
|
cnd.desc("publishTime");
|
||||||
|
Pagination pagination = wonderfulMomentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||||
|
return Result.success(pagination);
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("activity.wonderfulMoment")
|
||||||
|
public Result onHandle(@Param("wonderfulMoment") ActWonderfulMoment wonderfulMoment) {
|
||||||
|
if(wonderfulMoment.getId() == null) {
|
||||||
|
wonderfulMoment.setPublishTime(DateUtil.now());
|
||||||
|
}
|
||||||
|
wonderfulMomentService.insertOrUpdate(wonderfulMoment);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("activity.wonderfulMoment")
|
||||||
|
public Result onDelete(Long id) {
|
||||||
|
wonderfulMomentService.delete(id);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckLogin(type = StpClientUtil.TYPE)
|
||||||
|
public Result getWonderfulMoment(@Param("id") Long id) {
|
||||||
|
Cnd cnd = Cnd.where("published", "=", true).andEX("id", "=", id);
|
||||||
|
cnd.desc("publishTime");
|
||||||
|
List<ActWonderfulMoment> momentList = wonderfulMomentService.query(cnd);
|
||||||
|
List<NutMap> result = new ArrayList<>();
|
||||||
|
for (ActWonderfulMoment wonderfulMoment : momentList) {
|
||||||
|
NutMap nutMap = Lang.obj2map(wonderfulMoment, NutMap.class);
|
||||||
|
DateTime dateTime = DateUtil.parse(wonderfulMoment.getPublishTime());
|
||||||
|
//如果是今天
|
||||||
|
if(DateUtil.isSameDay(dateTime, new Date())) {
|
||||||
|
nutMap.put("time", "今天" + DateUtil.format(dateTime, "HH:mm"));
|
||||||
|
} else {
|
||||||
|
nutMap.put("time", DateUtil.betweenDay(dateTime, new Date(), false) + "天前");
|
||||||
|
}
|
||||||
|
result.add(nutMap);
|
||||||
|
}
|
||||||
|
return Result.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@At("/getWonderfulMomentById/?")
|
||||||
|
@SaCheckLogin(type = StpClientUtil.TYPE)
|
||||||
|
public Result getWonderfulMomentById(Long id) {
|
||||||
|
ActWonderfulMoment moment = wonderfulMomentService.fetch(id);
|
||||||
|
return Result.success(moment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@At("/handleWonderfulMoment/?")
|
||||||
|
@SaCheckLogin(type = StpClientUtil.TYPE)
|
||||||
|
public Result handleWonderfulMoment(Long id) {
|
||||||
|
ActWonderfulMoment moment = wonderfulMomentService.fetch(id);
|
||||||
|
moment.setReadCount(moment.getReadCount() + 1);
|
||||||
|
wonderfulMomentService.update(moment);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -1,5 +1,6 @@
|
|||||||
package com.budwk.app.module.activity.controller;
|
package com.budwk.app.module.activity.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.budwk.app.base.page.PageForm;
|
import com.budwk.app.base.page.PageForm;
|
||||||
@@ -8,6 +9,7 @@ import com.budwk.app.base.result.Result;
|
|||||||
import com.budwk.app.module.activity.models.Activity;
|
import com.budwk.app.module.activity.models.Activity;
|
||||||
import com.budwk.app.module.activity.models.ActivityItem;
|
import com.budwk.app.module.activity.models.ActivityItem;
|
||||||
import com.budwk.app.module.activity.service.ActivityManageService;
|
import com.budwk.app.module.activity.service.ActivityManageService;
|
||||||
|
import com.budwk.app.web.commons.auth.satoken.StpClientUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
@@ -163,4 +165,11 @@ public class ActivityManageController {
|
|||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckLogin(type = StpClientUtil.TYPE)
|
||||||
|
public Result getActivity() {
|
||||||
|
List<Activity> activityList = activityService.query(Cnd.NEW());
|
||||||
|
return Result.success(activityList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.budwk.app.module.activity.models;
|
||||||
|
|
||||||
|
import com.budwk.app.base.model.BaseModel;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.nutz.dao.entity.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName ActWonderfulMoment
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2025/5/6 15:28
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Comment("活动项目队伍得分表")
|
||||||
|
@Table("act_wonderful_moment")
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||||
|
public class ActWonderfulMoment extends BaseModel {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Comment("ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("标题")
|
||||||
|
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("发布内容")
|
||||||
|
@ColDefine(type = ColType.TEXT)
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("发布时间")
|
||||||
|
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||||
|
private String publishTime;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("封面图")
|
||||||
|
@ColDefine(type = ColType.VARCHAR, width = 500)
|
||||||
|
private String cover;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("是否发布")
|
||||||
|
@ColDefine(type = ColType.BOOLEAN)
|
||||||
|
private Boolean published;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("阅读次数")
|
||||||
|
@Default(value = "0")
|
||||||
|
@ColDefine(type = ColType.INT)
|
||||||
|
private Integer readCount;
|
||||||
|
}
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
package com.budwk.app.module.activity.service;
|
||||||
|
|
||||||
|
import com.budwk.app.base.service.BaseService;
|
||||||
|
import com.budwk.app.module.activity.models.ActWonderfulMoment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName ActWonderfulMomentService
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2025/5/6 15:30
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
public interface ActWonderfulMomentService extends BaseService<ActWonderfulMoment> {
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
package com.budwk.app.module.activity.service.impl;
|
||||||
|
|
||||||
|
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||||
|
import com.budwk.app.module.activity.models.ActWonderfulMoment;
|
||||||
|
import com.budwk.app.module.activity.service.ActWonderfulMomentService;
|
||||||
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName ActWonderfulMomentServiceImpl
|
||||||
|
* @Author JyuHsin
|
||||||
|
* @Date 2025/5/6 15:31
|
||||||
|
* @Version 1.0
|
||||||
|
* @Description TODO
|
||||||
|
*/
|
||||||
|
@IocBean(args = {"refer:dao"})
|
||||||
|
public class ActWonderfulMomentServiceImpl extends BaseServiceImpl<ActWonderfulMoment> implements ActWonderfulMomentService {
|
||||||
|
public ActWonderfulMomentServiceImpl(Dao dao) {
|
||||||
|
super(dao);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@ jetty:
|
|||||||
#结合ftp使用,或用nginx代理ftp路径
|
#结合ftp使用,或用nginx代理ftp路径
|
||||||
#staticPath: E:/project/NutzWk/upload
|
#staticPath: E:/project/NutzWk/upload
|
||||||
#开发模式静态资源
|
#开发模式静态资源
|
||||||
staticPathLocal: E:/project/company/hmc_gbhd/src/main/resources/static
|
staticPathLocal: D:/project/hmc_gbhd/backend/src/main/resources/static
|
||||||
|
|
||||||
security:
|
security:
|
||||||
tokenName: token
|
tokenName: token
|
||||||
@@ -35,7 +35,7 @@ security:
|
|||||||
isShare: true
|
isShare: true
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
host: 192.168.21.207
|
host: 127.0.0.1
|
||||||
port: 6379
|
port: 6379
|
||||||
timeout: 2000
|
timeout: 2000
|
||||||
max_redir: 10
|
max_redir: 10
|
||||||
@@ -69,7 +69,7 @@ xsssql:
|
|||||||
beetl:
|
beetl:
|
||||||
RESOURCE:
|
RESOURCE:
|
||||||
#本地路径,开发时设置本地路径,便于调试
|
#本地路径,开发时设置本地路径,便于调试
|
||||||
rootLocal: E:/project/company/hmc_gbhd/src/main/resources/views/
|
rootLocal: D:/project/hmc_gbhd/backend/src/main/resources/views/
|
||||||
root: views/
|
root: views/
|
||||||
DELIMITER_STATEMENT_START: '<!--#'
|
DELIMITER_STATEMENT_START: '<!--#'
|
||||||
DELIMITER_STATEMENT_END: '#-->'
|
DELIMITER_STATEMENT_END: '#-->'
|
||||||
|
|||||||
@@ -12,10 +12,22 @@
|
|||||||
:on-exceed="handleExceed"
|
:on-exceed="handleExceed"
|
||||||
:file-list="fileList"
|
:file-list="fileList"
|
||||||
>
|
>
|
||||||
<i class="el-icon-plus"></i>
|
<i slot="default" class="el-icon-plus"></i>
|
||||||
|
<div slot="file" slot-scope="{file}">
|
||||||
|
<img class="el-upload-list__item-thumbnail" :src="'/open/file/upload/download?filepath=' + file.url" alt=""
|
||||||
|
style="var(--box-width, '100px') !important;height: var(--box-height, '100px') !important">
|
||||||
|
<span class="el-upload-list__item-actions">
|
||||||
|
<span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
|
||||||
|
<i class="el-icon-zoom-in"></i>
|
||||||
|
</span>
|
||||||
|
<span class="el-upload-list__item-delete" @click="handleRemove(file)">
|
||||||
|
<i class="el-icon-delete"></i>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
<el-dialog :visible.sync="dialogVisible" append-to-body>
|
<el-dialog :visible.sync="dialogVisible" append-to-body>
|
||||||
<img width="100%" :src="dialogImageUrl" alt="">
|
<img width="100%" :src="'/open/file/upload/download?filepath=' + dialogImageUrl" alt="">
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -78,6 +78,9 @@ const addOrUpdate = {
|
|||||||
{{form.files}}
|
{{form.files}}
|
||||||
<file-upload v-model="form.files" accept=".pdf"></file-upload>
|
<file-upload v-model="form.files" accept=".pdf"></file-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="封面图" prop="cover">
|
||||||
|
<image-upload v-model="form.cover" :max-count="1"></image-upload>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="visible = false">取消</el-button>
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
const addOrUpdate = {
|
||||||
|
template: /*language=HTML*/ `
|
||||||
|
<el-dialog :title="form.id ? '修改' : '新增'" :visible.sync="visible" width="70%">
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="标题" prop="title">
|
||||||
|
<el-input v-model="form.title" placeholder="请输入标题"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="内容" prop="content">
|
||||||
|
<text-editor v-model="form.content" :height="300"></text-editor>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否发布" prop="published">
|
||||||
|
<el-switch
|
||||||
|
v-model="form.published"
|
||||||
|
active-color="#13ce66"
|
||||||
|
inactive-color="#ff4949">
|
||||||
|
</el-switch>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="封面图" prop="cover">
|
||||||
|
<image-upload v-model="form.cover" :max-count="1"></image-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="onSubmit">确定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
title: '',
|
||||||
|
visible: false,
|
||||||
|
form: {
|
||||||
|
published: true,
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
title: [{required: true, message: '请输入标题', trigger: ['blur', 'change']}],
|
||||||
|
content: [{required: true, message: '请输入内容', trigger: ['blur', 'change']}],
|
||||||
|
cover: [{required: true, message: '请上传封面图', trigger: ['blur', 'change']}],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onOpen(row) {
|
||||||
|
this.visible = true
|
||||||
|
if (row?.id) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.form = JSON.parse(JSON.stringify(row))
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.form = {published: true}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onSubmit() {
|
||||||
|
this.$refs.form.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
this.$confirm('您确定要提交吗?', '提示', {
|
||||||
|
type: 'warning',
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消'
|
||||||
|
}).then(() => {
|
||||||
|
$.post('/platform/activity/wonderfulMoment/onHandle', {"wonderfulMoment": JSON.stringify(this.form)}).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success(this.form.id ? '修改成功' : '新增成功')
|
||||||
|
this.$emit('refresh')
|
||||||
|
this.visible = false
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<!--#
|
||||||
|
layout("/layouts/platform_1.html"){
|
||||||
|
#-->
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<div id="app">
|
||||||
|
<el-card shadow="never">
|
||||||
|
<div class="search">
|
||||||
|
<div class="search-item">
|
||||||
|
<div class="search-item-label">标题</div>
|
||||||
|
<div class="search-item-option">
|
||||||
|
<el-input v-model="pageForm.searchKeyword" clearable placeholder="请输入标题"></el-input>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="search-item">
|
||||||
|
<div class="search-item-label">开始时间</div>
|
||||||
|
<div class="search-item-option">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="pageForm.startTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择发布开始时间"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
>
|
||||||
|
</el-date-picker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="search-item">
|
||||||
|
<div class="search-item-label">结束时间</div>
|
||||||
|
<div class="search-item-option">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="pageForm.endTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择发布结束时间"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
>
|
||||||
|
</el-date-picker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="search-query">
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card shadow="never" class="mt-3">
|
||||||
|
<el-row type="flex" style="justify-content: flex-end" class="mb-3">
|
||||||
|
<el-button icon="el-icon-plus" type="primary" size="small" @click="$refs.addOrUpdateRef.onOpen()">新增精彩瞬间</el-button>
|
||||||
|
</el-row>
|
||||||
|
<el-table v-loading="tableLoading" show-overflow-tooltip :data="tableData">
|
||||||
|
<el-table-column label="序号" type="index" header-align="center" align="center" width="50"></el-table-column>
|
||||||
|
<el-table-column label="标题" prop="title"></el-table-column>
|
||||||
|
<el-table-column label="发布时间" prop="publishTime"></el-table-column>
|
||||||
|
<el-table-column label="阅读次数" prop="readCount"></el-table-column>
|
||||||
|
<el-table-column label="发布状态" prop="published">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-switch
|
||||||
|
@change="(val) => {publishedChange(val, row)}"
|
||||||
|
v-model="row.published"
|
||||||
|
active-color="#13ce66"
|
||||||
|
inactive-color="#ff4949">
|
||||||
|
</el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" fixed="right" width="250">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="text" @click="$refs.addOrUpdateRef.onOpen(row)">修改</el-button>
|
||||||
|
<el-button type="text" class="text-danger" @click="onTableRowDelete(row.id)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--#include("/layouts/pagination.html"){}#-->
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<add-or-update ref="addOrUpdateRef" @refresh="doSearch"></add-or-update>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
<!--#include('addOrUpdate.js'){}#-->
|
||||||
|
new Vue({
|
||||||
|
el: "#app",
|
||||||
|
mixins: [initTableMixins],
|
||||||
|
components: {
|
||||||
|
"add-or-update": addOrUpdate,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
pageForm: {
|
||||||
|
activityId: '',
|
||||||
|
},
|
||||||
|
activityList: [],
|
||||||
|
tableDeleteUrl: "/platform/activity/wonderfulMoment/onDelete"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
publishedChange(val, row) {
|
||||||
|
const params = JSON.parse(JSON.stringify(row))
|
||||||
|
this.$set(params, 'published', val)
|
||||||
|
$.post('/platform/activity/wonderfulMoment/onHandle', {"wonderfulMoment": JSON.stringify(params)}).then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success("修改成功")
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async getActivityList(){
|
||||||
|
const resp = await $.post('/platform/activity/user/getActivityList')
|
||||||
|
this.activityList = resp.data
|
||||||
|
},
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
this.getActivityList()
|
||||||
|
await this.pageData()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<!--#
|
||||||
|
}
|
||||||
|
#-->
|
||||||
@@ -84,6 +84,12 @@
|
|||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "精彩瞬间"
|
"navigationBarTitleText": "精彩瞬间"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/activity/wonderfulMoment/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "精彩瞬间"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<template>
|
||||||
|
<view class="container">
|
||||||
|
<h3 class="container-title">{{ viewData?.title }}</h3>
|
||||||
|
<view class="container-sub-title">
|
||||||
|
<span>阅读 {{ viewData?.readCount }}</span>
|
||||||
|
<span style="margin-left: 30px">{{ moment(viewData?.publishTime).format('YYYY年MM月DD日 HH:mm') }}</span>
|
||||||
|
</view>
|
||||||
|
<view v-html="viewData?.content"></view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {ref, reactive, onMounted, computed, h} from 'vue';
|
||||||
|
import {onLoad} from "@dcloudio/uni-app";
|
||||||
|
import {Toast} from "tdesign-mobile-vue";
|
||||||
|
import {useRequest} from "@/utils/request";
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
|
const request = useRequest()
|
||||||
|
const momentId = ref(null);
|
||||||
|
const viewData = ref(null);
|
||||||
|
|
||||||
|
function getWonderfulMoment() {
|
||||||
|
request.post('/platform/activity/wonderfulMoment/getWonderfulMomentById/' + momentId.value).then(res=>{
|
||||||
|
if(res.code === 0){
|
||||||
|
viewData.value = res.data
|
||||||
|
}else{
|
||||||
|
Toast({message: res.msg, theme: 'error'});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onLoad((option) => {
|
||||||
|
if (option.id) {
|
||||||
|
momentId.value = Number(option.id);
|
||||||
|
getWonderfulMoment()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
onMounted(() => {
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.container {
|
||||||
|
padding: 10px;
|
||||||
|
background-color: white !important;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
.container-sub-title {
|
||||||
|
margin-top: 20px;
|
||||||
|
color: #C9C9C9;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -32,41 +32,81 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="menu-text">项目报名</view>
|
<view class="menu-text">项目报名</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="menu-item" @click="navigateTo('/pages/activity/dynamic/index')">
|
<!-- <view class="menu-item" @click="navigateTo('/pages/activity/dynamic/index')">-->
|
||||||
<view class="menu-icon-wrapper blue-bg">
|
<!-- <view class="menu-icon-wrapper blue-bg">-->
|
||||||
<view class="menu-icon star-icon"></view>
|
<!-- <view class="menu-icon star-icon"></view>-->
|
||||||
</view>
|
<!-- </view>-->
|
||||||
<view class="menu-text">精彩瞬间</view>
|
<!-- <view class="menu-text">精彩瞬间</view>-->
|
||||||
</view>
|
<!-- </view>-->
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 精选内容区 -->
|
<!-- 精选内容区 -->
|
||||||
<view class="content-section">
|
<view class="content-section">
|
||||||
<view class="section-header">
|
<view class="section-header">
|
||||||
<view class="section-title">精选活动</view>
|
<view class="section-title">近期活动</view>
|
||||||
<view class="section-more" @click="navigateTo('/pages/activity/index')">更多</view>
|
<view class="section-more" @click="navigateTo('/pages/activity/list/index')">更多</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<t-swiper
|
||||||
|
:autoplay="actList.length > 1"
|
||||||
|
:navigation="{ type: 'fraction', paginationPosition: 'bottom-right', showControls: true }"
|
||||||
|
>
|
||||||
|
<t-swiper-item v-for="(item, index) in actList" :key="index" style="height: 192px">
|
||||||
|
<view class="activity-list" @click="navigateTo('/pages/activity/detail/index?id=' + item.id)">
|
||||||
|
<view class="activity-item">
|
||||||
|
<image class="activity-image"
|
||||||
|
:src="item.cover"
|
||||||
|
mode="widthFix"></image>
|
||||||
|
<view class="activity-info">
|
||||||
|
<view class="activity-title">{{ item.title }}</view>
|
||||||
|
<view class="activity-meta">
|
||||||
|
<text class="activity-time">{{ moment(item.startTime).format('M月DD日') + '-' + moment(item.endTime).format('DD日') }}</text>
|
||||||
|
<text class="activity-location">{{ item.address }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</t-swiper-item>
|
||||||
|
</t-swiper>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="content-section">
|
||||||
|
<view class="section-header">
|
||||||
|
<view class="section-title">精彩瞬间</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="activity-list">
|
<view class="activity-list">
|
||||||
<view class="activity-item" @click="navigateTo('/pages/process/index')">
|
<view class="moment-item" v-for="item in wonderfulMomentList" :key="item.id"
|
||||||
<image class="activity-image"
|
@click="handleWonderfulMoment(item)">
|
||||||
src="https://erp-bucket.pek3b.qingstor.com/assistant/746c37d6-018d-4c64-8a98-ea9ec8b0b3b5.png"
|
<image class="moment-image"
|
||||||
|
src="https://erp-bucket.pek3b.qingstor.com/assistant/89c4b573-c54f-467a-b703-0bc44679ab08.png"
|
||||||
mode="widthFix"></image>
|
mode="widthFix"></image>
|
||||||
<view class="activity-info">
|
<view class="moment-content">
|
||||||
<view class="activity-title">一分钟了解运动会流程</view>
|
<view class="moment-title">{{ item.title }}</view>
|
||||||
<view class="activity-meta">
|
<view class="moment-sub-content">
|
||||||
<text class="activity-time">6月15日-20日</text>
|
<view style="float: right;">{{ item.time }}</view>
|
||||||
<text class="activity-location">江苏省体育中心</text>
|
<view>阅读 {{ item.readCount }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import {onMounted} from "vue";
|
import {onMounted, ref} from "vue";
|
||||||
|
import {Toast} from "tdesign-mobile-vue";
|
||||||
|
import {useRequest} from "@/utils/request";
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
|
const request = useRequest()
|
||||||
|
|
||||||
|
const actList = ref([])
|
||||||
|
const wonderfulMomentList = ref([])
|
||||||
|
|
||||||
function navigateTo(url) {
|
function navigateTo(url) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
@@ -74,8 +114,39 @@ function navigateTo(url) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getActivity() {
|
||||||
|
request.post('/platform/activity/manage/getActivity').then(res=>{
|
||||||
|
if(res.code === 0){
|
||||||
|
actList.value = res.data
|
||||||
|
}else{
|
||||||
|
Toast({message: res.msg, theme: 'error'});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWonderfulMoment() {
|
||||||
|
request.post('/platform/activity/wonderfulMoment/getWonderfulMoment').then(res=>{
|
||||||
|
if(res.code === 0){
|
||||||
|
wonderfulMomentList.value = res.data
|
||||||
|
}else{
|
||||||
|
Toast({message: res.msg, theme: 'error'});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleWonderfulMoment(row) {
|
||||||
|
request.post('/platform/activity/wonderfulMoment/handleWonderfulMoment/' + row.id).then(res=>{
|
||||||
|
if(res.code === 0){
|
||||||
|
getWonderfulMoment()
|
||||||
|
navigateTo('/pages/activity/wonderfulMoment/index?id=' + row.id)
|
||||||
|
}else{
|
||||||
|
Toast({message: res.msg, theme: 'error'});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.log('...........')
|
getActivity()
|
||||||
|
getWonderfulMoment()
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '欢迎使用',
|
title: '欢迎使用',
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
@@ -87,6 +158,9 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
uni-page-body {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
// 头部区域样式
|
// 头部区域样式
|
||||||
.header {
|
.header {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -272,4 +346,27 @@ onMounted(() => {
|
|||||||
.activity-time {
|
.activity-time {
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
.moment-image {
|
||||||
|
width: 180px;
|
||||||
|
height: 160px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
.moment-item {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.moment-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.moment-content {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: space-between;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.moment-sub-content {
|
||||||
|
font-size: 12px;
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user