java-mall-app/pagesub/info/edit.vue
2025-04-24 15:47:08 +08:00

508 lines
13 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="news-edit">
<view class="m-cell">
<view class="m-cell-hd">内容</view>
<view class="m-cell-bd">
<textarea
class="input"
name="text"
v-model="formData.category_content"
placeholder-class="placeholder"
></textarea>
</view>
</view>
<view class="m-cell">
<view class="m-cell-hd">关键字:</view>
<view class="m-cell-bd">
<input
class="input input-1"
placeholder-class="placeholder"
type="text"
v-model="formData.message_keywords"
/>
</view>
</view>
<view class="m-cell">
<view class="m-cell-hd">分类:</view>
<view class="m-cell-bd">
<select
name="public-choice"
class="input input-1"
v-model="formData.category_id"
@change="getCouponSelected"
>
<option value="">请选择</option>
<option :value="item.category_id" v-for="item in category">
{{ item.category_name }}
</option>
</select>
</view>
</view>
<view class="m-cell">
<view class="m-cell-hd">区域:</view>
<view class="m-cell-bd">
<select
name="public-choice"
class="input input-1"
v-model="formData.message_area"
@change="getCouponSelected"
>
<option value="">请选择</option>
<option :value="item.id" v-for="item in area">
{{ item.category_name }}
</option>
</select>
</view>
</view>
<view class="m-cell m-cell-select-before" @click="showbox">
<view class="m-cell-hd">省/市/区:</view>
<view class="m-cell-bd">
<label>{{ seladstr }}</label>
</view>
</view>
<view class="m-cell">
<view class="m-cell-hd">详细地址:</view>
<view class="m-cell-bd">
<input
class="input input-1"
placeholder-class="placeholder"
type="text"
v-model="formData.message_address"
/>
</view>
</view>
<view class="m-cell">
<view class="m-cell-hd">联系人:</view>
<view class="m-cell-bd">
<input
class="input input-1"
placeholder-class="placeholder"
type="text"
v-model="formData.message_username"
/>
</view>
</view>
<view class="m-cell">
<view class="m-cell-hd">手机号:</view>
<view class="m-cell-bd">
<input
class="input input-1"
placeholder-class="placeholder"
type="number"
v-model="formData.message_mobile"
/>
</view>
</view>
<view class="m-cell">
<view class="bk_box">
<view class="m-cell-hd">图片:</view>
<view class="pic_box">
<view class="pic_box_img">
<!-- 视频 -->
<view v-if="story_video" class="hjs-select-img">
<view
class="uni-icon uni-icon-clear mp-clean-icon icon-cuo"
@tap="delectVideo"
v-if="false"
></view>
<video :src="story_video" class="pic_box_image"></video>
<cover-view class="shanchu">
<label
@tap="delectVideo"
class="iconfont icon-delete"
style="color: #fff"
></label>
</cover-view>
</view>
<block v-for="(item, index) in ImgList" :key="index">
<view class="hjs-select-img">
<image
class="pic_box_image"
:src="item.Url"
:data-src="item.Url"
@click="previewImage"
mode="scaleToFill"
></image>
<view class="shanchu" style=""
><label
@tap="delImg"
class="iconfont icon-delete"
:data-id="item.SkuId"
:data-index="index"
style="color: #fff"
></label>
</view>
</view>
</block>
<view @click="chooseVideoImage" class="hjs-select-img">
<image
class="pic_box_image"
src="https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/static/xcxfile/appicon/img/pic_11.png"
></image>
</view>
</view>
</view>
</view>
</view>
<button class="u-btn u-btn-default" @click="submitInfo">提交</button>
<mpvue-city-picker
:themeColor="themeColor"
ref="mpvueCityPicker"
:pickerValueDefault="cityPickerValueDefault"
@onCancel="onCancel"
@onConfirm="onConfirm"
></mpvue-city-picker>
</view>
</template>
<script>
import mpvueCityPicker from "../../components/mpvue-citypicker/mpvueCityPicker.vue";
import { mapMutations, mapState } from "vuex";
var picPath = [];
export default {
components: {
mpvueCityPicker,
},
data() {
return {
formData: {
category_content: "",
message_keywords: "",
category_id: "",
message_area: "",
message_full_area: "",
message_address: "",
message_username: "",
message_mobile: "",
},
themeColor: "#007AFF",
cityPickerValueDefault: [0, 0, 0],
form: {},
story_video: "",
ImgList: [],
Pindex: 0,
selectedProId: 0,
selectedCityId: 0,
selectedCountyId: 0,
selectedPro: "",
selectedCity: "",
selectedCounty: "",
seladstr: "请选择所属地区",
category: [],
area: [],
isShow: false,
};
},
computed: mapState(["Config"]),
onLoad: function (options) {
uni.setNavigationBarTitle({
title: this.__("发布信息"),
});
this.GetAddressList();
},
methods: {
onUnload() {
if (this.$refs.mpvueCityPicker.showPicker) {
this.$refs.mpvueCityPicker.pickerCancel();
}
},
onBackPress() {
if (this.$refs.mpvueCityPicker.showPicker) {
this.$refs.mpvueCityPicker.pickerCancel();
return true;
}
},
onConfirm(e) {
let that = this;
console.info(e);
console.info(JSON.stringify(e));
this.pickerText = JSON.stringify(e);
this.setData({
Pindex: this.cityCode,
selectedProId: e.value[0],
selectedCityId: e.value[1],
selectedCountyId: e.value[2],
selectedPro: e.label[0],
selectedCity: e.label[1],
selectedCounty: e.label[2],
seladstr: that.$.isNull(e.label.toString())
? that.__("请选择地址")
: e.label.toString(),
});
},
onCancel(e) {
console.log(e);
},
GetAddressList: function () {
var that = this;
var params = {};
that.setData({
isdata: false,
category: [],
area: [],
});
that.$.request({
url: that.Config.URL.user.serviceMessage,
data: params,
success: function (data, status, msg, code) {
if (200 == status) {
if (data.items.length > 0) {
that.addresslist = data.items;
that.setData({
isdata: true,
category: data.category,
area: data.area,
});
} else {
that.setData({
isdata: false,
});
}
}
uni.stopPullDownRefresh();
},
});
},
submitInfo(e) {
var that = this;
var params = this.formData;
params.message_full_area = this.seladstr;
params.photos_area = JSON.stringify(that.ImgList);
params.user_birthday == that.__("请选择生日日期") &&
(params.user_birthday = "");
that.$.request({
url: this.Config.URL.user.addServiceMessage, //新加提交接口,家胜
data: params,
success: function (data, status, msg, code) {
if (status == 200) {
that.$.showToast({
title: that.__("更新成功!"),
});
setTimeout(function () {
that.$.navigateBack(1);
}, 2000);
} else {
that.$.confirm(msg);
}
},
});
},
chooseVideoImage() {
let that = this;
uni.showActionSheet({
title: that.__("选择上传类型"),
itemList: [that.__("图片")],
success: (res) => {
console.log(res);
if (res.tapIndex == 0) {
this.chooseImages();
} else {
this.chooseVideo();
}
},
});
},
UploadImg() {
var that = this,
max_num = 9;
if (
(that.$.isNull(that.ImgList) || (max_num = 9 - that.ImgList.length),
0 != max_num)
) {
that.$.chooseImage({
count: max_num,
sizeType: ["compressed"],
sourceType: ["album", "camera"],
success: function (result) {
for (
var num = that.ImgList.length,
path = result.tempFilePaths,
idx = 0;
idx < path.length;
idx++
) {
that.$.uploadFile({
url: that.Config.URL.upload,
method: "POST",
filePath: path[idx],
name: "upfile",
formData: { user: idx + num },
//header: {"content-type": "multipart/form-data"},
success: function (t) {
console.log(t), console.log(t.data);
var a = JSON.parse(t.data);
console.log(a);
var s = that.$.parseJSON(t.data);
let info = { Url: s.data.url, SkuId: 1 };
picPath.push(info);
for (var o = picPath.length - 1; 0 < o; o--) {
for (var e = 0; e < o; e++) {
if (picPath[e].order > picPath[e + 1].order) {
var i = picPath[e];
(picPath[e] = picPath[e + 1]), (picPath[e + 1] = i);
}
}
}
that.setData({ ImgList: picPath });
},
fail: function (t) {},
complete: function (t) {},
});
}
},
fail: function (t) {},
complete: function (t) {},
});
} else {
that.$.alert(that.__("最多上传9张图片"));
}
},
delImg(e) {
var that = this;
that.$.confirm(
"是否放弃上传本张图片?",
function (t) {
if (t.confirm) {
var a = that.ImgList,
s = [];
for (var o in ((picPath = []), a)) {
o != e.target.dataset.index && (s.push(a[o]), picPath.push(a[o]));
}
that.setData({ ImgList: s });
}
},
true
);
},
chooseImages() {
this.UploadImg();
return;
// 上传图片
uni.chooseImage({
count: 4, //默认9
sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
sourceType: ["album", "camera"], //从相册选择
success: (res) => {
this.ImgList = this.ImgList.concat(res.tempFilePaths);
if (this.ImgList.length == 4) {
this.VideoOfImagesShow = false;
}
},
});
},
// 三级联动选择
showbox() {
/*
this.setData({
isShow: true
})
*/
this.$refs.mpvueCityPicker.show();
},
},
};
</script>
<style lang="scss" scoped>
@import "../../styles/_variables.scss";
.input {
font-size: 30rpx;
color: #333333;
line-height: 34rpx;
border: 1rpx dashed #666;
width: auto;
height: 100px;
border-radius: 5px;
padding: 20rpx;
&.input-1 {
height: 60rpx;
line-height: 60rpx;
border-style: solid;
padding: 0 20rpx;
}
}
.placeholder {
line-height: 40rpx;
font-size: 30rpx;
color: #cccccc;
}
.m-cell-hd {
width: 120rpx;
text-align: center;
flex-shrink: 0;
}
.m-cell {
padding: 30rpx;
}
.m-cell-hd {
font-size: 24rpx;
font-weight: 400;
}
.bk_box {
display: flex;
.pic_box_image {
width: 100%;
height: 100%;
}
.pic_box_img {
display: flex;
flex-wrap: wrap;
}
.hjs-select-img {
display: inline-block;
position: relative;
width: 200rpx;
height: 200rpx;
margin: 0 20rpx 20rpx;
}
}
.m-select-box-msk {
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 3;
}
.m-select-box {
position: absolute;
width: 100%;
height: 300px;
background-color: #fff;
left: 0;
bottom: 0;
}
.u-select {
width: 100%;
height: 300px;
text-align: center;
}
.u-select .m-cell-bd {
width: 100%;
line-height: 50px;
font-size: 28rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.u-select .m-cell-bd label {
width: 100%;
}
.m-select-content {
position: relative;
}
</style>