Compare commits

...

6 Commits

Author SHA1 Message Date
lr 1d2efd6397 消息 2025-02-23 10:59:37 +08:00
sx 409f137e89 Merge branch 'lr' of http://1.94.221.165:3000/sx/jiuyiUniapp
# Conflicts:
#	jiuyi2/common/js/config.js
#	jiuyi2/pages/mine/setting/usePay.vue
#	jiuyi2/pages/mine/switch-accounts/index.vue
#	jiuyi2/pages/news/news.vue
#	jiuyi2/vite.config.js
2025-02-21 18:01:09 +08:00
sx 69babb6f3e 2025.02.21 工作代码 2025-02-21 17:56:36 +08:00
sx c4a23be60c 2025.02.20 工作代码提交 2025-02-21 10:03:50 +08:00
sx 3e4f7e3c09 Merge branch 'lr' of http://1.94.221.165:3000/sx/jiuyiUniapp 2025-02-20 15:49:11 +08:00
sx 38c39e1930 合并代码 2025-02-20 15:48:53 +08:00
28 changed files with 552 additions and 417 deletions
jiuyi2
api
common/js
components
news
public/editor
manifest.json
pages
index
login
merchant
business-operator
commodity-release
order
specifications
index.vue
jy-specifications-card
mine
release
shop
commodity
store
commodities.vue
components/jy-store-head
readme.mdvite.config.js

View File

@ -297,6 +297,61 @@ const mine = {
method: 'POST',
})
},
/**
* 账号解冻
* @param {Object} param
*/
getWalletBillList(param) {
return util.request({
url: '/user/walletTransaction/list',
data: param.data,
query: param.query,
method: 'GET',
load: true,
})
},
/**
* 支付宝提现
* @param {Object} param
*/
getToAlipay(param) {
return util.request({
url: '/user/alipay/withdraw',
data: param.data,
query: param.query,
method: 'POST',
load: true,
})
},
/**
* 银行卡提现
* @param {Object} param
*/
getToBank(param) {
return util.request({
url: '/user/alipay/withdrawToBankCard',
data: param.data,
query: param.query,
method: 'POST',
load: true,
})
},
/**
* 获取提现配置
* @param {Object} param
*/
getPayConfig(param) {
return util.request({
url: '/user/alipay/getPayConfig',
data: param.data,
query: param.query,
method: 'GET',
})
},
}
export default mine

View File

