Commit b7ff6206 authored by 周健威's avatar 周健威

Merge branch 'dev'

parents 376541ec 43930c36
......@@ -89,3 +89,14 @@ export function getCompanyInfoByType(query) {
params: query
});
}
/**
* 回复
*/
export function feedbackInfoUpdate(query) {
return fetch({
url: 'api/website/feedbackInfo/updateObj',
method: 'post',
data: query
});
}
......@@ -26,6 +26,21 @@
{{ scope.row.content}}
</template>
</el-table-column>
<el-table-column align="center" label="回复内容">
<template slot-scope="scope">
{{ scope.row.responseInfo}}
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
v-if="!scope.row.responseInfo"
size="small"
class="el-button el-button--text el-button--small"
@click="handleDeal(scope.row)"
>回复</el-button>
</template>
</el-table-column>
<!-- <el-table-column align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- &lt;!&ndash; 根据状态获取对应中文 &ndash;&gt;-->
......@@ -39,13 +54,19 @@
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
</div>
<!-- 回复 -->
<deal-dialog v-if="dealVisible" :one-row="oneRow" v-on:dealEvent="dealEvent"></deal-dialog>
</div>
</template>
<script type="javascript">
import dealDialog from "./dealDialog";
import { feedbackInfoList } from 'api/userManagement/index'
import {timestamp2Date} from '@/utils/dateUtils';
export default {
name: 'userManagement',
components: {
dealDialog
},
computed:{
getStatus(status) {
return (status) => {
......@@ -70,6 +91,8 @@
limit: 20,
type: 3 //1、联系客服,2、意见反馈,3、订单反馈
},
oneRow: {}, // 当前操作项
dealVisible: false, // 回复弹窗
invoiceDialogVisible: false, // 查看发票弹窗
addressDialogVisible: false // 查看地址弹窗
}
......@@ -85,6 +108,22 @@
this.listQuery.page = 1
this.getList() // 获取用户列表
},
/**
* 回复
*/
handleDeal(row){
this.oneRow = row
this.dealVisible = true
},
/**
* 回复-返回
*/
dealEvent(e){
this.dealVisible = false
if(e){
this.getList()
}
},
/**
* 查看发票-返回界面
*/
......
......@@ -25,6 +25,21 @@
{{ scope.row.content}}
</template>
</el-table-column>
<el-table-column align="center" label="回复内容">
<template slot-scope="scope">
{{ scope.row.responseInfo}}
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
v-if="!scope.row.responseInfo"
size="small"
class="el-button el-button--text el-button--small"
@click="handleDeal(scope.row)"
>回复</el-button>
</template>
</el-table-column>
<!-- <el-table-column align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- &lt;!&ndash; 根据状态获取对应中文 &ndash;&gt;-->
......@@ -38,9 +53,12 @@
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
</div>
<!-- 回复 -->
<deal-dialog v-if="dealVisible" :one-row="oneRow" v-on:dealEvent="dealEvent"></deal-dialog>
</div>
</template>
<script type="javascript">
import dealDialog from "./dealDialog";
import { feedbackInfoList } from 'api/userManagement/index'
import {timestamp2Date} from '@/utils/dateUtils';
export default {
......@@ -58,6 +76,9 @@
}
},
},
components: {
dealDialog
},
data() {
return {
times: [],
......@@ -69,6 +90,8 @@
limit: 20,
type: 1 //1、联系客服,2、意见反馈,3、订单反馈
},
oneRow: {}, // 当前操作项
dealVisible: false, // 回复弹窗
invoiceDialogVisible: false, // 查看发票弹窗
addressDialogVisible: false // 查看地址弹窗
}
......@@ -84,6 +107,22 @@
this.listQuery.page = 1
this.getList() // 获取用户列表
},
/**
* 回复
*/
handleDeal(row){
this.oneRow = row
this.dealVisible = true
},
/**
* 回复-返回
*/
dealEvent(e){
this.dealVisible = false
if(e){
this.getList()
}
},
/**
* 查看发票-返回界面
*/
......
<template>
<el-dialog title="回复" :visible.sync="isVisible" width="600px" class="send-main">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-form-item label="回复内容" prop="responseInfo">
<el-input type="textarea" v-model="form.responseInfo" placeholder="请输入回复内容" :maxlength="400"></el-input>
</el-form-item>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" v-if="!isClick" @click="okSend('form')">确 定</el-button>
<el-button type="primary" v-else style="opacity: 0.6;" disabled>确 定</el-button>
</div>
</el-dialog>
</template>
<script type="javascript">
import {feedbackInfoUpdate} from 'api/website/order/index'
export default {
props: ['oneRow'],
name: 'dealDialog',
data() {
return {
isClick: false, // 是否点击了发货
rules: {
responseInfo: { required: true, message: '请输入回复内容', trigger: 'blur' }
},
form: {
id: this.oneRow.id,
responseInfo: '' // 回复内容
},
isVisible: false,
}
},
watch: {
isVisible(newValue, oldValue) {
if (!newValue) {
this.$emit('dealEvent', false)
}
}
},
mounted() {
this.isVisible = true
},
methods: {
/**
* 弹框-取消
* */
cancel() {
this.$emit('dealEvent', false)
},
/**
* 回复
*/
okSend(formName) {
let _this = this
if(this.isClick){
return
}
this.isClick = true
setTimeout(function(){
_this.isClick = false
}, 2000)
const set = this.$refs;
set[formName].validate((valid) => {
if (valid) {
feedbackInfoUpdate(this.form).then((response) => {
if(response.status == 200){
this.$notify({
title: "成功",
message: "操作成功",
type: "success",
duration: 2000
});
this.$emit('dealEvent', true)
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
});
}
})
}
}
}
</script>
<style lang="scss">
.send-main{
.send-info{
border: 1px solid #eee;
padding: 20px;
margin-bottom: 20px;
margin-top: 20px;
}
.invoice-item{
padding: 20px;
border: 1px solid #eee;
.invoice-item-text{
margin-top: 10px;
}
}
}
</style>
......@@ -25,6 +25,21 @@
{{ scope.row.content}}
</template>
</el-table-column>
<el-table-column align="center" label="回复内容">
<template slot-scope="scope">
{{ scope.row.responseInfo}}
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
v-if="!scope.row.responseInfo"
size="small"
class="el-button el-button--text el-button--small"
@click="handleDeal(scope.row)"
>回复</el-button>
</template>
</el-table-column>
<!-- <el-table-column align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- &lt;!&ndash; 根据状态获取对应中文 &ndash;&gt;-->
......@@ -38,13 +53,19 @@
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
</div>
<!-- 回复 -->
<deal-dialog v-if="dealVisible" :one-row="oneRow" v-on:dealEvent="dealEvent"></deal-dialog>
</div>
</template>
<script type="javascript">
import dealDialog from "./dealDialog";
import { feedbackInfoList } from 'api/userManagement/index'
import {timestamp2Date} from '@/utils/dateUtils';
export default {
name: 'userManagement',
components: {
dealDialog
},
computed:{
getStatus(status) {
return (status) => {
......@@ -69,6 +90,8 @@
limit: 20,
type: 2 //1、联系客服,2、意见反馈,3、订单反馈
},
oneRow: {}, // 当前操作项
dealVisible: false, // 回复弹窗
invoiceDialogVisible: false, // 查看发票弹窗
addressDialogVisible: false // 查看地址弹窗
}
......@@ -138,6 +161,22 @@
handleAddress(){
this.addressDialogVisible = true
},
/**
* 回复
*/
handleDeal(row){
this.oneRow = row
this.dealVisible = true
},
/**
* 回复-返回
*/
dealEvent(e){
this.dealVisible = false
if(e){
this.getList()
}
},
/**
* 清除搜索
*/
......
......@@ -24,32 +24,50 @@
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="订单状态">
<el-select filterable v-model="listQuery.status" placeholder="请选择">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option v-for="item in orderStatusList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<!-- <el-col :span="8">-->
<!-- <el-form-item label="商品类型">-->
<!-- <el-select filterable v-model="listQuery.type" placeholder="请选择">-->
<!-- <el-option :key="undefined" label="全部" :value="undefined"></el-option>-->
<!-- <el-option :key="1" label="标准数据" :value="1"></el-option>-->
<!-- <el-option :key="2" label="影像图库" :value="2"></el-option>-->
<!-- <el-option :key="3" label="行业应用" :value="3"></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="8">
<el-form-item label="商品类型">
<el-select filterable v-model="listQuery.type" placeholder="请选择">
<el-form-item label="交付方式">
<el-select filterable v-model="listQuery.sendType" placeholder="请选择">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option :key="1" label="标准数据" :value="1"></el-option>
<el-option :key="2" label="全部" :value="2"></el-option>
<el-option :key="3" label="全部" :value="3"></el-option>
<el-option :key="1" label="线上" :value="1"></el-option>
<el-option :key="2" label="线下" :value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="订单状态">
<el-select filterable v-model="listQuery.status" placeholder="请选择">
<el-form-item label="是否定制">
<el-select filterable v-model="listQuery.type" placeholder="请选择">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option v-for="item in orderStatusList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-option :key="1" label="否" :value="1"></el-option>
<el-option :key="2" label="是" :value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="付款状态">
<el-select filterable v-model="listQuery.payStatus" placeholder="请选择">
<el-form-item label="是否开发票">
<el-select filterable v-model="listQuery.invoiceStatus" placeholder="请选择">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option :key="1" label="已支付" :value="1"></el-option>
<el-option :key="2" label="未支付" :value="2"></el-option>
<el-option :key="1" label="是" :value="2"></el-option>
<el-option :key="2" label="否" :value="1"></el-option>
</el-select>
</el-form-item>
</el-col>
......@@ -91,7 +109,11 @@
<div class="flex-aic-jcb" style="width: 100%;">
<div class="flex-aic">
<img style="width: 84px;height: 62px;border-radius: 8px;object-fit: cover;margin-right: 6px;" :src="iitem.itemPic">
<span v-if="iitem.type != 1">{{iitem.name}}</span>
<div v-if="iitem.type != 1">
<p>{{iitem.name}}</p>
<p v-if="iitem.type==2">尺寸:{{iitem.fileWidth}}</p>
<p v-if="iitem.type==3">类别:{{iitem.firstTitle}}</p>
</div>
<div v-else>
<p>卫星:{{iitem.detailJson.imageSatelliteType}}</p>
<p>传感器:{{iitem.detailJson.imageSensorType}}</p>
......@@ -99,7 +121,7 @@
<p>云量:{{iitem.detailJson.imageCloudage}}</p>
</div>
</div>
<p style="padding-right: 10px;">{{iitem.type==1?'标准数据':iitem.type==2?'行业应用':iitem.type==3?'影像图库':iitem.type}}</p>
<p style="padding-right: 10px;">{{iitem.type==1?'标准数据':iitem.type==3?'行业应用':iitem.type==2?'影像图库':iitem.type}}</p>
</div>
</div>
</td>
......@@ -232,6 +254,9 @@
payStatus: undefined, // 支付状态: 1、已支付,2、未支付
keywords: undefined, // 订单搜索
status: undefined, // 订单状态:0、定制订单无价格 1--创建订单,2--待付款,3--已支付,4--已发货, 5--已收货, 6、已完成 -1、删除,-2、取消, -3 退款
invoiceStatus: undefined, // 发票状态: 1、未开发票,2、已开发票, 3、已发货, 4、已收货、5、退回, 6、已完成
type: undefined, // 1、普通订单,2、定制订单
sendType: undefined, // 配送方式:1、线上配送,2、快递配送
},
form:{
auditStatus: undefined, // 审核状态: 1、审核通过,2、审核拒绝
......@@ -428,6 +453,13 @@
if(item.orderItemList){
item.orderItemList.map(function(iitem){
iitem.detailJson = iitem.detailJson ? JSON.parse(iitem.detailJson) : {}
if(iitem.type == 2){ // 影像图库-尺寸
iitem.fileWidth = iitem.detailJson.imageInfoRelationList && iitem.detailJson.imageInfoRelationList.length>0 ? iitem.detailJson.imageInfoRelationList[0].fileWidth:''
}
if(iitem.type == 3){
// 行业应用-类别
iitem.firstTitle = iitem.detailJson.firstTitle ? iitem.detailJson.firstTitle : ''
}
if (iitem.type == 1) {
// 标准数据
iitem.imageResolutionStr = iitem.detailJson.imageResolution?iitem.detailJson.imageResolution.replace(/{/g, ""):''
......@@ -460,6 +492,9 @@
payStatus: undefined, // 支付状态: 1、已支付,2、未支付
keywords: undefined, // 订单搜索
status: undefined, // 订单状态:0、定制订单无价格 1--创建订单,2--待付款,3--已支付,4--已发货, 5--已收货, 6、已完成 -1、删除,-2、取消, -3 退款
invoiceStatus: undefined, // 发票状态: 1、未开发票,2、已开发票, 3、已发货, 4、已收货、5、退回, 6、已完成
type: undefined, // 1、普通订单,2、定制订单
sendType: undefined, // 配送方式:1、线上配送,2、快递配送
};
this.getList();
},
......
......@@ -71,6 +71,76 @@
<kind-editor id="editor_id" :content.sync="form.intro" :afterChange="afterChange()" :loadStyleMode="false"@on-content-change="onContentChange"></kind-editor>
</el-col>
</el-form-item>
<el-form-item label="图片">
<div class="flex-aic">
<el-upload
class="avatar-uploader1"
action="https://jsonplaceholder.typicode.com/posts/"
list-type="picture-card"
:show-file-list="false"
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:on-success="handleSuccess1">
<img v-if="form.image1" :src="form.image1">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div class="flex-fdc">
<div class="flex-aic">
<el-upload
class="avatar-uploader2"
action="https://jsonplaceholder.typicode.com/posts/"
list-type="picture-card"
:show-file-list="false"
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:on-success="handleSuccess2">
<img v-if="form.image2" :src="form.image2" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<el-upload
class="avatar-uploader2"
action="https://jsonplaceholder.typicode.com/posts/"
list-type="picture-card"
:show-file-list="false"
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:on-success="handleSuccess3">
<img v-if="form.image3" :src="form.image3" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<el-upload
class="avatar-uploader2"
action="https://jsonplaceholder.typicode.com/posts/"
list-type="picture-card"
:show-file-list="false"
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:on-success="handleSuccess4">
<img v-if="form.image4" :src="form.image4" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
<div class="flex-aic">
<el-upload
class="avatar-uploader3"
action="https://jsonplaceholder.typicode.com/posts/"
list-type="picture-card"
:show-file-list="false"
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:on-success="handleSuccess5">
<img v-if="form.image5" :src="form.image5" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<el-upload
class="avatar-uploader4"
action="https://jsonplaceholder.typicode.com/posts/"
list-type="picture-card"
:show-file-list="false"
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:on-success="handleSuccess6">
<img v-if="form.image6" :src="form.image6" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
</div>
</el-form-item>
<el-form-item>
<el-button>取消</el-button>
<el-button type="primary" @click="onSubmit">确定</el-button>
......@@ -80,14 +150,11 @@
</div>
</template>
<script>
import {
getCompanyInfo,
setCompanyInfo,
} from "@/api/website/aboutUs/index";
<script type="javascript">
import KindEditor from "@/components/Kindeditor";
import loadBMap from '@/utils/loadBMap.js'
import { addUpdate, companyInfo } from "api/website/aboutUs"
import {objDeepCopy} from "../../../utils";
export default {
name: "AboutUs",
components: {
......@@ -97,6 +164,8 @@ export default {
return {
zoom: 15,  //地图展示级别
showMap: false,
BASE_API: process.env.BASE_API,
fileList2: [],//图片
form: {
id: undefined,
phone: undefined, // 联系电话
......@@ -104,6 +173,13 @@ export default {
address: undefined, // 地址
lat: 23.12005,
lng: 113.30765,
image1: '',// 图片1
image2: '',// 图片2
image3: '',// 图片3
image4: '',// 图片4
image5: '',// 图片5
image6: '',// 图片6
bottomImgArr: [], // 关于我们图片
intro: undefined // 简介
},
rule: {
......@@ -138,6 +214,8 @@ export default {
trigger: "blur"
},
},
dialogImageUrl: '',
dialogVisible: false,
map: '', //地图实例
mk: '' //Marker实例
};
......@@ -235,6 +313,42 @@ export default {
},
afterChange () {
},
/**
* banner上传
* */
handleSuccess1(res, file){
this.form.image1 = res.data;
},
/**
* banner上传
* */
handleSuccess2(res, file){
this.form.image2 = res.data;
},
/**
* banner上传
* */
handleSuccess3(res, file){
this.form.image3 = res.data;
},
/**
* banner上传
* */
handleSuccess4(res, file){
this.form.image4 = res.data;
},
/**
* banner上传
* */
handleSuccess5(res, file){
this.form.image5 = res.data;
},
/**
* banner上传
* */
handleSuccess6(res, file){
this.form.image6 = res.data;
},
/**
* 关于我们-信息
......@@ -249,7 +363,22 @@ export default {
address: res.data.address, // 地址
lng: parseFloat(res.data.lng), // 经纬度
lat: parseFloat(res.data.lat), // 经纬度
intro: res.data.intro // 简介
intro: res.data.intro, // 简介
bottomImgArr: res.data.bottomImgs?res.data.bottomImgs.split(','): [],
image1: '',// 图片1
image2: '',// 图片2
image3: '',// 图片3
image4: '',// 图片4
image5: '',// 图片5
image6: '' // 图片6
}
if(this.form.bottomImgArr.length>=6){
this.form.image1 = this.form.bottomImgArr[0]
this.form.image2 = this.form.bottomImgArr[1]
this.form.image3 = this.form.bottomImgArr[2]
this.form.image4 = this.form.bottomImgArr[3]
this.form.image5 = this.form.bottomImgArr[4]
this.form.image6 = this.form.bottomImgArr[5]
}
this.showMap = true
} else {
......@@ -266,9 +395,22 @@ export default {
* 关于我们-数据保存
*/
onSubmit() {
let params = objDeepCopy(this.form)
let bottomImgArr = []
bottomImgArr.push(this.form.image1)
bottomImgArr.push(this.form.image2)
bottomImgArr.push(this.form.image3)
bottomImgArr.push(this.form.image4)
bottomImgArr.push(this.form.image5)
bottomImgArr.push(this.form.image6)
if(bottomImgArr.length != 6){
this.$message.warning('请上传6张图片!')
return
}
params.bottomImgs = bottomImgArr.join(',')
this.$refs["form"].validate(valid => {
if (valid) {
addUpdate(this.form).then((res) => {
addUpdate(params).then((res) => {
if(res.status == 200){
this.$notify({
title: "成功",
......@@ -297,8 +439,6 @@ export default {
<style rel="stylesheet/scss" lang="scss" scoped>
#AboutUs {
margin: 0 1% 0 1%;
width: 98%;
height: auto;
.top {
width: 100%;
......@@ -323,8 +463,57 @@ export default {
.content {
margin: 1% 1% 0 1%;
width: 98%;
padding-bottom: 10px;
height: calc(99% - 68px);
}
.avatar-uploader1 /deep/.el-upload--picture-card{
width: 475px;
height: 370px;
line-height: 370px;
margin-right: 13px;
overflow: hidden;
image{
width: 100%;
height: auto;
object-fit: cover;
}
}
.avatar-uploader2 /deep/.el-upload--picture-card{
width: 229px;
height: 165px;
line-height: 165px;
margin-bottom: 12px;
margin-right: 12px;
overflow: hidden;
image{
width: 100%;
height: auto;
object-fit: cover;
}
}
.avatar-uploader3 /deep/.el-upload--picture-card{
width: 400px;
height: 193px;
line-height: 193px;margin-right: 12px;
overflow: hidden;
image{
width: 100%;
height: auto;
object-fit: cover;
}
}
.avatar-uploader4 /deep/.el-upload--picture-card{
width: 299px;
height: 193px;
line-height: 193px;margin-right: 12px;
overflow: hidden;
image{
width: 100%;
height: auto;
object-fit: cover;
}
}
#map-container{
width: 45%;
height: 250px;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment