Merge remote-tracking branch 'origin/main'

# Conflicts:
#	pages.json
main
Connor 2024-06-05 19:51:45 +08:00
commit 827f48bbd8
32 changed files with 1564 additions and 486 deletions

44
api/activityInfo/info.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询活动详情列表
export function listInfo(query) {
return request({
url: '/activityInfo/info/list',
method: 'get',
params: query
})
}
// 查询活动详情详细
export function getInfo(id) {
return request({
url: '/activityInfo/info/' + id,
method: 'get'
})
}
// 新增活动详情
export function addInfo(data) {
return request({
url: '/activityInfo/info',
method: 'post',
data: data
})
}
// 修改活动详情
export function updateInfo(data) {
return request({
url: '/activityInfo/info',
method: 'put',
data: data
})
}
// 删除活动详情
export function delInfo(id) {
return request({
url: '/activityInfo/info/' + id,
method: 'delete'
})
}

View File

@ -6,10 +6,16 @@ import './permission.js' // permission
import iconConfig from './utils/icon/icon.js'
// main.js
import uviewPlus from 'uview-plus'
import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'
export function createApp() {
const app = createSSRApp(App)
app.config.globalProperties.iconConfig = iconConfig
app.config.globalProperties.parseTime = parseTime
app.config.globalProperties.resetForm = resetForm
app.config.globalProperties.handleTree = handleTree
app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels
app.use(uviewPlus)
app.use(store)

View File

@ -7,14 +7,27 @@
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
}
},
"pages": [
// {
// "path" : "pages/common/commentArea/commentArea",
// "style" :
// {
// "navigationBarTitleText" : "评论区"
// }
// },
"pages": [{
"path": "pages/signln/harvestaddress",
"style": {
"navigationBarTitleText": "收货地址",
"navigationStyle": "custom"
}
},
{
"path": "pages/signln/exdetail",
"style": {
"navigationBarTitleText": "兑换商城详情",
"navigationStyle": "custom"
}
},
{
"path": "pages/signln/successfulexchange",
"style": {
"navigationBarTitleText": "兑换成功",
"navigationStyle": "custom"
}
},
{
"path": "pages/index",
"style": {
@ -24,10 +37,9 @@
}
},
{
"path" : "pages/signln/signid",
"style" :
{
"navigationBarTitleText" : "签到任务",
"path": "pages/signln/signid",
"style": {
"navigationBarTitleText": "签到任务",
"navigationStyle": "custom"
}
},
@ -40,23 +52,12 @@
},
{
"path" : "pages/signln/exchangemall",
"style" :
{
"navigationBarTitleText" : "兑换商城",
"path": "pages/signln/exchangemall",
"style": {
"navigationBarTitleText": "兑换商城",
"navigationStyle": "custom"
}
},
{
"path" : "pages/signln/exdetail",
"style" :
{
"navigationBarTitleText" : "兑换商城详情",
"navigationStyle": "custom"
}
},
{
"path": "pages/common/talkState/publish",
"style": {
@ -73,18 +74,14 @@
"navigationBarTextStyle": "white"
}
},
{
{
"path": "pages/common/talkState/auditFailure",
"style": {
"navigationBarTitleText": "审核不通过",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
},
{
"path": "pages/loginInfo/login",
"style": {
@ -96,52 +93,56 @@
"style": {
"navigationBarTitleText": "注册"
}
}
, {
},
{
"path": "pages/activity/index",
"style": {
"navigationBarTitleText": "活动",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
}
, {
},
{
"path": "pages/activity/info",
"style": {
"navigationBarTitleText": "活动详情",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
}
, {
},
{
"path": "pages/activity/publish",
"style": {
"navigationBarTitleText": "发布活动",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
}
, {
},
{
"path": "pages/work/index",
"style": {
"navigationBarTitleText": "工作台"
}
}, {
},
{
"path": "pages/mine/index",
"style": {
"navigationBarTitleText": "我的"
}
}, {
},
{
"path": "pages/mine/avatar/index",
"style": {
"navigationBarTitleText": "修改头像"
}
}, {
},
{
"path": "pages/mine/info/index",
"style": {
"navigationBarTitleText": "个人信息"
}
}, {
},
{
"path": "pages/mine/info/edit",
"style": {
"navigationBarTitleText": "编辑资料"
@ -158,32 +159,38 @@
"style": {
"navigationBarTitleText": "修改密码"
}
}, {
},
{
"path": "pages/mine/setting/index",
"style": {
"navigationBarTitleText": "应用设置"
}
}, {
},
{
"path": "pages/mine/help/index",
"style": {
"navigationBarTitleText": "常见问题"
}
}, {
},
{
"path": "pages/mine/about/index",
"style": {
"navigationBarTitleText": "关于我们"
}
}, {
},
{
"path": "pages/common/webview/index",
"style": {
"navigationBarTitleText": "浏览网页"
}
}, {
},
{
"path": "pages/common/textview/index",
"style": {
"navigationBarTitleText": "浏览文本"
}
}, {
},
{
"path": "pages/search/index",
"style": {
"navigationBarTitleText": "搜索"
@ -195,6 +202,31 @@
"navigationBarTitleText": "添加好友"
}
},
{
"path": "pages/common/navbar/navbar_nead",
"style": {
"navigationBarTitleText": "navbar"
}
},
{
"path": "pages/Friend/messagenotification",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/Friend/addfruebd",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/common/exchange/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path" : "pages/post/postInfo/postInfo",
"style" :
@ -209,15 +241,6 @@
"navigationBarTitleText" : "发布话题"
}
}
// {
// "path": "pages/signln/signiddetails",
// "style": {
// "navigationBarTitleText": "签到明细",
// "navigationStyle": "custom"
// }
// }
],
"tabBar": {
"color": "#000000",
@ -229,14 +252,12 @@
"iconPath": "static/images/tabbar/home.png",
"selectedIconPath": "static/images/tabbar/home_.png",
"text": "首页"
}
, {
}, {
"pagePath": "pages/activity/index",
"iconPath": "static/images/tabbar/tu1-4.png",
"selectedIconPath": "static/images/tabbar/tu1-3.png",
"text": "活动"
}
, {
}, {
"pagePath": "pages/work/index",
"iconPath": "static/images/tabbar/work.png",
"selectedIconPath": "static/images/tabbar/work_.png",

View File

@ -48,10 +48,11 @@
</view>
</template>
<script setup>
import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/activityInfo/info";
import ActiInfoList from '../common/activityList/index.vue'
import { onShow, onLoad } from '@dcloudio/uni-app'
import { getDicts } from "@/api/system/dict/data"
import { ref, reactive, getCurrentInstance } from 'vue'
import { ref, reactive, getCurrentInstance,toRefs } from 'vue'
import { useStore } from 'vuex';
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
@ -60,7 +61,7 @@ const tu22 = iconConfig.tu22;
const tu51 = iconConfig.tu51;
const tu52 = iconConfig.tu52;
const tu53 = iconConfig.tu53;
const activityState = ref([])//
const total = ref()
const imgInfo = ref("")
// ref('#001f3f')
const bgColor = ref('');
@ -72,48 +73,97 @@ const list4 = reactive([
{ name: '进行中' },
{ name: '已结束' }
]);
const actiInfoList = ref([
{
id: 1,
title: '怎么评论爱德华·艾尔加这位音乐家及其他的作品,欢迎大家发表自己的看法?',
startTime: '2023-05-01 15:00',
endTime: '2023-05-01 16:00',
state: '1',
addrs: '天津电子信息职业技术学院操场东面'
},
{
id: 2,
title: '怎么评论爱德华·艾尔加这位音乐家及其他的作品,欢迎大家发表自己的看法?',
startTime: '2023-05-01 15:00',
endTime: '2023-05-01 16:00',
state: '2',
addrs: '天津电子信息职业技术学院操场东面'
},
{
id: 3,
title: '怎么评论爱德华·艾尔加这位音乐家及其他的作品,欢迎大家发表自己的看法?',
startTime: '2023-05-01 15:00',
endTime: '2023-05-01 16:00',
state: '0',
addrs: '天津电子信息职业技术学院操场东面'
}
,
{
id: 4,
title: '怎么评论爱德华·艾尔加这位音乐家及其他的作品,欢迎大家发表自己的看法?',
startTime: '2023-05-01 15:00',
endTime: '2023-05-01 16:00',
state: '0',
addrs: '天津电子信息职业技术学院操场东面'
}
]);
const actiInfoList = ref([]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 5,
launchUserId: null,
accendCondition: null,
acName: null,
acTitle: null,
acContent: null,
startTime: null,
endTime: null,
state: null,
addres: null,
longitude: null,
latitude: null,
file: null,
elroll: null,
acQrcode: null,
tab: null,
readCount: null,
transmitCount: null,
likeCount: null,
commentCount: null,
favoriteCount: null,
postTop: null,
type: null,
anonymity: null,
auditor: null,
auditStatus: null,
auditTime: null,
auditAdvice: null,
cut: null,
},
rules: {
auditStatus: [
{ required: true, message: "状态0正常1待脱敏 2待审核 3脱敏未通过 4 审核未通过 5草稿不能为空", trigger: "change" }
],
}
});
const { queryParams, form, rules } = toRefs(data);
//
function reset() {
form.value = {
id: null,
launchUserId: null,
accendCondition: null,
acName: null,
acTitle: null,
acContent: null,
startTime: null,
endTime: null,
state: null,
addres: null,
longitude: null,
latitude: null,
file: null,
elroll: null,
acQrcode: null,
tab: null,
readCount: null,
transmitCount: null,
likeCount: null,
commentCount: null,
favoriteCount: null,
postTop: null,
type: null,
anonymity: null,
createTime: null,
auditor: null,
auditStatus: null,
auditTime: null,
auditAdvice: null,
cut: null,
delFlag: null
};
proxy.resetForm("infoRef");
}
/** 查询活动详情列表 */
function getList() {
queryParams.value.params = {};
listInfo(queryParams.value).then(response => {
console.log(response);
actiInfoList.value = response.rows;
total.value = response.total;
});
}
onLoad((options) => {
getDicts('activity_state').then(e => {
activityState.value = e.data
console.log(activityState.value);
})
getList();
})
onShow(() => {
@ -130,10 +180,7 @@ const scrolltolower = () => {
addrs: '天津电子信息职业技术学院操场东面'
})
};
const getDictLabelByValue = (state) => {
const dict = activityState.value.find((dict) => dict.dictValue === state);
return dict ? dict : '未知状态';
};
function toESearch() {

View File

@ -12,13 +12,15 @@
<view class="avtivityInfo">
<view>
<view class="cards">
<view class="title"> {{ actiInfoList.title }}</view>
<view class="title"> {{ actiInfoList.acTitle }}</view>
<view class="time">活动时间{{ actiInfoList.startTime }} - {{ actiInfoList.endTime }}</view>
<view class="addrs">活动地点{{ actiInfoList.addrs }}</view>
<view class="addrs">活动地点{{ actiInfoList.addres }}</view>
</view>
<view class="cardz">{{ actiInfoList.activityInfo }}</view>
<view class="cardx">
<image :src="QNDomain + actiInfoList.url" class="image"></image>
<view class="cardz">
<up-parse :content="actiInfoList.acContent" :tagStyle="style"></up-parse>
</view>
<view class="cardx" v-for="(item,index) in toimage(actiInfoList.file)" :key="index">
<image :src="item" class="image"></image>
</view>
</view>
</view>
@ -40,21 +42,15 @@
<view class="elroll">已报名{{ actiInfoList.elroll }}</view>
</view>
<view class="infox2">
<up-modal :show="open" :title="title" width="600rpx"
:content='content' confirmText="签到"
cancelText="取消"
confirmColor="#3477FC"
showCancelButton
closeOnClickOverlay
@confirm="confirm"
@cancel="cancel"
></up-modal>
<up-modal :show="open" :title="title" width="600rpx" :content='content' confirmText="签到" cancelText="取消"
confirmColor="#3477FC" showCancelButton closeOnClickOverlay @confirm="confirm" @cancel="cancel"></up-modal>
</view>
</template>
<script setup>
import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/activityInfo/info";
import { onShow, onLoad } from '@dcloudio/uni-app'
import { ref, reactive, getCurrentInstance } from 'vue'
import { ref, reactive, getCurrentInstance,toRefs } from 'vue'
import { useStore } from 'vuex';
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
@ -63,45 +59,69 @@ const tu22 = iconConfig.tu22;
const tu51 = iconConfig.tu51;
const tu52 = iconConfig.tu52;
const tu53 = iconConfig.tu53;
const style = ref({
p: 'font-weight: 400;font-size: 24rpx;color: #000000 !important;',
})
const open = ref(false)
const title = ref('确认签到');
const content = ref('请您确认活动签到,祝您玩的愉快!');
// ref('#001f3f')
const bgColor = ref('');
const store = useStore()
const QNDomain = store.state.user.QNDomain
const actiInfoList = ref(
{
title: '社团招新|广纳新人(文学社)',
startTime: '2024.06.01 12:00',
endTime: '2024.06.01 14:00',
state: '1',
addrs: '天津电子信息职业技术学院操场东面',
activityInfo: '社团招新是各大高校、社区或其他组织为了吸引新成员、注入新鲜血液而举办的活动。以下是社团招新的一些关键要点和通常的步骤1.确骤1.确定招新目标和需求:社团需要明确自己想要吸引什么样的新成员以及这些新成员能为社团带来什么。这有助于社团骤1.确定招新目标和需求:社团需要明确自己想要吸引什么样的新成员以及这些新成员能为社团带来什么。这有助于社团骤1.确定招新目标和需求:社团需要明确自己想要吸引什么样的新成员,以及这些新成员能为社团带来什么。这有助于社团定招新目标和需求:社团需要明确自己想要吸引什么样的新成员以及这些新成员能为社团带来什么。这有助于社团更有针对性地制定招新计划和策略。2.制定招新计划:包括招新时间、地点、方式等。例如可以在新生入学时举办招新活动卖或者在校园内的显眼位置设立招新摊位。3.宣传和推广:社团需要通过各种渠道进行宣传如校园广播、海报、社交媒体等以吸引潜在的新成员。宣传内容应突出社团的特色和优势让更多人了解和关注。4.举办招新活动:在招招新是各大高校、社区或其他组织为了吸引新成员、注入新鲜血液而举办的活动。以下是社团招新的一些关键要点和通常的步骤1.确定招新目标和需求:社团需要明确自己想要吸引什么样的新成员,新期间,社团可以组织各种有趣的活动,如现场表演、游戏互动、展览展示等,以展示社团的风采和实力,同时吸引更多人参与。',
url: 'home/test/image/png/45feb5093f71dbdbec7329ca1822da0_20240601133007403.png',
launchAvatarsurl: 'home/test/image/jpeg/test1_20240531151817921.jpg',
launchName: '爱吃饭的小张',
launchAddres: '天津电子信息职业技术学院',
elroll: '123'
}
);
const actiInfoList = ref({});
onLoad((options) => {
console.log("页面参数:", options.id);
const _id = options.id
getInfo(_id).then(response => {
actiInfoList.value = response.data;
console.log("actiInfoList:",actiInfoList.value);
});
})
const leftClick = () => {
proxy.$tab.navigateBack(1)
}
const qrcodeInfo = ref()
const btnClick = () => {
open.value = !open.value
uni.scanCode({
onlyFromCamera: true,
success: (res) => {
console.log('扫描二维码成功,结果:',res);
toqrcode(res);
open.value = !open.value
},
error: (res) => {
console.log('扫描二维码出现错误')
}
})
}
const toimage = (url) => {
console.log(QNDomain);
if (typeof url === 'string') {
let info = url.split(",");
// 使mapdomainName
let processedInfo = info.map(item => QNDomain + item);
console.log("processedInfo", processedInfo);
// 使join使
return processedInfo;
}
return null; //
}
const toqrcode = (e) => {
qrcodeInfo.value = JSON.parse(e.result)
console.log("信息:",qrcodeInfo.value);
}
//
function confirm () {
function confirm() {
open.value = !open.value
}
//
function cancel () {
function cancel() {
open.value = !open.value
}
@ -169,6 +189,7 @@ function cancel () {
.dictAuto {
margin: 4rpx auto;
margin-bottom: 400rpx;
.state1 {
width: 686rpx;
height: 80rpx;
@ -177,7 +198,7 @@ function cancel () {
.btnText {
font-weight: 400;
width: 120rpx;
font-size: 30rpx;
font-size: 30rpx;
color: #00CCBE !important;
}
}
@ -190,23 +211,35 @@ function cancel () {
height: 88rpx;
padding-left: 32rpx;
padding-right: 32rpx;
position: fixed; /* 固定位置 */
left: 0; /* 左对齐 */
right: 0; /* 右对齐 */
bottom: 68rpx; /* 底部对齐 */
border-top: 1px solid #ccc; /* 上边框 */
position: fixed;
/* 固定位置 */
left: 0;
/* 左对齐 */
right: 0;
/* 右对齐 */
bottom: 68rpx;
/* 底部对齐 */
border-top: 1px solid #ccc;
/* 上边框 */
background-color: white; /* 背景色设置为白色,防止透明背景导致内容重叠可见 */
background-color: white;
/* 背景色设置为白色,防止透明背景导致内容重叠可见 */
z-index: 10;
}
.infox2{
position: fixed; /* 固定位置 */
left: 0; /* 左对齐 */
right: 0; /* 右对齐 */
bottom: 0; /* 底部对齐 */
.infox2 {
position: fixed;
/* 固定位置 */
left: 0;
/* 左对齐 */
right: 0;
/* 右对齐 */
bottom: 0;
/* 底部对齐 */
height: 68rpx;
width: 100%;
background-color: #f6f6f6;
z-index: 10002; /* 确保在最上层 */
z-index: 10002;
/* 确保在最上层 */
}
</style>

View File

@ -24,36 +24,51 @@
placeholderStyle="color: #c0c0c0;font-size: 30rpx; background:none;"></up-textarea>
</view>
<view class="cardzfile">
<fileUpload v-model="fileList1" :fileTypeInfo="fileTypeInfo1"></fileUpload>
<fileUpload v-model="fileList1" :fileTypeInfo="fileTypeInfo1" :limit="2"></fileUpload>
</view>
</view>
<view class="cardx">
<up-cell-group :border="false">
<up-cell :isLink="true" :center="true">
<up-cell :isLink="true" :center="true" @click="startTime">
<template #title style="margin-top: 2rpx;width: 100%;height: 30rpx;display: flex;align-items: center;">
<image :src="tu52" style="width: 30rpx; height: 32rpx;"></image>
<span>请选择活动开始时间</span>
<image v-if="showtext1" :src="tu52" style="width: 30rpx; height: 32rpx;"></image>
<image v-else :src="tu522" style="width: 30rpx; height: 32rpx;"></image>
<span v-if="showtext1" >请选择活动开始时间</span>
<span v-else class="text2">{{parseTime(StartTime, '{y}-{m}-{d} {h}:{i}:{s}')}}</span>
<up-datetime-picker :show="showStartTime" v-model="newData"
:modelValue="newData"
@confirm="confirm1"
@cancel="cancel"
mode="datetime"></up-datetime-picker>
</template>
</up-cell>
<up-cell :isLink="true" :center="true">
<up-cell :isLink="true" :center="true" @click="showEndTime =!showEndTime ">
<template #title style="margin-top: 2rpx;width: 100%;height: 30rpx;display: flex;align-items: center;">
<image :src="tu53" style="width: 30rpx; height: 32rpx;"></image>
<span>请选择活动结束时间</span>
<image v-if="showtext2" :src="tu53" style="width: 30rpx; height: 32rpx;"></image>
<image v-else :src="tu532" style="width: 30rpx; height: 32rpx;"></image>
<span v-if="showtext2"></span>
<span v-else class="text2"> {{parseTime(EndTime, '{y}-{m}-{d} {h}:{i}:{s}')}}</span>
<up-datetime-picker :show="showEndTime" v-model="newData" @confirm="confirm2"
:modelValue="newData"
@cancel="cancel"
mode="datetime"></up-datetime-picker>
</template>
</up-cell>
<up-cell :border="false" :isLink="true" :center="true">
<template #title style="margin-top: 2rpx;width: 100%;height: 30rpx;display: flex;align-items: center;">
<image :src="tu51" style="width: 30rpx; height: 32rpx;"></image>
<image v-if="showtext3" :src="tu51" style="width: 30rpx; height: 32rpx;"></image>
<image v-else :src="tu512" style="width: 30rpx; height: 32rpx;"></image>
<span>添加活动具体位置</span>
</template>
</up-cell>
</up-cell-group>
</view>
<view class="cardxx">
<up-button color="#C9F6F5" size="large" shape="circle" @click="publish"><span
<up-button color="#C9F6F5" size="large" shape="circle" @click="publish"><span
class="fbText">发布</span></up-button>
<view style="width: 26rpx;height: 80rpx;"></view>
<up-button color="#F8F8E3" size="large" shape="circle" @click="draft" style="margin-left: 26rpx;"><span
<view style="width: 26rpx;height: 80rpx;"></view>
<up-button color="#F8F8E3" size="large" shape="circle" @click="draft" style="margin-left: 26rpx;"><span
class="cgText">存草稿</span></up-button>
</view>
@ -61,20 +76,31 @@
<script setup>
import fileUpload from '../common/file/fileUpload'
import { onShow, onLoad } from '@dcloudio/uni-app'
import { ref, reactive, getCurrentInstance } from 'vue'
import { ref, reactive, getCurrentInstance,computed } from 'vue'
import { useStore } from 'vuex';
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
const tu51 = iconConfig.tu51;
const tu512 = iconConfig.tu512;
const tu52 = iconConfig.tu52;
const tu522 = iconConfig.tu522;
const tu53 = iconConfig.tu53;
const tu532 = iconConfig.tu532;
const title = ref('')
const content = ref('');
const fileList1 = ref([])
const fileTypeInfo1 = ref('image')
const bgColor = ref('');
bgColor.value = 'rgba(170, 0, 0, 0)'
const showStartTime = ref(false);
const showEndTime = ref(false);
const StartTime = ref('请选择活动开始时间')
const showtext1 = ref(true)
const showtext2 = ref(true)
const showtext3 = ref(true)
const EndTime = ref('请选择活动结束时间')
const newData = ref(new Date().getTime())
onLoad((options) => {
console.log("页面参数:", options.id);
})
@ -87,8 +113,28 @@ const draft = () => {
const publish = () => {
console.log("发布");
}
const startTime = (e) => {
showStartTime.value = !showStartTime.value
}
const confirm1 = (e) => {
console.log(e);
showtext1.value = false;
StartTime.value = e.value
showStartTime.value = false
}
const confirm2 = (e) => {
console.log(e);
showtext2.value = false;
EndTime.value = e.value
showEndTime.value = false
}
const cancel = (e) => {
showStartTime.value = false
showEndTime.value = false
}
</script>
<style lang="scss" >
<style lang="scss">
.navbarcenter {
font-weight: 400;
@ -155,7 +201,7 @@ const publish = () => {
margin-right: 32rpx;
margin-top: 80rpx;
.fbText {
.fbText {
font-weight: 400;
font-size: 30rpx;
color: #FBFBFB !important;
@ -163,12 +209,19 @@ const publish = () => {
.cgText {
.cgText {
font-weight: 400;
font-size: 30rpx;
color: #999999 !important;
}
}
.text2{
margin-left: 12rpx;
font-weight: 400;
font-size: 30rpx;
text-align: left;
color: #C9F6F5 !important;
}
</style>

View File

@ -5,7 +5,7 @@
<up-list-item v-for="(item, index) in modelValue" :key="index">
<view class="listInfo" @click="toInfo(item)">
<span class="titile">
{{ item.title }}
{{ item.acTitle }}
</span>
<view class="startTime flex alignCenter">
<image :src="tu52" style="width: 25rpx; height: 26rpx; margin-right: 12rpx;"></image>
@ -17,16 +17,16 @@
</view>
<view class="addrs flex alignCenter">
<image :src="tu51" style="width: 20rpx; height: 26rpx; margin-right: 12rpx;"></image>
活动地点{{ item.addrs }}
活动地点{{ item.addres }}
</view>
<view class="statsInfo">
<!-- 动态数据 -->
<!-- <view :class="getDictLabelByValue(item.state).cssClass" >
<span class="text">{{ getDictLabelByValue(item.state).dictLabel }}</span></view> -->
<view :class="getDictLabelByValue(item.state).cssClass" >
<span class="text">{{ getDictLabelByValue(item.state).dictLabel }}</span></view>
<!-- 静态数据 -->
<view class="state1">
<!-- <view class="state1">
<span class="text">报名中</span>
</view>
</view> -->
</view>
</view>
@ -42,7 +42,7 @@ import { ref, reactive, getCurrentInstance } from 'vue'
import { useStore } from 'vuex';
const emit = defineEmits(['scrolltolower']);
const { proxy } = getCurrentInstance();
const activityState = ref([])//
const iconConfig = proxy.iconConfig;
const tu21 = iconConfig.tu21;
const tu22 = iconConfig.tu22;
@ -60,6 +60,21 @@ const scrolltolower = () => {
const toInfo = (item) => {
proxy.$tab.navigateTo(`/pages/activity/info?id=${item.id}`);
}
const getDictLabelByValue = (state) => {
const dict = activityState.value.find((dict) => dict.dictValue === state);
return dict ? dict : '未知状态';
};
onLoad((options) => {
getDicts('activity_state').then(e => {
activityState.value = e.data
console.log(activityState.value);
})
})
onShow(() => {
console.log('Page onShow')
})
</script>
<style lang="scss" scoped>
.scrollable-list {

View File

@ -0,0 +1,204 @@
<!-- 兑换商城 -->
<template class="content">
<view class="cp">
<view class="view-content" v-for="(item,index) in arr" :key="index">
<view class="content-main">
<view class="content-image">
<image :src="item.src"></image>
</view>
<view class="content-text">
<view class="text1">
{{item.content}}
</view>
<view class="text-flex">
<view class="text2">
兑换所需
</view>
<view class="text3">
<image src="../../static/images/sign/1.png"></image>
<text>{{item.count}}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
reactive
} from "vue";
const count = ref("750");
let arr = reactive([{
id: 1,
src: "https://cbu01.alicdn.com/img/ibank/2019/524/629/11890926425_297889188.jpg",
content: "[端午礼盒] 西凤酒52度头曲礼盒 陕西凤香型白酒礼11111111111",
count: 700
},
{
id: 2,
src: "https://cbu01.alicdn.com/img/ibank/2016/442/823/3216328244_1451018438.jpg",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 200
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
]);
function return_left() {
console.log("返回事件")
}
</script>
<style>
.content {
background: #faf9fa;
}
.view-top {
/* height: 100rpx; */
}
.view-top-rigth-text {
margin-top: 24rpx;
margin-left: 479rpx;
margin-right: 32rpx;
}
.view-top-rigth-text>text {
font-weight: Regular;
width: 239rpx;
height: 31rpx;
font-size: 30rpx;
text-align: left;
color: #000000;
}
.cp {
display: grid;
grid-template-columns: auto auto;
margin-left: 32rpx;
margin-right: 32rpx;
margin-top: 23rpx;
grid-column-gap: 26rpx;
grid-row-gap: 24rpx;
}
.view-content {
width: 330rpx;
height: 482rpx;
box-sizing: border-box;
}
.content-main {
width: 330rpx;
height: 482rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #ffffff;
}
.content-image>image {
width: 330rpx;
height: 330rpx;
border-radius: 24rpx 24rpx 0 0;
display: block;
}
.content-text {
margin-left: 24rpx;
margin-top: 24rpx;
}
.text1 {
font-weight: Regular;
width: 266rpx;
height: 54rpx;
line-height: 27rpx;
font-size: 22rpx;
text-align: left;
color: #000000;
overflow: hidden;
word-wrap: break-word;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.text-flex {
margin-top: 28rpx;
width: 330rpx;
height: 20rpx;
}
.text2 {
font-weight: Regular;
width: 100rpx;
height: 20rpx;
font-size: 20rpx;
text-align: left;
color: #999999;
line-height: 20rpx;
align-items: center;
float: left;
}
.text3 {
float: right;
margin-right: 24rpx;
line-height: 19rpx;
}
.text3>image {
width: 21rpx;
height: 21rpx;
}
.text3>text {
font-weight: Regular;
width: 41rpx;
height: 19rpx;
font-size: 24rpx;
text-align: left;
color: #f99b46;
padding: 1rpx;
margin-left: 8rpx;
}
</style>

View File

@ -42,7 +42,7 @@ const props = defineProps({
fileSize: {
type: Number,
default: 100 * 1024 * 1024,
},
}
});
const url = ref('');
@ -82,7 +82,7 @@ const form = reactive({
//
const afterRead = async (event) => {
console.log("event:", event);
let name = event.name;
let lists = [].concat(event.file);
let fileListLen = fileList1.value.length;
@ -113,7 +113,7 @@ const afterRead = async (event) => {
};
const uploadFilePromise = async (fileInfo1, name) => {
console.log("fileInfo1:",fileInfo1);
//
let fileNameOld = [0, 1];
if (fileInfo1.name !== undefined) {
@ -130,7 +130,7 @@ const uploadFilePromise = async (fileInfo1, name) => {
}
//typevideo/mp4type
fileInfo.type = fileInfo1.type + "/" + extension1[extension1.length-1];
console.log("fileInfo.type:",fileInfo);
fileInfo.extension = extension1[1];
try {
const tokenData = await getQNtoken(fileInfo);
@ -211,7 +211,7 @@ const deletePic = (e) => {
const typeInfo = () => {
store.dispatch('getPhoneType');
console.log(store.state.user.phoneType);
};
//
function listToString(list, separator) {

View File

@ -1,6 +1,27 @@
<template>
<view>
<view>
<!-- 顶部导航栏 -->
<up-navbar leftText="" title="" :placeholder="true" :safeAreaInsetTop="true" @leftClick="leftClick"
:bgColor="bgColor">
<template #center>
<div class="navbarcenter"><span>发布话题</span></div>
</template>
</up-navbar>
</view>
<image class="bacimg2" :src="sh2x"></image>
<view class="bgc"></view>
<view class="cardz">
<image :src="sh2x1" class="shenhe2x1"></image>
<span class="text">待审核</span>
</view>
<view style="position: fixed; top: 632rpx; width: 100%; padding-left: 32rpx; padding-right: 32rpx;">
<up-button color="#c0f0ec" size="large" shape="circle" @click="publish"><span
class="fbText">继续发布</span></up-button>
</view>
</view>
</template>
<script setup>
@ -12,7 +33,71 @@ const emit = defineEmits(['scrolltolower']);
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
const tu21 = iconConfig.tu21;
const sh2x1 = iconConfig.sh2x1;
const sh2x = iconConfig.sh2x;
const bgColor = ref('');
bgColor.value = 'rgba(170, 0, 0, 0)'
const leftClick = () => {
proxy.$tab.navigateBack(1)
}
</script>
<style lang="scss" scoped>
.bacimg2 {
width: 508rpx;
height: 540rpx;
position: fixed;
top: -100rpx;
left: -100rpx;
}
.navbarcenter {
font-weight: 400;
font-size: 36rpx;
text-align: left;
color: #000000;
}
.bgc {
width: 100%;
height: 500rpx;
background: linear-gradient(-180deg, #a3e6df, #ffffff);
position: fixed;
top: 0rpx;
left: 0rpx;
z-index: -1;
}
.shenhe2x1 {
width: 232rpx;
height: 228rpx;
position: fixed;
top: 276rpx;
left: 260rpx;
}
.text {
font-weight: 400;
font-size: 48rpx;
text-align: left;
color: #00CCBE !important;
position: fixed;
top: 500rpx;
left: 300rpx;
}
.cardz{
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.fbText{
font-weight: 400;
font-size: 30rpx;
text-align: left;
color: #00CCBE !important;
}
</style>

View File

@ -1,6 +1,28 @@
<template>
<view>
<view>
<!-- 顶部导航栏 -->
<up-navbar leftText="" title="" :placeholder="true" :safeAreaInsetTop="true" @leftClick="leftClick"
:bgColor="bgColor">
<template #center>
<div class="navbarcenter"><span>发布话题</span></div>
</template>
</up-navbar>
</view>
<image class="bacimg2" :src="sb2x"></image>
<view class="bgc"></view>
<view class="cardz">
<image :src="sb2x1" class="shenhe2x1"></image>
<span class="text1">审核不通过</span>
<span class="text2">您提交的话题带有违禁词</span>
</view>
<view style="position: fixed; top: 632rpx; width: 100%; padding-left: 32rpx; padding-right: 32rpx;">
<up-button color="#FDE2E2" size="large" shape="circle" @click="publish"><span
class="fbText">继续发布</span></up-button>
</view>
</view>
</template>
<script setup>
@ -12,7 +34,85 @@ const emit = defineEmits(['scrolltolower']);
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
const tu21 = iconConfig.tu21;
const sb2x1 = iconConfig.sb2x1;
const sb2x = iconConfig.sb2x;
const bgColor = ref('');
bgColor.value = 'rgba(170, 0, 0, 0)'
const leftClick = () => {
proxy.$tab.navigateBack(1)
}
</script>
<style lang="scss" scoped>
.bacimg2 {
width: 508rpx;
height: 540rpx;
position: fixed;
top: -100rpx;
left: -100rpx;
}
.navbarcenter {
font-weight: 400;
font-size: 36rpx;
text-align: left;
color: #000000;
}
.bgc {
width: 100%;
height: 500rpx;
background: linear-gradient(-180deg, #fdecec, #ffffff);
position: fixed;
top: 0rpx;
left: 0rpx;
z-index: -1;
}
.shenhe2x1 {
width: 232rpx;
height: 228rpx;
position: fixed;
top: 276rpx;
left: 260rpx;
}
.text1 {
font-weight: 400;
font-size: 48rpx;
text-align: left;
color: #FFABAB !important;
position: fixed;
top: 500rpx;
left: 252rpx;
}
.text2 {
font-weight: 400;
font-size: 24rpx;
text-align: left;
color: #FFABAB !important;
position: fixed;
top: 560rpx;
left: 242rpx;
}
.cardz {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.fbText {
font-weight: 400;
font-size: 30rpx;
text-align: left;
color: #FFABAB !important;
}
</style>

View File

@ -11,10 +11,10 @@
</template>
</up-navbar>
</view>
<image class="bacimg2" :src="sh2x"></image>
<image class="bacimg2" :src="cg2x22"></image>
<view class="bgc"></view>
<view class="cardz">
<image :src="sh2x1" class="shenhe2x1"></image>
<image :src="cg2x21" class="shenhe2x1"></image>
<span class="text">待审核</span>
</view>
<view style="position: fixed; top: 632rpx; width: 100%; padding-left: 32rpx; padding-right: 32rpx;">
@ -33,8 +33,8 @@ const emit = defineEmits(['scrolltolower']);
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
const sh2x1 = iconConfig.sh2x1;
const sh2x = iconConfig.sh2x;
const cg2x21 = iconConfig.cg2x21;
const cg2x22 = iconConfig.cg2x21;
const bgColor = ref('');
bgColor.value = 'rgba(170, 0, 0, 0)'

View File

@ -1,104 +1,26 @@
<!-- 兑换商城 -->
<template class="content">
<navbar_neadVue title="兑换商城"></navbar_neadVue>
<navbar_nead title="兑换商城"></navbar_nead>
<view class="view-top">
<view class="view-top-rigth-text">
<text>我的校园币:{{count}}</text>
</view>
</view>
<view class="cp">
<view class="view-content" v-for="(item,index) in arr" :key="index">
<view class="content-main">
<view class="content-image">
<image :src="item.src"></image>
</view>
<view class="content-text">
<view class="text1">
{{item.content}}
</view>
<view class="text-flex">
<view class="text2">
兑换所需
</view>
<view class="text3">
<image src="../../static/images/sign/1.png"></image>
<text>{{item.count}}</text>
</view>
</view>
</view>
</view>
</view>
</view>
<ex></ex>
</template>
<script setup>
import navbar_nead from "@/pages/common/navbar/navbar_nead.vue";
import ex from "@/pages/common/exchange/index.vue";
import {
ref,
reactive
} from "vue";
import navbar_neadVue from "../common/navbar/navbar_nead.vue";
const count = ref("750");
let arr = reactive([{
id: 1,
src: "https://cbu01.alicdn.com/img/ibank/2019/524/629/11890926425_297889188.jpg",
content: "[端午礼盒] 西凤酒52度头曲礼盒 陕西凤香型白酒礼11111111111",
count: 700
},
{
id: 2,
src: "https://cbu01.alicdn.com/img/ibank/2016/442/823/3216328244_1451018438.jpg",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 200
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
{
id: 3,
src: "https://ts1.cn.mm.bing.net/th/id/R-C.2bcea282254788c581f0a18f47efb5f8?rik=rcZeIVRgTcWUkQ&riu=http%3a%2f%2fhimg2.huanqiu.com%2fattachment2010%2f2019%2f0429%2f10%2f58%2f20190429105829589.jpg&ehk=HCIAZrOId0EVKf%2bFyNg7cgff6Cg8WLUCNHpaDgwi1ng%3d&risl=&pid=ImgRaw&r=0",
content: "男生酷帅穿搭套装休闲夏季青少年潮牌短袖短裤初中1111111111 ",
count: 500
},
]);
function return_left(){
console.log("返回事件")
}
</script>
<style>
.content {
background: #faf9fa;
}
.view-top {
/* height: 100rpx; */
}
@ -117,98 +39,4 @@
text-align: left;
color: #000000;
}
.cp {
display: grid;
grid-template-columns: auto auto;
margin-left: 32rpx;
margin-right: 32rpx;
margin-top: 23rpx;
grid-column-gap: 26rpx;
grid-row-gap: 24rpx;
}
.view-content {
width: 330rpx;
height: 482rpx;
box-sizing: border-box;
}
.content-main {
width: 330rpx;
height: 482rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #ffffff;
}
.content-image>image {
width: 330rpx;
height: 330rpx;
border-radius: 24rpx 24rpx 0 0;
display: block;
}
.content-text {
margin-left: 24rpx;
margin-top: 24rpx;
}
.text1 {
font-weight: Regular;
width: 266rpx;
height: 54rpx;
line-height: 27rpx;
font-size: 22rpx;
text-align: left;
color: #000000;
overflow: hidden;
word-wrap: break-word;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.text-flex {
margin-top: 28rpx;
width: 330rpx;
height: 20rpx;
}
.text2 {
font-weight: Regular;
width: 100rpx;
height: 20rpx;
font-size: 20rpx;
text-align: left;
color: #999999;
line-height: 20rpx;
align-items: center;
float: left;
}
.text3 {
float: right;
margin-right: 24rpx;
line-height: 19rpx;
}
.text3>image {
width: 21rpx;
height: 21rpx;
}
.text3>text {
font-weight: Regular;
width: 41rpx;
height: 19rpx;
font-size: 24rpx;
text-align: left;
color: #f99b46;
padding: 1rpx;
margin-left: 8rpx;
}
</style>

View File

@ -6,6 +6,32 @@
<view>
<image :src="images"></image>
</view>
<view class="but" @click="butOn()">
<text>立即兑换</text>
</view>
<uni-popup ref="popup" border-radius="32rpx 32rpx 0 0" background-color="#ffffff">
<view class="uni-popup-view">
<view class="uni-top">
<text class="uni-top-text">确认兑换</text>
<view style="float: right;margin-right: 32rpx;vertical-align:middle;">
<image style="width: 32rpx;height: 32rpx;" src="../../static/images/sign/关闭.png"></image>
</view>
</view>
<view>
<view>
<text></text>
<image src=""></image>
<text></text>
</view>
</view>
</view>
</uni-popup>
</template>
<script setup>
@ -13,24 +39,89 @@
ref
}
from "vue"
const popup = ref(null);
const images = ref("https://cbu01.alicdn.com/img/ibank/2018/374/990/9121099473_1558693147.jpg");
const images = ref("https://cbu01.alicdn.com/img/ibank/2016/442/823/3216328244_1451018438.jpg")
function butOn() {
popup.value.open('bottom');
}
</script>
<style>
.uninavbar {
position: absolute;
z-index:9999;
z-index: 9999;
top: 110rpx;
left: 32rpx;
}
.uninavbar > image{
.uninavbar>image {
width: 31rpx;
height: 44rpx;
color: #000000;
}
view > image {
view>image {
width: 750rpx;
height: 500rpx;
}
.but {
width: 686rpx;
height: 88rpx;
border-radius: 44rpx 44rpx 44rpx 44rpx;
background: linear-gradient(-90deg, #c9f6f5, #f7f8e3);
}
.but>text {
font-weight: Regular;
width: 131rpx;
height: 33rpx;
font-size: 32rpx;
text-align: left;
color: #000000;
display: block;
margin: auto;
line-height: 88rpx;
}
.bot-bot {
width: 750rpx;
height: 1000rpx;
border-radius: 32rpx 32rpx 0 0;
/* background: #ffffff; */
background-color: #000000;
position: absolute;
bottom: 40rpx;
left: 0rpx;
transition: bottom 5s;
/* Slide in effect */
}
.buts {
position: absolute;
bottom: 91rpx;
}
.uni-popup-view{
position: relative;
left: 0rpx;
height: 70vh;
width: 750rpx;
margin-top: 31rpx;
}
.uni-top{
display: flex;
}
.uni-top-text {
font-weight: Regular;
width: 124rpx;
height: 31rpx;
font-size: 30rpx;
text-align: left;
color: #000000;
display: block;
margin: auto;
line-height: 31rpx;
}
</style>

View File

@ -0,0 +1,178 @@
<!-- 收货地址 -->
<template>
<navbar_neadVue title="收货地址" background_color="#ffffff"></navbar_neadVue>
<!-- 有地址 -->
<view v-if="arr.length >= 1" v-for="(item,index) in arr" :key="index">
<view class="haveaddress" @click="HaveAddress(item.id)">
<text class="textname">
{{item.name}}<text class="textphone">{{item.phone}}</text>
</text>
<image v-if="IsHave === item.id" class="image" src="../../static/images/sign/选中.png"></image>
<image v-else class="image" src="../../static/images/sign/未选中.png"></image>
<text class="textaddress">{{item.address}}</text>
</view>
<view class="butview">
<view class="but">
<text>确定地址</text>
</view>
</view>
</view>
<!-- 添加收货地址 -->
<view class="noadderes" v-else>
<image class="icons" src="../../static/images/sign/暂无地址.png"></image>
<text class="notext">暂无收货地址请添加</text>
<view class="butview">
<view class="but">
<text>添加地址</text>
</view>
</view>
</view>
</template>
<script setup>
import {
reactive,
ref
} from "vue";
import navbar_neadVue from "@/pages/common/navbar/navbar_nead.vue";
const arr = reactive([{
id: 1,
name: "吴先生",
phone: "19993439121",
address: "天津 天津市 河北区 建昌道街道红星北路诗景颂院12号楼1单元120212号楼1单元120212号楼1单元1202天津 天津市 河北区 建昌道街道红星北路诗景颂院12号楼1单元1202",
},
{
id: 2,
name: "王先生",
phone: "19993439121",
address: "天津 天津市 河北区 建昌道街道红星北路诗景颂院12号楼1单元120212号楼1单元120212号楼1单元1202天津 天津市 河北区 建昌道街道红星北路诗景颂院12号楼1单元1202",
},
{
id: 3,
name: "李先生",
phone: "19993439121",
address: "天津 天津市 河北区 建昌道街道红星北路诗景颂院12号楼1单元120212号楼1单元120212号楼1单元1202天津 天津市 河北区 建昌道街道红星北路诗景颂院12号楼1单元1202",
}
])
const IsHave = ref(0)
console.log(arr.length)
function HaveAddress(id) {
IsHave.value = id;
}
</script>
<style scoped>
@import '@/pages/common/navbar/navbar.css';
.haveaddress {
width: 686rpx;
height: 156rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #ffffff;
margin-left: 32rpx;
margin-right: 32rpx;
margin-top: 24rpx;
}
.textname {
font-weight: Regular;
width: 72rpx;
height: 24rpx;
font-size: 24rpx;
text-align: left;
color: #000000;
}
.textphone {
margin-left: 27rpx;
}
.image {
width: 32rpx;
height: 32rpx;
vertical-align: middle;
float: right;
margin-right: 24rpx;
margin-top: 62rpx;
}
.textaddress {
color: #cbcbcb;
font-weight: Regular;
font-face: Microsoft YaHei;
font-size: 24rpx;
text-align: left;
line-height: 36rpx;
display: block;
margin-right: 137rpx;
margin-top: 27rpx;
overflow: hidden;
word-wrap: break-word;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.icons {
position: absolute;
width: 256rpx;
height: 232rpx;
left: 247rpx;
top: 219rpx;
}
.notext {
font-weight: Regular;
width: 276rpx;
height: 32rpx;
font-size: 30rpx;
text-align: left;
color: #00CCBE;
position: absolute;
left: 232rpx;
top: 480rpx;
}
.butview {
width: 750rpx;
height: 136rpx;
background: #ffffff;
position: absolute;
bottom: 68rpx;
}
.but {
width: 686rpx;
height: 88rpx;
border-radius: 44rpx 44rpx 44rpx 44rpx;
background: #c0f0ec;
margin-left: 32rpx;
}
.but>text {
font-weight: Regular;
width: 123rpx;
height: 30rpx;
font-size: 30rpx;
text-align: left;
color: #00CCBE;
display: block;
margin: auto;
line-height: 88rpx;
margin-top: 22rpx;
}
</style>

View File

@ -50,69 +50,6 @@ text-align: center;
color: #7E7E7E;">12</text>
</li>
<li style="margin-left: 58rpx;">
<image style="width: 42rpx; height: 44rpx;" src="../../static/images/sign/1.png">
</image>
<text style="display: block; font-weight: Regular;
width: 60rpx;
height: 22rpx;
font-size: 24rpx;
text-align: left;
padding-right: 4rpx;
color: #7E7E7E;">12</text>
</li>
<li style="margin-left: 58rpx;">
<image style="width: 42rpx; height: 44rpx;" src="../../static/images/sign/1.png">
</image>
<text style="display: block; font-weight: Regular;
width: 60rpx;
height: 22rpx;
font-size: 24rpx;
text-align: left;
padding-right: 4rpx;
color: #7E7E7E;">12</text>
</li>
<li style="margin-left: 58rpx;">
<image style="width: 42rpx; height: 44rpx;" src="../../static/images/sign/1.png">
</image>
<text style="display: block; font-weight: Regular;
width: 60rpx;
height: 22rpx;
font-size: 24rpx;
text-align: left;
padding-right: 4rpx;
color: #7E7E7E;">12</text>
</li>
<li style="margin-left: 58rpx;">
<image style="width: 42rpx; height: 44rpx;" src="../../static/images/sign/1.png">
</image>
<text style="display: block; font-weight: Regular;
width: 60rpx;
height: 22rpx;
font-size: 24rpx;
text-align: left;
padding-right: 4rpx;
color: #7E7E7E;">12</text>
</li>
<li style="margin-left: 58rpx;">
<image style="width: 42rpx; height: 44rpx;" src="../../static/images/sign/1.png">
</image>
<text style="display: block; font-weight: Regular;
width: 60rpx;
height: 22rpx;
font-size: 24rpx;
text-align: left;
padding-right: 4rpx;
color: #7E7E7E;">12</text>
</li>
</ul>
</view>
@ -145,26 +82,40 @@ color: #7E7E7E;">12日</text>
</view>
<view style="height: 24rpx;"></view>
</view>
<view class="bottom">
<view class="bottom-left"></view>
<view class="bottom-text">
<text class="bottom-text-s">兑换商城</text>
<text class="bottom-text-r" @click="GoExchange()"> <text>></text></text>
</view>
</view>
<view>
<ex></ex>
</view>
</template>
<script setup>
import navbar_neadVue from "../common/navbar/navbar_nead.vue";
import exchangemall from "./exchangemall.vue"
import navbar_neadVue from "@/pages/common/navbar/navbar_nead.vue";
import ex from "@/pages/common/exchange/index.vue";
//
function GoTo() {
uni.navigateTo({
url: './signiddetails'
});
}
//
function GoExchange(){
uni.navigateTo({
url: './exchangemall'
});
}
import {
ref,
reactive
@ -448,4 +399,45 @@ color: #7E7E7E;">12日</text>
font-size: 20rpx;
text-align: left;
}
.bottom {
margin-right: 32rpx;
margin-left: 32rpx;
margin-top: 24rpx;
}
.bottom-left {
width: 4rpx;
height: 30rpx;
border-radius: 2rpx 2rpx 2rpx 2rpx;
background: #f99b46;
float: left;
margin-top: 8rpx;
}
.bottom-text-s {
font-weight: Regular;
/* width: 123rpx; */
height: 31rpx;
font-size: 30rpx;
text-align: left;
color: #000000;
margin-left: 24rpx;
vertical-align: baseline;
}
.bottom-text-r {
float: right;
font-weight: Regular;
/* width: 47rpx; */
height: 24rpx;
line-height: 48rpx;
font-size: 24rpx;
text-align: left;
color: #999999;
vertical-align: baseline;
}
.bottom-text-r>text {}
</style>

View File

@ -1,16 +1,16 @@
<!-- 签到明细 -->
<template>
<view class="uninavbar">
<uni-nav-bar statusBar="false" :border="false" left-icon="leftIcon" title="签到明细" />
</view>
<view style="height: 24rpx;"></view>
<view class="content" v-for="(item,index) in arr" :key="index">
<view class="uni-list">
<text class="uni-list-top-text">{{item.text}}</text>
<view :class="item.type === '+'
?'uni-list-right-add':'uni-list-right-remove'">{{item.type}}{{item.count}}</view>
<text class="uni-list-bottom-text">{{item.time}}</text>
<view class="uni-list--border-bottom"></view>
<navbar_neadVue title="签到明细"></navbar_neadVue>
<view style="background-color: #ffffff;">
<view style="height: 24rpx;"></view>
<view class="content" v-for="(item,index) in arr" :key="index">
<view class="uni-list">
<text class="uni-list-top-text">{{item.text}}</text>
<view :class="item.type === '+'
?'uni-list-right-add':'uni-list-right-remove'">{{item.type}}{{item.count}}</view>
<text class="uni-list-bottom-text">{{item.time}}</text>
<view class="uni-list--border-bottom"></view>
</view>
</view>
</view>
@ -22,6 +22,7 @@
ref
} from "vue"
let leftIcon = ref("../../static/images/sign/return.png")
import navbar_neadVue from "../common/navbar/navbar_nead.vue";
let arr = reactive([{
id: 1,
text: "每日签到",
@ -82,11 +83,9 @@
line-height: 44rpx;
}
*{
background-color: #ffffff;;
}
.content {
background-color: #ffffff;
margin-left: 32rpx;
margin-right: 32rpx;
margin-top: 24rpx;
@ -110,7 +109,7 @@
.uni-list-bottom-text {
font-weight: 400;
width: 201rpx;
/* width: 201rpx; */
height: 19rpx;
font-size: 24rpx;
text-align: left;

View File

@ -0,0 +1,109 @@
<!-- 兑换成功 -->
<template>
<view class="content">
<view class="uninavbar">
<image :src="returns"></image>
</view>
<view class="backimage">
<image :src="images"></image>
</view>
<image :src="icons" class="icon"></image>
<view class="con-text">
<text>兑换成功</text>
</view>
<view class="but" @click="RetExChangemall()">
<text>返回商城</text>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue';
const returns = ref("../../static/images/sign/return.png");
const images = ref("../../static/images/sign/兑换成功.png");
const icons = ref("../../static/images/sign/成功.png");
function RetExChangemall(){
uni.navigateTo({
url: './exchangemall',
// url: './exdetail',
});
}
</script>
<style>
.uninavbar {
position: absolute;
z-index: 9999;
top: 110rpx;
left: 32rpx;
}
.uninavbar>image {
width: 31rpx;
height: 44rpx;
color: #000000;
}
.backimage>image {
width: 7270rpx;
height: 599rpx;
}
.content {
width: 750rpx;
height: 100vh;
background: linear-gradient(-140deg, #83c4ff, #ffffff);
}
.icon {
width: 317rpx;
height: 198rpx;
position: absolute;
top: 264rpx;
left: 217rpx;
}
.con-text>text {
font-weight: Regular;
width: 194rpx;
height: 49rpx;
font-size: 48rpx;
text-align: left;
color: #348FE2;
display: block;
margin: auto;
position: absolute;
top: 470rpx;
left: 277rpx;
}
.but {
width: 686rpx;
height: 88rpx;
border-radius: 44rpx 44rpx 44rpx 44rpx;
opacity: 0.24;
background: #83c4ff;
position: absolute;
top: 590rpx;
left: 32rpx;
}
.but>text {
font-weight: Regular;
width: 124rpx;
height: 31rpx;
font-size: 30rpx;
text-align: left;
color: #348FE2;
display: block;
margin: auto;
line-height: 88rpx;
}
</style>

View File

@ -18,6 +18,8 @@
</view>
<view>
<up-button type="primary" text="待审核" size @click="clickBannerItem(1)"></up-button>
<up-button type="primary" text="发布成功" size @click="clickBannerItem(2)"></up-button>
<up-button type="primary" text="审核失败" size @click="clickBannerItem(3)"></up-button>
</view>
<fileUpload v-model="fileList1" :fileTypeInfo="fileTypeInfo1"></fileUpload>
<fileUpload v-model="fileList1" :fileTypeInfo="fileTypeInfo2"></fileUpload>
@ -56,9 +58,17 @@ const fileList1 = ref([])
function clickBannerItem(item) {
if (item === 1) {
if(item === 1){
proxy.$tab.navigateTo('/pages/common/talkState/audit')
}
if(item === 2){
proxy.$tab.navigateTo('/pages/common/talkState/publish')
}
if(item === 3){
proxy.$tab.navigateTo('/pages/common/talkState/auditFailure')
}
}
function changeSwiper(e) {

View File

@ -17,26 +17,27 @@ function checkWhite(url) {
}
// 页面跳转验证拦截器
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
// list.forEach((item) => {
// let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
// list.forEach(item => {
// uni.addInterceptor(item, {
// invoke(to) {
// if (getToken()) {
// if (to.url === loginPage) {
// console.log("to:", to);
// uni.reLaunch({ url: "/" });
// console.log("to:",to);
// uni.reLaunch({ url: "/" })
// }
// return true;
// return true
// } else {
// if (checkWhite(to.url)) {
// return true;
// return true
// }
// uni.reLaunch({ url: loginPage });
// return false;
// uni.reLaunch({ url: loginPage })
// return false
// }
// },
// fail(err) {
// console.log("错误信息:", err);
// },
// });
// });
// console.log("错误信息:",err)
// }
// })
// })

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -5,9 +5,17 @@ import store from '@/store'
const QNDomain = store.state.user.QNDomain
const tu21 = ref(QNDomain + "home/icon/image/png/tu2-1_20240531153239639.png")
const tu22 = ref(QNDomain + "home/icon/image/png/tu2-2_20240531163115818.png")
//定位
const tu51 = ref(QNDomain + "home/icon/image/png/tu5-1_20240601124004353.png")
const tu512 = ref(QNDomain + "home/icon/image/png/tu5-1-2_20240605120128566.png")
//开始
const tu52 = ref(QNDomain + "home/icon/image/png/tu5-2_20240601124010403.png")
const tu522 = ref(QNDomain + "home/icon/image/png/tu5-2-2_20240605120128561.png")
//结束
const tu53 = ref(QNDomain + "home/icon/image/png/tu5-3_20240601124016641.png")
const tu532 = ref(QNDomain + "home/icon/image/png/tu5-3-2_20240605120128565.png")
const tu23 = ref(QNDomain + "home/icon/image/png/tu2-3_20240602093303793.png")
//文件上传
const tu2x = ref(QNDomain + "home/icon/image/png/添加图片@2x_20240603101717136.png")
@ -15,8 +23,16 @@ const tu2x = ref(QNDomain + "home/icon/image/png/添加图片@2x_202406031017171
//话题发布-等待审核
const sh2x = ref(QNDomain + "home/icon/image/png/等待审核@2x_20240604202431502.png")
const sh2x1 = ref(QNDomain + "home/icon/image/png/等待审核@2x1_20240604202431492.png")
//话题-发布话题 发布成功
const cg2x21 = ref(QNDomain + "home/icon/image/png/成功@2x2 (1)_20240605100256727.png");
const cg2x22 = ref(QNDomain + "home/icon/image/png/成功@2x2 (2)_20240605100300398.png");
//话题-发布话题 审核失败
const sb2x = ref(QNDomain + "home/icon/image/png/审核失败@2x_20240605101107230.png");
const sb2x1 = ref(QNDomain + "home/icon/image/png/审核失败@2x1_20240605101107230.png");
export default {
tu21,tu22,tu23,tu2x,
tu51,tu52,tu53,
sh2x,sh2x1
tu51,tu52,tu53,tu512,tu522,tu532,
sh2x,sh2x1,
cg2x21,cg2x22,
sb2x,sb2x1,
}

View File

@ -37,7 +37,7 @@ const request = config => {
showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
if (res.confirm) {
store.dispatch('LogOut').then(res => {
uni.reLaunch({ url: '/pages/login' })
uni.reLaunch({ url: '/pages/loginInfo/login' })
})
}
})

246
utils/ruoyi.js Normal file
View File

@ -0,0 +1,246 @@
/**
* 通用js方法封装处理
* Copyright (c) 2019 ruoyi
*/
// 日期格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
let search = params;
search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
dateRange = Array.isArray(dateRange) ? dateRange : [];
if (typeof (propName) === 'undefined') {
search.params['beginTime'] = dateRange[0];
search.params['endTime'] = dateRange[1];
} else {
search.params['begin' + propName] = dateRange[0];
search.params['end' + propName] = dateRange[1];
}
return search;
}
// 回显数据字典
export function selectDictLabel(datas, value) {
if (value === undefined) {
return "";
}
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].value == ('' + value)) {
actions.push(datas[key].label);
return true;
}
})
if (actions.length === 0) {
actions.push(value);
}
return actions.join('');
}
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
if (value === undefined || value.length ===0) {
return "";
}
if (Array.isArray(value)) {
value = value.join(",");
}
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
Object.keys(value.split(currentSeparator)).some((val) => {
var match = false;
Object.keys(datas).some((key) => {
if (datas[key].value == ('' + temp[val])) {
actions.push(datas[key].label + currentSeparator);
match = true;
}
})
if (!match) {
actions.push(temp[val] + currentSeparator);
}
})
return actions.join('').substring(0, actions.join('').length - 1);
}
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
if (typeof arg === 'undefined') {
flag = false;
return '';
}
return arg;
});
return flag ? str : '';
}
// 转换字符串undefined,null等转化为""
export function parseStrEmpty(str) {
if (!str || str == "undefined" || str == "null") {
return "";
}
return str;
}
// 数据合并
export function mergeRecursive(source, target) {
for (var p in target) {
try {
if (target[p].constructor == Object) {
source[p] = mergeRecursive(source[p], target[p]);
} else {
source[p] = target[p];
}
} catch (e) {
source[p] = target[p];
}
}
return source;
};
/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
*/
export function handleTree(data, id, parentId, children) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
childrenList: children || 'children'
};
var childrenListMap = {};
var nodeIds = {};
var tree = [];
for (let d of data) {
let parentId = d[config.parentId];
if (childrenListMap[parentId] == null) {
childrenListMap[parentId] = [];
}
nodeIds[d[config.id]] = d;
childrenListMap[parentId].push(d);
}
for (let d of data) {
let parentId = d[config.parentId];
if (nodeIds[parentId] == null) {
tree.push(d);
}
}
for (let t of tree) {
adaptToChildrenList(t);
}
function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
o[config.childrenList] = childrenListMap[o[config.id]];
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
adaptToChildrenList(c);
}
}
}
return tree;
}
/**
* 参数处理
* @param {*} params 参数
*/
export function tansParams(params) {
let result = ''
for (const propName of Object.keys(params)) {
const value = params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && value !== "" && typeof (value) !== "undefined") {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
let params = propName + '[' + key + ']';
var subPart = encodeURIComponent(params) + "=";
result += subPart + encodeURIComponent(value[key]) + "&";
}
}
} else {
result += part + encodeURIComponent(value) + "&";
}
}
}
return result
}
// 返回项目路径
export function getNormalPath(p) {
if (p.length === 0 || !p || p == 'undefined') {
return p
};
let res = p.replace('//', '/')
if (res[res.length - 1] === '/') {
return res.slice(0, res.length - 1)
}
return res;
}
// 验证是否为blob格式
export function blobValidate(data) {
return data.type !== 'application/json'
}

View File

@ -38,7 +38,7 @@ export default function upload(config) {
showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
if (res.confirm) {
store.dispatch('LogOut').then(res => {
uni.reLaunch({ url: '/pages/login/login' })
uni.reLaunch({ url: '/pages/loginInfo/login' })
})
}
})