@ -7,7 +7,10 @@ const config = {
// #endif
// #ifndef H5
host: 'http://91f.xyz:8080',
<<<<<<< HEAD
// host: 'https://1a880cd5.r24.cpolar.top/',
=======
>>>>>>> 409f137e8990b13381bdbe7efca7eec9a3cfc89e
// #endif
// 支付方式配置
payType: {

View File

@ -260,11 +260,11 @@ const util = {
})
},
// 替换图片的宽度为最大宽度100% (移动端解析html富文本专用)
imgReplace(value, th) {
if (!th) {
value = value.replace(/<img src="/ig, '<img src="' + util.config.host);
}
/**
* 替换图片的宽度为最大宽度100% (移动端解析html富文本专用)
* @param {Object} value 富文本
*/
imgReplace(value) {
return value.replace(/<p([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<p')
.replace(/<p>/ig, '<p style="font-size: 15px; line-height: 25px;">')
.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1')

View File

@ -173,16 +173,16 @@ function handleList(list) {
list.forEach(item => {
item.MsgTime = handleDate(item.MsgTime)
let type = item.Type == 1 ? `C2C${item.To_Account}` : `GROUP${item.GroupId}`;
let type = item.type == 'C2C' ? `C2C${item.To_Account}` : `GROUP${item.GroupId}`;
uni.$chat.getConversationProfile(type).then(rs => {
let res = rs.data.conversation;
item.chatText = res.lastMessage.messageForShow;
item.unreadCount = res.unreadCount;
if (item.Type == 1) {
if (item.type == 'C2C') {
item.avatar = res.userProfile.avatar;
item.name = res.userProfile.nick;
} else if (item.Type == 2) {
} else if (item.type == 'GROUP') {
item.avatar = res.groupProfile.avatar;
item.name = res.groupProfile.name;
item.num = res.groupProfile.memberCount;
@ -256,7 +256,7 @@ function delMsg(item) {
return
}
let conversationId = item.Type == 1 ? `C2C${item.userID}` : `GROUP${item.groupID}`;
let conversationId = item.type == 'C2C' ? `C2C${item.userID}` : `GROUP${item.groupID}`;
uni.$chat.deleteConversation(conversationId).then(rs => {
getList()
@ -274,7 +274,7 @@ function setRead(item) {
return
}
let conversationId = item.Type == 1 ? `C2C${item.userID}` : `GROUP${item.groupID}`;
let conversationId = item.type == 'C2C' ? `C2C${item.userID}` : `GROUP${item.groupID}`;
uni.$chat.setMessageRead({
conversationID: conversationId,
}).then(rs => {

View File

@ -7,6 +7,7 @@
getCurrentInstance,
defineProps,
defineEmits,
defineExpose,
} from 'vue'
//
import util from '@/common/js/util'
@ -16,6 +17,11 @@
const {
proxy
} = getCurrentInstance()
const props = defineProps({
modelValue: String
})
//
const emit = defineEmits(['update:modelValue']);
//
const formats = reactive({})
//
@ -31,17 +37,33 @@
const colorKey = ref('forecolor')
onMounted(() => {
//
//
onEditorReady()
})
//
//
function onEditorReady() {
uni.createSelectorQuery().select('#editor').context((res) => {
editorCtx.value = res.context
}).exec()
}
//
function init(html) {
editorCtx.value.setContents({
html,
})
}
//
function getEditorContents() {
editorCtx.value.getContents({
success: rs => {
return rs
}
})
}
//
function undo() {
editorCtx.value.undo()
@ -57,14 +79,13 @@
* @param {Object} event
*/
function handleEditor(event) {
console.log('format', event.target.dataset)
let {
name,
value
} = event.target.dataset
if (!name) return
editorCtx.value.format(name, value)
}
}
/**
* 编辑器状态被变化
@ -157,6 +178,16 @@
}
})
}
//
function handleEditorInput(event) {
emit('update:modelValue', event.detail.html)
}
defineExpose({
init,
getEditorContents,
})
</script>
<template>
@ -221,7 +252,7 @@
<!-- 内容 -->
<view class="main">
<editor id="editor" class="ql-container" placeholder="在此输入产品详情" showImgSize showImgToolbar showImgResize
@statuschange="onStatusChange" @ready="onEditorReady">
@statuschange="onStatusChange" @ready="onEditorReady" @input="handleEditorInput">
</editor>
</view>
</view>

View File

@ -2,8 +2,8 @@
"name" : "九亿",
"appid" : "__UNI__08B31BC",
"description" : "",
"versionName" : "1.0.6",
"versionCode" : 1006,
"versionName" : "1.0.7",
"versionCode" : 1007,
"transformPx" : false,
/* 5+App */
"app-plus" : {

View File

@ -18,17 +18,18 @@
import util from '@/common/js/util';
// api
import api from '@/api/index.js'
import videoApi from '@/api/video.js'
import {
onLoad,
onReady,
onHide,
onUnload,
} from '@dcloudio/uni-app'
//
import apex from '@/components/header/apex.vue';
//
import videoMenu from '@/components/index/videoMenu.vue';
const {
proxy
} = getCurrentInstance()
@ -37,7 +38,6 @@
const userinfo = computed(() => store.state.userinfo)
//
const durainView = ref(0)
//
const list = reactive({
data: [],
@ -182,7 +182,7 @@
return
}
videoApi.pushVideo({
api.video.pushVideo({
query: {
ids: videoIds.value.join(','),
}
@ -219,7 +219,7 @@
return
}
videoApi.applyVideo({
api.video.applyVideo({
data: {
videoIds: videoIds.value.join(","),
author: apply.author,
@ -256,17 +256,15 @@
})
}
//
//
function pushCollect() {
uni.navigateTo({
url: util.setUrl('/pages/index/dataCenter/pushVideoCollects', {
ids: collectVideoIds.value.join(','),
})
})
link(util.setUrl('/pages/index/dataCenter/pushVideoCollects', {
ids: collectVideoIds.value.join(','),
}))
}
//
function navigateToPage(path) {
function link(path) {
uni.navigateTo({
url: path
});
@ -277,7 +275,7 @@
<view class="app">
<apex title="投流推广">
<template #right>
<view class="c333 f28" @click="navigateToPage('/pages/index/dataCenter/pushHistory')">历史推流</view>
<view class="c333 f28" @click="link('/pages/index/dataCenter/pushHistory')">历史推流</view>
</template>
</apex>
@ -432,7 +430,6 @@
</scroll-view>
</view>
</uni-popup>
</template>
<style lang="scss" scoped>

View File

@ -13,27 +13,148 @@
onReachBottom,
onPullDownRefresh
} from '@dcloudio/uni-app'
//
import api from '@/api/index.js'
//
import util from '@/common/js/util.js'
//
const list = reactive({
pageSize: 10,
pageNum: 1,
data: [],
total: 0,
})
//
const typeList = reactive([{
name: '全部',
id: '',
},
{
name: '余额',
id: 'balance',
},
{
name: '积分',
id: 'score',
},
{
name: '种子',
id: 'seed',
},
{
name: '榴莲果',
id: 'fruit',
}
])
//
const typeIndex = ref(0)
onLoad(() => {
//
//
getList()
})
onReachBottom(() => {
//
getMoreList()
})
onPullDownRefresh(() => {
//
refreshList()
})
//
function refreshList() {
list.pageNum = 1
getList()
}
//
function getMoreList() {
if (list.data.length >= list.total) return
list.pageNum++
getList()
}
//
function getList() {
api.mine.getWalletBillList({
query: {
pageSize: list.pageSize,
pageNum: list.pageNum,
type: typeList[typeIndex.value].id,
}
}).then(rs => {
if (rs.code == 200) {
if (list.pageNum == 1) list.data.length = 0
list.data.push(...rs.rows.map(item => {
//
item.typeName = typeList.find(type => type.id == item.type).name
return item
}))
list.total = rs.total
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
/**
* 账单
* @param {Object} index
*/
function handleTypeIndex(index) {
if (typeIndex.value === index) return
typeIndex.value = index
//
refreshList()
}
</script>
<template>
<view class="app">
<view class="listBox mtb30 mlr30">
<view class="typeList df bfff shadow">
<view class="item f1 fmid fdc" v-for="(item,index) in typeList" :class="{active: index == typeIndex}"
@click="handleTypeIndex(index)">
<view class="txt">{{item.name}}</view>
<view class="line"></view>
</view>
</view>
<view class="list oh mtb30 plr30 bfff br20" v-for="(item,index) in 3" :key="index">
<view class="line tac">
<view class="title mtb30">使用积分支付</view>
<view class="ghost"></view>
<view class="listBox mtb30 mlr30">
<view class="list oh mtb30 plr30 bfff br20" v-for="(item,index) in list.data" :key="item.id">
<view class="line ptb20 tac">
<view class="title mtb30">{{item.reason}}</view>
<view class="price mtb30 c111">
<text class="unit"></text>
<text class="numer b">1000</text>
<text class="numer b">{{item.amount}}</text>
</view>
<view class="time mtb30 c999 f28">2024.12.07 17:00</view>
</view>
<view class="line rows">
<view class="line f28">
<view class="df aic mtb20">
<view class="key w150">明细类型</view>
<view class="value f1 c999">{{item.typeName}}</view>
</view>
<view class="df aic mtb20">
<view class="key w150">交易时间</view>
<view class="value f1 c999">{{item.createTime}}</view>
</view>
<view class="df aic mtb20" @click.stop="util.copyText(item.transactionId)">
<view class="key w150">订单流水</view>
<view class="value f1 thd c999">{{item.transactionId}}</view>
<image class="copy wh24" src="/static/copy.png" mode="aspectFit" />
</view>
</view>
<view class="line ptb20 rows" v-if="0">
<view class="key">查看详情</view>
<uni-icons type="right" />
</view>
@ -45,14 +166,49 @@
</template>
<style lang="scss" scoped>
//
.ghost,
.typeList {
height: 100rpx;
}
//
.typeList {
position: fixed;
top: clac(-window-top + 0);
left: 0;
right: 0;
z-index: 10;
.item {
color: #999;
transition: .3s;
.line {
width: 80rpx;
height: 6rpx;
margin-top: 5rpx;
background-color: #333;
border-radius: 20rpx;
opacity: 0;
transition: .3s;
}
&.active {
color: #333;
.line {
opacity: 1;
}
}
}
}
//
.listBox {
//
.list {
.line {
padding: 20rpx 0;
}
.line+.line {
border-top: 2rpx solid #ddd;
@ -61,7 +217,7 @@
//
.price {
.unit {
font-size: 40rpx;
// font-size: 40rpx;
}
.numer {

View File

@ -5,30 +5,97 @@
reactive,
ref
} from 'vue';
import {
onLoad,
onReady,
onUnload,
} from '@dcloudio/uni-app'
//
import util from '@/common/js/util';
//
import api from '@/api/index.js';
//
const form = reactive({
amount: '',
withdrawAmount: '',
})
//
const typeList = reactive([{
key: 'bank',
name: '银行卡',
},
{
key: 'wechat',
name: '微信',
},
{
key: 'alipay',
name: '支付宝',
}
])
key: 'alipay',
name: '支付宝',
confirm: (event) => getToAlipay(event)
}, {
key: 'wechat',
name: '微信',
confirm: (event) => getToWechat(event)
}, {
key: 'bank',
name: '银行卡',
confirm: (event) => getToBank(event)
}, ])
//
const typeIndex = ref(0)
//
const alipayAccount = ref('未绑定')
//
const wechatAccount = ref('未绑定')
//
const config = reactive({})
onLoad(() => {
//
getBindAccount()
//
getPayConfig()
})
onUnload(() => {
//
removeListener()
})
//
function addListener() {
uni.$on('updateBindingAccount', () => {
//
getBindAccount()
})
}
//
function removeListener() {
uni.$off('updateBindingAccount')
}
//
function getPayConfig() {
api.mine.getPayConfig({}).then(rs => {
if (rs.code == 200) {
Object.assign(config, {}, rs.data)
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
//
function getBindAccount() {
api.mine.getBindAccount().then(rs => {
if (rs.code == 200) {
const result = rs.data
if (result.alipayId) alipayAccount.value = result.alipayId
if (result.wechatId) wechatAccount.value = result.wechatId
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
/**
* 切换下标
@ -44,6 +111,81 @@
function handleFast() {
//
}
/**
* 跳转
* @param {Object} url 跳转
*/
function link(url) {
uni.navigateTo({
url,
})
}
//
function handleSubmit() {
if (!form.withdrawAmount) {
util.alert('提现金额不能为空')
return
}
if (form.withdrawAmount < config.minWithdrawalAmount) {
util.alert(`提现金额不能小于${config.minWithdrawalAmount}`)
return
}
//
typeList[typeIndex.value].confirm()
}
//
function getToAlipay() {
api.mine.getToAlipay({
query: {
account: alipayAccount.value,
withdrawAmount: form.withdrawAmount,
}
}).then(rs => {
if (rs.code == 200) {
//
getToWalletCallback()
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
//
function getToWechat() {
util.alert('微信暂未开通,请联系管理员')
}
//
function getToBank() {
api.mine.getToBank({}).then(rs => {
if (rs.code == 200) {
//
getToWalletCallback()
util.alert({
content: '已发起提现申请,请等待后台审核',
showCancel: false,
})
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
//
function getToWalletCallback() {
//
util.getPurse()
}
</script>
<template>
@ -54,14 +196,14 @@
<view class="key">提现金额</view>
<view class="value inputBox df aic">
<view class="c333 f40 b"></view>
<input type="text" v-model="form.amount" placeholder="输入金额" />
<input type="text" v-model="form.withdrawAmount" placeholder="输入金额" />
</view>
</view>
<view class="line">
<view class="key rows">
<view>选择提现方式</view>
<view class="c999 f26" @click="handleFast">快速选择</view>
<view class="c999 f26" @click="handleFast" v-if="typeList[typeIndex].key === 'bank'">快速选择</view>
</view>
<picker :range="typeList" range-key="name" @change="handleTypeIndex">
<view class="value inputBox rows">
@ -71,8 +213,8 @@
</picker>
</view>
<!-- 银行卡 -->
<template v-if="typeList[typeIndex].key === 'bank'">
<view class="line">
<view class="key">银行名称</view>
<view class="value inputBox">
@ -88,6 +230,7 @@
</view>
</template>
<!-- 微信 -->
<template v-if="typeList[typeIndex].key === 'wechat'">
<view class="line">
<view class="key">微信号</view>
@ -97,22 +240,30 @@
</view>
</template>
<!-- 支付宝 -->
<template v-if="typeList[typeIndex].key === 'alipay'">
<view class="line">
<view class="key">支付宝账号</view>
<view class="value inputBox">
<input v-model="form.alipay" placeholder="输入金额" />
<view class="key f1">支付宝账号</view>
<view class="value df aic inputBox" @click="link('/pages/mine/setting/binding')">
{{alipayAccount}}
</view>
</view>
</template>
<!-- 温馨提示 -->
<view class="line notice ptb20 plr30 br20">
<view class="key">温馨提示</view>
<view class="content mt15 c333 f28">为保证账户资金安全请仔细核对好填写信息在申请提现</view>
<view class="content mt15 c333 f28">
<view>为保证账户资金安全请仔细核对好填写信息再申请提现</view>
<view>每次最低提现金额 {{config.minWithdrawalAmount}}</view>
<view>每次提现手续费 {{config.feeRate * 100}}%</view>
<view>每日最多提现次数 {{config.dailyWithdrawalLimit}}</view>
</view>
</view>
<view class="line">
<view class="btn pro black">提现</view>
<view class="btn pro black" @click="handleSubmit">提现</view>
</view>
</view>

View File

@ -244,7 +244,10 @@
<scroll-view scroll-y="true" class="scroll" @scrolltolower="getMoreGetList">
<view class="list c333 f30">
<view class="item mtb30 f32" v-for="(item,index) in getLog.data" :key="index">
<view>{{item.typeName}}{{item.amount}}</view>
<view class="rows">
<view class="f1 f32">{{item.typeName}}</view>
<view class="f28">{{item.amount}}积分</view>
</view>
<view class="time mt10 c999 f28 ">{{item.createTime}}</view>
</view>
</view>

View File

@ -1,6 +1,6 @@
<script setup>
/**
* 账号挂失
* 账号冻结
*/
import {
ref,

View File

@ -1,6 +1,6 @@
<script setup>
/**
* 账号挂失
* 账号解冻
*/
import {
ref,

View File

@ -1,30 +0,0 @@
<!-- 商品管理 -->
<template>
<view class="jy-business-operator-order">
<JyCommonHead title="商品管理" isRight>
<template v-slot:right>
<view @click="right">添加</view>
</template>
</JyCommonHead>
<view class="p16">
<JyOrderCard v-for="(item, index) in 10" type="merchandise_control"></JyOrderCard>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad,
onReachBottom
} from "@dcloudio/uni-app"
import JyCommonHead from '@/components/public/jy-common-head'
//
import JyOrderCard from '@/components/public/jy-order-card'
onReachBottom(() => {
//
})
</script>

View File

@ -1,155 +0,0 @@
<!-- 商品发布 -->
<template>
<view class="jy-commodity_release">
<!-- 商品图片多选 -->
<uni-forms :modelValue="paramsData">
<uni-forms-item class="vertical-label margins" label="商品图片" name="name">
<uni-file-picker :imageStyles="{
width: '150rpx',
height: '150rpx'
}" limit="9">
<view>
<image class="wh120" src="/static/shop-upload-image.png"></image>
</view>
</uni-file-picker>
</uni-forms-item>
<uni-forms-item class="vertical-label margins" labelPosition="top" label="商品标题" name="name">
<uni-easyinput type="textarea" autoHeight :inputBorder="false" maxlength="30"
placeholder="最多输入60字符30个汉字" />
</uni-forms-item>
<view class="margins mb20">
<uni-forms-item label="类目" name="name">
<view class="df jcsb aic hohp" @click="category.open()">
<text class="click_select">点击选择</text>
<uni-icons color="#d8d8d8" type="arrowright" size="18" />
</view>
<JyPopup ref="category" title="请选择申请原因" :showSave="false">
<view class="reason-list" v-for="item in 10" @click="selectReason(item)">
<text class="label">{{ item }}</text>
</view>
</JyPopup>
</uni-forms-item>
<uni-forms-item label="规格" name="name">
<text class="click_select hohp df aic" @click="addSpecifications">添加规格</text>
<!-- <uni-easyinput class="hohp df aic" type="text" :inputBorder="false" placeholder="" /> -->
</uni-forms-item>
<uni-forms-item label="价格" name="name">
<uni-easyinput class="hohp df aic" type="number" :inputBorder="false" placeholder="¥0.00" />
</uni-forms-item>
<uni-forms-item label="库存" name="name">
<uni-easyinput class="hohp df aic" type="number" :inputBorder="false" placeholder="输入库存" />
</uni-forms-item>
</view>
<uni-forms-item class="margins" label="发货" name="name">
<view class="df jcsb aic hohp">
<text class="click_select">点击选择</text>
<uni-icons color="#d8d8d8" type="arrowright" size="18" />
</view>
<JyPopup ref="category" title="发货" :showSave="false">
<uni-forms :modelValue="paramsDeliveryData">
<uni-forms-item label="发货时间" name="name">
<uni-easyinput class="hohp df aic" type="text" :inputBorder="false" placeholder="输入时间" />
</uni-forms-item>
<uni-forms-item label="运费" name="name">
<uni-easyinput class="hohp df aic" type="text" :inputBorder="false" placeholder="输入运费" />
</uni-forms-item>
<uni-forms-item label="所在地" name="name">
<uni-easyinput class="hohp df aic" type="text" :inputBorder="false" placeholder="输入省,市,区" />
</uni-forms-item>
</uni-forms>
</JyPopup>
</uni-forms-item>
<uni-forms-item class="margins" name="name">
<view class="df jcsb aic hohp">
<view class="df aic hohp">
<image class="wh50 mr40" src="/static/commodity-release-video.png" mode="aspectFit" />
<text>添加链接到视频</text>
</view>
<uni-icons color="#d8d8d8" type="arrowright" size="18" />
</view>
</uni-forms-item>
</uni-forms>
</view>
<!-- 立即发布 -->
<JyBottomBtn @click="postApi">立即发布</JyBottomBtn>
</template>
<script setup>
import { ref, reactive, inject, onMounted, onUnmounted } from 'vue'
import JyBottomBtn from '@/components/public/jy-bottom-button'
import JyPopup from '@/components/public/jy-popup'
const { checkLink } = inject('util');
import { eventBus } from '@/components/public/event-bus'
onMounted(() => {
eventBus.on('business-operator', businessOperator)
})
onUnmounted(() => {
eventBus.off('business-operator')
});
const businessOperator = (value) => {
console.log('====================================');
console.log(value);
console.log('====================================');
}
const category = ref(null)
const paramsData = reactive({
name: ''
})
const paramsDeliveryData = reactive({
name: ''
})
const postApi = () => {
uni.showToast({
title: '发布成功',
icon: 'none'
})
}
const addSpecifications = () => {
checkLink('pages/merchant/specifications/index')
}
</script>
<style scoped lang="scss">
.jy-commodity_release {
padding: 26rpx;
.vertical-label {
display: flex;
flex-direction: column !important;
}
.uni-forms-item {
margin-bottom: 20rpx !important;
}
::v-deep .file-picker__box-content {
border: none !important;
}
::v-deep .uni-easyinput {
.uni-easyinput__content-input {
padding: 0px !important;
}
.uni-input-placeholder {
display: flex;
align-items: center;
color: #c9c9c9 !important;
font-size: 28rpx !important;
height: 100%;
}
}
.margins {
padding: 16rpx 24rpx;
border-radius: 20rpx;
background-color: #ffffff;
}
.click_select {
color: #C9C9C9;
}
}
</style>

View File

@ -1,68 +0,0 @@
<!-- 我的订单 -->
<template>
<view class="jy-business-operator-order">
<JyCommonHead>
<template v-slot:center>
<uni-easyinput prefixIcon="search" v-model="value" placeholder="搜索内容" />
</template>
</JyCommonHead>
<JyShopNavigation :current="params.currentTab" :list="tabs" @tabItemClick="itemClick" marright="25px"
activeWeight='600' activeColor="#333333" activeBarColor="initial" />
<view class="p16">
<JyOrderCard v-for="(item, index) in 10" type="business_order"></JyOrderCard>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
import { onLoad } from "@dcloudio/uni-app"
import JyCommonHead from '@/components/public/jy-common-head'
//
import JyShopNavigation from '@/components/public/jy-shop-navigation'
import JyOrderCard from '@/components/public/jy-order-card'
import { onReachBottom } from '@dcloudio/uni-app';
onReachBottom(() => {
console.log('====================================');
console.log("加载到底了通知刷新");
console.log('====================================');
})
const itemClick = (item, index) => {
}
const tabs = ref([{
id: 1,
name: '全部'
},
{
id: 2,
name: '待付款'
},
{
id: 3,
name: '待发货'
},
{
id: 4,
name: '待收货'
},
{
id: 6,
name: '售后/退款'
}])
const value = ref('')
const params = ref({
currentTab: 0
})
//
onLoad(options => {
params.value.currentTab = options.currentTab / 1
})
</script>
<style scoped lang="scss">
.jy-order {
::v-deep .uni-easyinput__content {
border-radius: 18rpx;
width: 542rpx;
}
}
</style>

View File

@ -1,33 +0,0 @@
<!-- 规格 -->
<template>
<view class="jy-specifications p25">
<JyCommonHead title="商品管理" @back="sendCommodity">
<template v-slot:right>
<text @click="add">添加</text>
</template>
</JyCommonHead>
<view v-if="list.length > 0">
<JySpecificationsCard class="mt20" v-for="(item, index) in list" :key="index" :item="item">
</JySpecificationsCard>
</view>
</view>
<JyBottomBtn @click="postApi">确定</JyBottomBtn>
</template>
<script setup>
import { ref } from 'vue'
import JyCommonHead from '@/components/public/jy-common-head'
import JySpecificationsCard from './jy-specifications-card'
import { eventBus } from '@/components/public/event-bus.js'
import JyBottomBtn from '@/components/public/jy-bottom-button'
const list = ref([{}])
const sendCommodity = () => {
eventBus.emit('business-operator', list.value)
uni.navigateBack();
}
const add = () => {
list.value.push({})
}
</script>
<style scoped lang="scss"></style>

View File

@ -1,51 +0,0 @@
<!-- 规格卡片 -->
<template>
<view class="jy-specifications-card bfff p25 br25">
<uni-forms :modelValue="paramsData">
<uni-forms-item label="商品图片" name="name">
<uni-file-picker :imageStyles="{
width: '150rpx',
height: '150rpx'
}" limit="9">
<uni-icons type="camera" color="#B2B2B2" size="60"></uni-icons>
</uni-file-picker>
</uni-forms-item>
<uni-forms-item label="规格" name="name">
<uni-easyinput class="hohp df aic" type="text" :inputBorder="false" placeholder="输入规格" />
</uni-forms-item>
<view class="df">
<uni-forms-item label="价格" name="name">
<uni-easyinput class="hohp df aic" type="number" :inputBorder="false" placeholder="¥0.00" />
</uni-forms-item>
<uni-forms-item label="库存" name="name">
<uni-easyinput class="hohp df aic" type="number" :inputBorder="false" placeholder="输入库存" />
</uni-forms-item>
</view>
</uni-forms>
</view>
</template>
<script setup>
import { ref } from 'vue'
const props = defineProps({
item: {
type: Object,
default: () => ({})
}
})
const paramsData = ref({})
</script>
<style scoped lang="scss">
.jy-specifications-card {
::v-deep .uni-forms-item {
margin-bottom: 16rpx !important;
.uni-forms-item__content {
display: flex !important;
align-items: center !important;
}
}
}
</style>

View File

@ -91,6 +91,7 @@
data,
}).then(rs => {
if (rs.code == 200) {
uni.$emit('updateBindingAccount')
//
detail[bindItem.value.key] = bindItem.value.value
//

View File

@ -65,7 +65,7 @@
</view>
<view class="line" @click="link('/pages/login/unfreezeAccount')">
<view class="title">解冻账号</view>
<view class="title">账号解冻</view>
<view class="content">风险解除后可选择解除冻结</view>
</view>

View File

@ -173,7 +173,7 @@
<template v-if="userinfo.id">
<view class="area">
<view class="line rows" @click="link('/pages/mine/setting/usePay')">
<view class="line rows" @click="link('/pages/mine/setting/usePay')" v-if="0">
<view class="">先用后付</view>
<uni-icons type="right" />
</view>

View File

@ -36,7 +36,6 @@
screenHeight,
bottomSafeAreaHeight
} from '@/components/public/Mixins.js'
// import JyCommonHead from '@/components/public/jy-common-head'
const PayUse = ref(false)
//

View File

@ -39,7 +39,6 @@
ref,
inject
} from 'vue'
// import JyCommonHead from '@/components/public/jy-common-head'
import {
useStore
} from 'vuex'

View File

@ -2,7 +2,9 @@
//
import {
ref,
reactive
reactive,
getCurrentInstance,
nextTick
} from 'vue'
//
import {
@ -14,13 +16,16 @@
import util from '@/common/js/util.js'
//
import editorArea from '@/components/public/editor/editor'
const {
proxy
} = getCurrentInstance()
//
const form = reactive({
id: '',
categoryId: '',
sliderImage: [],
specs: [],
infoRichText: '',
})
//
const category = reactive([])
@ -49,6 +54,10 @@
form.cost = detail.cost
//
form.commission = detail.commission
//
form.infoRichText = detail.infoRichText || ''
//
proxy.$refs.editorAreaRef.init(form.infoRichText)
//
form.specs = detail.specs.map(item => {
return {
@ -177,6 +186,45 @@
const data = {
...form
}
console.log('data', data)
if (!data.sliderImage[0]) {
util.alert('商品图片不能为空')
return
}
if (!data.categoryId) {
util.alert('商品类目不能为空')
return
}
if (!data.specs[0]) {
util.alert('商品规格不能为空')
return
}
if (!data.price) {
util.alert('商品价格不能为空')
return
}
if (!data.cost) {
util.alert('商品成本价不能为空')
return
}
//
for (let i = 0; i < data.specs.length; i++) {
let item = data.specs[i]
if (!item.image) {
util.alert('规格图片不能为空')
return
}
if (!item.sku) {
util.alert('规格名称不能为空')
return
}
if (!item.stock) {
util.alert('规格库存不能为空')
return
}
}
//
data.sliderImage = data.sliderImage.join(',')
@ -190,6 +238,7 @@
content: '商品发布成功,请等待后台审核',
showCancel: false,
}).then(() => {
uni.$emit('updateUserProduct')
uni.navigateBack()
})
return
@ -211,7 +260,7 @@
<view class="imgList mt20">
<view class="imgs" v-for="(item,index) in form.sliderImage">
<image class="wh120 br10" :src="item" mode="aspectFill" />
<view class="close">
<view class="close" @click="removeImage(index)">
<uni-icons type="clear" color="#f00" size="40rpx" />
</view>
</view>
@ -327,7 +376,7 @@
</view>
<view class="main area editor">
<editorArea />
<editorArea ref="editorAreaRef" v-model="form.infoRichText" />
</view>
</view>

View File

@ -92,7 +92,10 @@
}
}).then(rs => {
if (rs.code == 200) {
Object.assign(detail, {}, rs.data)
//
const result = rs.data
if (result.infoRichText) result.infoRichText = util.imgReplace(result.infoRichText)
Object.assign(detail, {}, result)
return
}
util.alert({

View File

@ -6,6 +6,7 @@
} from 'vue'
import {
onLoad,
onUnload,
onReachBottom,
onPullDownRefresh
} from "@dcloudio/uni-app"
@ -26,8 +27,15 @@
onLoad(() => {
//
getList()
//
addListener()
})
onUnload(() => {
//
removeListener()
})
onReachBottom(() => {
//
getMoreList()
@ -38,6 +46,19 @@
refeshList()
})
//
function addListener() {
uni.$on('updateUserProduct', () => {
//
refeshList()
})
}
//
function removeListener() {
uni.$off('updateUserProduct')
}
//
function refeshList() {
if (product.list.length >= product.total) return

View File

@ -43,7 +43,6 @@ import {
statusBarHeight,
goBack
} from '@/components/public/Mixins.js'
import JyCommonHead from '@/components/public/jy-common-head'
import { shareToPlatform } from '@/components/public/share.js'
const share_more = ref(null)
const more_share_data = ref([])

View File

@ -63,7 +63,9 @@ deleteVideo 删除视频
selectAddress 选择地址
updateOrderList 更新订单列表
updateOrderDetail 更新订单详情
updateUserProduct 更新用户商品
updateBindingAccount 更新绑定账号
selectBindingBank 选择绑定的银行卡
缓存
---

View File

@ -4,7 +4,10 @@ import {
import uni from '@dcloudio/vite-plugin-uni';
let target = 'http://91f.xyz:8080'
<<<<<<< HEAD
// let target = 'https://1a880cd5.r24.cpolar.top/'
=======
>>>>>>> 409f137e8990b13381bdbe7efca7eec9a3cfc89e
export default defineConfig({
plugins: [uni()],