vue-cli init

This commit is contained in:
2025-08-15 16:25:44 +08:00
parent e81805b4c0
commit 8e22afd798
590 changed files with 103286 additions and 213 deletions
+475
View File
@@ -0,0 +1,475 @@
<template>
<view>
<view class="flex-white-plr26 ptb10 mt32 bdb_f5">
<text class="mr26">产品名称
<text class="redXingh">*</text>
</text>
<u-input v-model="pName" placeholder="请在此输入产品名称" />
</view>
<view @click="pickerSelectFun('产品单位')" class="flex-white-plr26 ptb10 bdb_f5">
<text class="mr26">产品单位
<text class="redXingh">*</text>
</text>
<u-input v-model="unit" placeholder="请在此输入产品单位" />
</view>
<view class="flex-white-plr26 ptb10 bdb_f5">
<text class="mr26">产品价格
<text class="redXingh">*</text>
</text>
<u-input v-model="price" type="number" placeholder="请在此输入产品价格" />
</view>
<view @click="pickerSelectFun('产品类型')" class="flex-white-plr26 ptb20 bdb_f5">
<text class="mr26">产品类型
<text class="redXingh">*</text>
</text>
<view :class="flName ? '' : 'cBlack'">
{{flName ? flName : '请选择'}}
<u-icon class="ml26" name="arrow-right" size="40" color="#888888"></u-icon>
</view>
</view>
<view @click="pickerSelectFun('上下架')" class="flex-white-plr26 ptb20 bdb_f5">
<text class="mr26">是否上下架
<text class="redXingh">*</text>
</text>
<view :class="isSxJ ? '' : 'cBlack'">
{{isSxJ ? isSxJ : '请选择'}}
<u-icon class="ml26" name="arrow-right" size="40" color="#888888"></u-icon>
</view>
</view>
<view class="flex-white-plr26 ptb10 bdb_f5">
<text class="mr26">产品销量</text>
<u-input v-model="salesNum" type="number" placeholder="请在此输入产品销量" />
</view>
<view class="flex-white-plr26 ptb10 bdb_f5">
<text class="mr26">产品库存</text>
<u-input v-model="stock" type="number" placeholder="请在此输入产品库存" />
</view>
<view class="flex-white-plr26 ptb10 bdb_f5">
<text class="mr26">产品编码</text>
<u-input v-model="code" placeholder="请在此输入产品编码" />
<u-icon @click="scanFun" class="ml26" name="scan" size="44" color="#007aff"></u-icon>
</view>
<view class="flex-white-plr26-column ptb20 mt32 bdb_f5">
<view style="margin-bottom: 8rpx;">
<text>产品简述</text>
</view>
<u-input v-model="describe" type="textarea" :border="true" :height="100" :auto-height="true" />
</view>
<view class="flex-white-plr26-column ptb20 mt32 bdb_f5">
<view style="margin-bottom: 8rpx; display: flex; align-items: center;">
<text>产品参数</text>
<u-icon @click="addCsFun" name="plus-circle-fill" color="#007aff" size="50" style="margin-left: 16rpx;">
</u-icon>
</view>
<view class="canshuInputRow" v-for="(item, index) in cpCsList" :key="index">
<view class="csInput1">
<u-input v-model="item.csName" :border="true" placeholder="参数名称" />
</view>
<view class="csInput2">
<u-input v-model="item.csJieShao" :border="true" placeholder="请在此输入参数介绍" />
</view>
<u-icon @click="deleteCpCsFun(index)" name="close-circle-fill" size="50" color="#ff0000"></u-icon>
</view>
</view>
<view class="flex-white-plr26-column ptb20 mt32">
<view style="margin-bottom: 8rpx;">产品封面图(1张)</view>
<u-upload @on-choose-complete="uploadFmChangeFun" @on-remove="fmtRemoeFun" :size-type="siziType" :show-progress="false"
:file-list="cpFmtList" :max-size="5 * 1024 * 1024" max-count="1" :auto-upload="false"></u-upload>
</view>
<view class="flex-white-plr26-column ptb20 mt32">
<view style="margin-bottom: 8rpx;">产品轮播图(最多上传5张)</view>
<u-upload @on-choose-complete="uploadLbtChangeFun" @on-list-change="fileChangeFun" @on-remove="lbtRemoeFun" :size-type="siziType" :show-progress="false"
:file-list="cpLbtList" :max-size="5 * 1024 * 1024" max-count="5" :auto-upload="false"></u-upload>
</view>
<view class="flex-white-plr26-column ptb20 mt32">
<view style="margin-bottom: 8rpx;">产品详情图(最多上传9张)</view>
<u-upload @on-choose-complete="uploadXqChangeFun" @on-remove="xqtRemoeFun" :size-type="siziType" :show-progress="false"
:file-list="cpXqtList" :max-size="5 * 1024 * 1024" max-count="9" :auto-upload="false"></u-upload>
</view>
<!--提交按钮-->
<view class="submitView">
<u-button v-if="!pageType" type="primary" class="submitBtn" :ripple="true" ripple-bg-color="#909399"
@click="addXgFun">提交</u-button>
<u-button v-if="pageType == 'update'" type="primary" class="submitBtn" :ripple="true"
ripple-bg-color="#909399" @click="addXgFun">保存</u-button>
</view>
<!--组件-->
<u-select v-model="selectShow" :list="selectList" @confirm="selectConfirmFun"></u-select>
<!--图片上传方法组件-->
<uploadImg v-if="ppImgShow" :ppList="ppList" :ppUrls="ppUrls" @confirmPopupFun="confirmPopupFun"></uploadImg>
</view>
</template>
<script>
let that = '';
import {
getNowDate
} from '@/static/utils/date.js'
import {
uploadImgFun
} from '@/static/utils/upload.js'
import uploadImg from '@/components/upload/uploadImg'
import { crmChanpinApi, crmCpClassifyApi, fileApi } from '@/static/utils/api.js'
export default {
components: {
uploadImg
},
data() {
return {
selectShow: false,
selectList: [],
selectType: '',
pName: '',
price: '',
salesNum: '',
stock: '',
code: '',
flName: '',
cpFlId: '',
unit: '',
isSxJ: '上架',
describe: '',
action: 'http://www.example.com/upload',
fileList: [],
classify: [],
cpLbt: [],
cpXqt: [],
cpFmt: [],
cpLbtList: [],
cpXqtList: [],
cpFmtList: [],
cpCsList: [],
pageType: '',
siziType: ['compressed'],
ppImgShow: false,
uploadType: '',
ppList: [],
ppUrls: [],
xgCpInfo: {}
}
},
onLoad(e) {
that = this;
if (e.type == 'update') {
uni.setNavigationBarTitle({
title: '修改产品信息'
})
that.pageType = e.type;
that.setDataFun();
}
that.getClassifyFun();
},
methods: {
// 查询分类方法
getClassifyFun: function() {
uni.showLoading({
title: '加载中...',
mask: true
})
let reqData = {
action: 'getFlList',
params: {
matchObj: {
isShow: true
}
}
}
crmCpClassifyApi(reqData)
.then(res => {
let data = res.result.data;
if (data && data.length > 0) {
if(that.pageType != 'update') {
that.flName = data[0].flName;
that.cpFlId = data[0]._id;
}
that.classify = data;
} else {
uni.showModal({
title: '提示',
content: '当前暂未设置产品分类,请先添加产品分类!',
success(res) {
if (res.confirm) {
uni.redirectTo({
url: './classify?pageType=add'
})
}
}
})
}
})
},
// 选择定位地点
chooseAddrFun: function() {
uni.chooseLocation({
success: function(res) {
that.gjAddr = res.address;
}
});
},
// 展示相应数据选择框
pickerSelectFun: function(str) {
if (str == '产品类型') {
let classify = that.classify;
let arr = [];
for (var i = 0; i < classify.length; i++) {
arr.push({
value: classify[i]._id,
_id: classify[i]._id,
label: classify[i].flName
})
}
that.selectList = arr;
} else if (str == '上下架') {
that.selectList = [{
value: 0,
b: true,
label: '上架'
},
{
value: 1,
b: false,
label: '下架'
}
]
}
that.selectShow = true;
that.selectType = str;
},
// 选择框选中事件
selectConfirmFun: function(e) {
if (that.selectType == '产品类型') {
that.flName = e[0].label;
that.cpFlId = e[0]._id || e[0].value;
} else if (that.selectType == '上下架') {
that.isSxJ = e[0].label;
}
},
// 当内部文件列表被加入文件、移除文件,或手动调用clear方法时触发
uploadFmChangeFun: function(list) {
that.uploadType = 'fmt';
that.ppList = list;
that.ppUrls = that.cpFmt;
that.ppImgShow = true;
},
// 封面图删除
fmtRemoeFun: function(e) {
let arr = that.cpFmt.splice(e, 1);
that.deleteFun(arr)
},
fileChangeFun: function(e) {
},
// 上传轮播图
uploadLbtChangeFun: function(list) {
that.uploadType = 'lbt';
that.ppList = list;
that.ppUrls = that.cpLbt;
that.ppImgShow = true;
},
// 轮播图删除
lbtRemoeFun: function(e) {
let arr = that.cpLbt.splice(e, 1);
that.deleteFun(arr)
},
// 上传详情图
uploadXqChangeFun: function(list) {
that.uploadType = 'xqt';
that.ppList = list;
that.ppUrls = that.cpXqt;
that.ppImgShow = true;
},
// 详情图删除
xqtRemoeFun: function(e) {
let arr = that.cpXqt.splice(e, 1);
that.deleteFun(arr)
},
// popup图片上传完成回调
confirmPopupFun: function(e) {
that.ppImgShow = false;
if (that.uploadType == 'lbt') {
that.cpLbt = e;
} else if (that.uploadType == 'xqt') {
that.cpXqt = e;
} else {
that.cpFmt = e;
}
},
// 删除文件云函数
deleteFun: function(list) {
let reqData = {
action: 'delete',
params: {
fileList: [list[0].fileId]
}
}
fileApi(reqData)
.then(res => {
})
},
scanFun: function() {
uni.scanCode({
success(res) {
that.code = res.result;
}
})
},
// 产品添加方法
addXgFun: function() {
let reqObj = {
req: {
pName: that.pName,
price: that.price,
unit: that.unit,
cpFlId: that.cpFlId,
isSxJ: that.isSxJ == '上架' ? true : false,
code: that.code,
describe: that.describe,
cpCsList: that.cpCsList,
cpLbtList: that.cpLbt,
cpXqtList: that.cpXqt,
cpFmtList: that.cpFmt,
salesNum: that.salesNum,
stock: that.stock
}
}
if (!that.pName) {
uni.$myModalFun('产品名称不能为空,请输入!')
return
}
if (!that.price) {
uni.$myModalFun('产品价格不能为空,请输入!')
return
}
if (!that.unit) {
uni.$myModalFun('产品单位不能为空,请输入!')
return
}
let action = 'add';
let time = new Date().getTime();
if (that.pageType == 'update') {
action = 'update'
reqObj._id = that.xgCpInfo._id;
reqObj.req.update_date = time;
reqObj.req.updateUid = uni.$userInfo._id;
uni.showLoading({
title: '修改中...'
})
} else {
reqObj.req.create_date = time;
reqObj.req.update_date = time;
reqObj.req.cjRenId = uni.$userInfo._id;
reqObj.req.updateUid = uni.$userInfo._id;
uni.showLoading({
title: '提交中...'
})
}
let reqData = {
action: action,
params: reqObj
}
crmChanpinApi(reqData)
.then(res => {
if (action == 'update') {
uni.showToast({
title: '产品修改成功',
icon: 'none',
duration: 1000
})
} else {
that.pageType = 'update';
that.xgCpInfo._id = res.result.id;
let item = reqObj.req;
item._id = res.result.id;
uni.$cpDetail = item;
uni.showToast({
mask: true,
title: '产品新增成功',
duration: 1000
})
setTimeout(() => {
uni.redirectTo({
url: './cpDetail'
})
}, 1000)
}
})
},
// 新增产品参数
addCsFun: function() {
that.cpCsList = that.cpCsList.concat({
csName: '',
csJieShao: ''
})
},
// 删除产品参数
deleteCpCsFun: function(iii) {
that.cpCsList.splice(iii, 1)
},
// 设置信息
setDataFun: function() {
let obj = uni.$cpDetail;
that.xgCpInfo = obj;
that.pName = obj.pName
that.price = obj.price;
that.unit = obj.unit;
that.flName = obj.flName;
that.cpFlId = obj.cpFlId;
that.isSxJ = obj.isSxJ ? '上架' : '下架';
that.code = obj.code;
that.describe = obj.describe;
that.cpCsList = obj.cpCsList;
that.cpLbtList = obj.cpLbtList || [];
that.cpXqtList = obj.cpXqtList || [];
that.cpFmtList = obj.cpFmtList || [];
that.cpLbt = obj.cpLbtList || [];
that.cpXqt = obj.cpXqtList || [];
that.cpFmt = obj.cpFmtList || [];
that.salesNum = obj.salesNum || '';
that.stock = obj.stock || '';
}
}
}
</script>
<style>
page {
background-color: #F8F8F8;
padding-bottom: 260rpx;
}
.u-radio {
width: 200rpx !important;
}
.submitView {
width: 100%;
padding: 16rpx 0 26rpx;
background-color: #FFFFFF;
position: fixed;
bottom: 0;
left: 0;
border-top: 1rpx solid #f1f1f1;
display: flex;
align-items: center;
justify-content: center;
z-index: 100;
}
.submitBtn {
width: 666rpx;
}
.canshuInputRow {
display: flex;
justify-content: space-between;
margin-top: 16rpx;
}
.canshuInputRow>.csInput1 {
width: 36%;
}
.canshuInputRow>.csInput2 {
width: 50%;
}
</style>