update
This commit is contained in:
@@ -376,6 +376,13 @@ const system = {
|
||||
data: data
|
||||
});
|
||||
},
|
||||
complaint: async (data) => {
|
||||
return request({
|
||||
method: MethodsENUM.POST,
|
||||
url: "/user/complaint",
|
||||
data: data
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
export default system;
|
||||
|
||||
@@ -9,7 +9,8 @@ const {label} = defineProps({
|
||||
|
||||
<template>
|
||||
<view class="x-form-item">
|
||||
<view class="!mb-[8rpx] x-form-item-label" v-if="label">{{ label }}</view>
|
||||
<view class="!mb-[8rpx] x-form-item-label" v-if="!$slots.label && label">{{ label }}</view>
|
||||
<slot name="label" v-else></slot>
|
||||
<slot></slot>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@@ -176,6 +176,13 @@
|
||||
"navigationBarTitleText": "新增帐号",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/complaint/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "投诉邀请人",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
],
|
||||
|
||||
@@ -5,7 +5,7 @@ import SQ from '../../static/icons/搜索.png';
|
||||
import XNav from "../../components/XNav.vue";
|
||||
import filer from "../../static/icons/filer-balck.png";
|
||||
import XFilter from "../../components/XFilter.vue";
|
||||
import {reactive, ref} from "vue";
|
||||
import {reactive, ref, watch} from "vue";
|
||||
import XFilterItem from "../../components/XFilterItem.vue";
|
||||
import XRadioGroup from "../../components/XRadioGroup.vue";
|
||||
import XRadio from "../../components/XRadio.vue";
|
||||
@@ -15,10 +15,16 @@ import Api from "../../api/index.js";
|
||||
const isVague = ref(false);
|
||||
const showFilter = ref(false);
|
||||
const isSearch = ref(false);
|
||||
const po = reactive({});
|
||||
const vo = reactive({});
|
||||
const sumPo = reactive({
|
||||
const po = reactive({
|
||||
status: 0,
|
||||
keyword: null,
|
||||
type: 0,
|
||||
order: 0,
|
||||
});
|
||||
const vo = reactive({
|
||||
income: 0,
|
||||
reward: 0,
|
||||
total: 0,
|
||||
});
|
||||
|
||||
const {loading, pagination, initFetchData} = useTableQuery({
|
||||
@@ -28,6 +34,17 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
Object.assign(vo, data);
|
||||
}
|
||||
});
|
||||
|
||||
watch(
|
||||
() => po.status,
|
||||
() => initFetchData(),
|
||||
{deep: true}
|
||||
)
|
||||
|
||||
const handleSeach = async () => {
|
||||
if (po.keyword === null || po.keyword === "") isSearch.value = false;
|
||||
await initFetchData();
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -35,10 +52,11 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
<x-nav></x-nav>
|
||||
|
||||
<x-filter
|
||||
v-model:model="sumPo"
|
||||
v-model:model="po"
|
||||
@success="initFetchData"
|
||||
v-model:visible="showFilter">
|
||||
<x-filter-item label="成员类型">
|
||||
<x-radio-group v-model:model-value="sumPo.type">
|
||||
<x-radio-group v-model:model-value="po.type">
|
||||
<view class="!grid grid-cols-3 gap-[24rpx]">
|
||||
<x-radio :value="0">我邀请的</x-radio>
|
||||
<x-radio :value="1">他人邀请的</x-radio>
|
||||
@@ -46,7 +64,7 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
</x-radio-group>
|
||||
</x-filter-item>
|
||||
<x-filter-item label="排序类型">
|
||||
<x-radio-group v-model:model-value="sumPo.type">
|
||||
<x-radio-group v-model:model-value="po.order">
|
||||
<view class="!grid grid-cols-3 gap-[24rpx]">
|
||||
<x-radio :value="0">按收益</x-radio>
|
||||
<x-radio :value="1">加入时间正序</x-radio>
|
||||
@@ -70,28 +88,28 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
<view class="!mx-[20rpx] bg-[#fff] rounded-[20rpx] !mt-[20rpx]">
|
||||
<view class="balance-card">
|
||||
<view class="p-[24rpx] !flex items-center gap-[20rpx]">
|
||||
<view class="radio radio-cur">今天</view>
|
||||
<view class="radio">昨天</view>
|
||||
<view class="radio">累计</view>
|
||||
<view :class="['radio', po.status===1?'radio-cur':'']" @click="po.status=1">今天</view>
|
||||
<view :class="['radio', po.status===2?'radio-cur':'']" @click="po.status=2">昨天</view>
|
||||
<view :class="['radio', po.status===0?'radio-cur':'']" @click="po.status=0">累计</view>
|
||||
</view>
|
||||
<view class="gap-line"></view>
|
||||
<view class="py-[52rpx] px-[44rpx] !grid grid-cols-3">
|
||||
<view>
|
||||
<view class="info-title">新增成员(个)</view>
|
||||
<view class="info-balance">
|
||||
4
|
||||
{{ vo.total }}
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<view class="info-title">团队收益(元)</view>
|
||||
<view class="info-balance">
|
||||
15.64
|
||||
{{ vo.income.toFixed(2) }}
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<view class="info-title">团队奖励(元)</view>
|
||||
<view class="info-balance">
|
||||
5.60
|
||||
{{ vo.reward.toFixed(2) }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -108,7 +126,7 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
<view :class="['btn', isSearch?'search':'']" @click="isSearch=true">
|
||||
<image class="!size-[28rpx] flex-shrink-0" mode="aspectFill" :src="SQ"></image>
|
||||
<text v-if="!isSearch">搜索</text>
|
||||
<input @blur="isSearch=false" v-else></input>
|
||||
<input v-model="po.keyword" @blur="handleSeach" v-else></input>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
72
src/pages/complaint/index.vue
Normal file
72
src/pages/complaint/index.vue
Normal file
@@ -0,0 +1,72 @@
|
||||
<script setup>
|
||||
import XNav from "../../components/XNav.vue";
|
||||
import XForm from "../../components/XForm.vue";
|
||||
import XFormItem from "../../components/XFormItem.vue";
|
||||
import XUpload from "../../components/XUpload.vue";
|
||||
import XInput from "../../components/XInput.vue";
|
||||
import Api from "../../api";
|
||||
import {reactive} from "vue";
|
||||
import {backPage, showToast} from "../../utils/uils";
|
||||
|
||||
const form = reactive({
|
||||
content: null,
|
||||
images: [],
|
||||
mobile: null,
|
||||
});
|
||||
|
||||
const success = async () => {
|
||||
const {msg} = await Api.system.complaint(form);
|
||||
showToast(msg);
|
||||
backPage();
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<x-nav></x-nav>
|
||||
<view class="p-[20rpx]">
|
||||
<x-form>
|
||||
<x-form-item>
|
||||
<template v-slot:label>
|
||||
<view class="!flex items-center gap-[12rpx]">
|
||||
<text class="!mt-[10rpx] text-[red]">*</text>
|
||||
投诉内容
|
||||
</view>
|
||||
</template>
|
||||
<view class="bg-[#F2F3F5] rounded-[8rpx] overflow-hidden px-[24rpx] py-[8rpx] relative">
|
||||
<textarea
|
||||
v-model="form.content"
|
||||
class="!w-full !h-[400rpx]"
|
||||
placeholder="请填写你想投诉的问题,以便我们提供更好的帮助">
|
||||
</textarea>
|
||||
<view class="absolute right-[24rpx] z-10 bottom-[8rpx] text-[#86909C]">22/200</view>
|
||||
</view>
|
||||
</x-form-item>
|
||||
<x-form-item label="相关截图">
|
||||
<x-upload v-model:files="form.images"></x-upload>
|
||||
</x-form-item>
|
||||
<x-form-item label="联系方式">
|
||||
<template v-slot:label>
|
||||
<view class="!flex items-center gap-[12rpx]">
|
||||
<text class="!mt-[10rpx] text-[red]">*</text>
|
||||
联系方式
|
||||
</view>
|
||||
</template>
|
||||
<x-input v-model:model-value="form.mobile" placeholder="手机号或微信号"></x-input>
|
||||
</x-form-item>
|
||||
</x-form>
|
||||
|
||||
<view class="fixed bottom-[24rpx] w-[calc(100vw-40rpx)]">
|
||||
<tui-button @click="success">确定提交</tui-button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
page {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import filer from '../../static/icons/filer.png';
|
||||
import XNav from "../../components/XNav.vue";
|
||||
import {reactive, ref} from "vue";
|
||||
import {reactive, ref, computed} from "vue";
|
||||
import TaskCard from "../../components/TaskCard.vue";
|
||||
import useTableQuery from "../../hooks/useTableQuery.js";
|
||||
import Api from "../../api/index.js";
|
||||
@@ -14,24 +14,28 @@ import XAlert from "../../components/XAlert.vue";
|
||||
|
||||
const taskType = reactive([]);
|
||||
const platformType = reactive([]);
|
||||
const tabs = [
|
||||
const tabs = computed(() => [
|
||||
{
|
||||
name: '进行中',
|
||||
value: 1,
|
||||
isTag: 0,
|
||||
},
|
||||
{
|
||||
name: '审核中',
|
||||
value: 2,
|
||||
isTag: 0,
|
||||
},
|
||||
{
|
||||
name: '已失效',
|
||||
value: -1,
|
||||
isTag: 0,
|
||||
},
|
||||
{
|
||||
name: '已完成',
|
||||
value: 3,
|
||||
isTag: 0,
|
||||
},
|
||||
];
|
||||
]);
|
||||
const showFilter = ref(false);
|
||||
const po = reactive({
|
||||
status: 1,
|
||||
@@ -183,9 +187,9 @@ const changeCurrent = async (item) => {
|
||||
|
||||
<view class="!grid grid-cols-4 gap-[20rpx] !px-[20rpx] bg-[#F2F3F5] py-[20rpx]">
|
||||
<view
|
||||
v-for="item in tabs"
|
||||
v-for="(item, index) in tabs"
|
||||
@click="changeCurrent(item)"
|
||||
:class="['rounded-full bg-[#fff] text-center !py-[8rpx] !text-[13px] duration-500', po.status===item.value ? 'current' : '']">
|
||||
:class="['rounded-full bg-[#fff] text-center !py-[8rpx] !text-[13px] duration-500', po.status===item.value ? 'current' : '', vo[`count${index+1}`] > 0 ? 'badge' : '']">
|
||||
{{ item.name }}
|
||||
</view>
|
||||
</view>
|
||||
@@ -205,6 +209,22 @@ const changeCurrent = async (item) => {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.badge {
|
||||
@apply relative;
|
||||
}
|
||||
|
||||
.badge::before {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 15rpx;
|
||||
height: 15rpx;
|
||||
background-color: red;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.block-value {
|
||||
color: rgb(22, 93, 255);
|
||||
font-size: 40rpx;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import goodsIcon from '../../static/icons/goodsIcon.png';
|
||||
import XNav from "../../components/XNav.vue";
|
||||
import {defineAsyncComponent, getCurrentInstance, nextTick, onMounted, reactive, ref} from 'vue';
|
||||
import {defineAsyncComponent, getCurrentInstance, nextTick, onMounted, computed, ref} from 'vue';
|
||||
import {onLoad} from "@dcloudio/uni-app";
|
||||
import XLink from "../../components/XLink.vue";
|
||||
import XNoticeBar from "../../components/XNoticeBar.vue";
|
||||
@@ -27,7 +27,7 @@ const details = ref(null);
|
||||
const home = ref(false);
|
||||
const mainDetailWidth = ref(0);
|
||||
const currentTabs = ref(0);
|
||||
const tabs = reactive([
|
||||
const tabs = computed(() => [
|
||||
{
|
||||
name: "任务详情",
|
||||
component: TaskDetails,
|
||||
@@ -39,10 +39,12 @@ const tabs = reactive([
|
||||
{
|
||||
name: "我的回填",
|
||||
component: MyBackfill,
|
||||
isDot: details.value.children.is_back > 0,
|
||||
},
|
||||
{
|
||||
name: "审核沟通",
|
||||
component: ReviewCommunication,
|
||||
isDot: details.value.children.is_read > 0,
|
||||
},
|
||||
]);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup>
|
||||
import {onMounted, reactive} from "vue";
|
||||
import Api from "../../../api/index.js";
|
||||
import {copy, toPage} from "../../../utils/uils.js";
|
||||
|
||||
const detail = reactive({});
|
||||
|
||||
@@ -9,12 +10,6 @@ onMounted(() => {
|
||||
Object.assign(detail, data);
|
||||
});
|
||||
});
|
||||
|
||||
const callPhone = () => {
|
||||
uni.makePhoneCall({
|
||||
phoneNumber: detail.mobile,
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -23,11 +18,12 @@ const callPhone = () => {
|
||||
<view class="test-24r !ml-[24rpx]">{{ detail.nickname }}</view>
|
||||
|
||||
<view
|
||||
@click="callPhone"
|
||||
@click="copy(detail.wechat)"
|
||||
class="px-[20rpx] py-[7rpx] test-22r text-[#fff] rounded-full bg-[var(--primary-color)] !flex items-center justify-center !ml-auto">
|
||||
联系TA
|
||||
</view>
|
||||
<view
|
||||
@click="toPage('/pages/complaint/index')"
|
||||
class="px-[20rpx] py-[7rpx] test-22r text-[#fff] rounded-full bg-[#C9CDD4] !flex items-center justify-center !ml-[20rpx]">
|
||||
投诉
|
||||
</view>
|
||||
|
||||
@@ -122,7 +122,7 @@ onMounted(() => {
|
||||
<image class="!size-[40rpx]" mode="aspectFill" :src="ICON1"></image>
|
||||
<view class="test-24r">提现记录</view>
|
||||
</view>
|
||||
<view class="!flex items-center gap-[12rpx]" @click="toPage('/pages/changeLog/index')">
|
||||
<view class="!flex items-center gap-[12rpx]" @click="toPage('/pages/walletLog/index')">
|
||||
<image class="!size-[40rpx]" mode="aspectFill" :src="ICON2"></image>
|
||||
<view class="test-24r">变动记录</view>
|
||||
</view>
|
||||
|
||||
Reference in New Issue
Block a user