dev_review
yujialong 2 years ago
parent 90ed1f142d
commit 996658ba20
  1. 18
      src/components/img-upload/Cropper.vue
  2. 4
      src/setting.js
  3. 13
      src/views/order/AddOrder.vue
  4. 50
      src/views/shop/list/market/index.vue
  5. 436
      src/views/system/manageLog.vue

@ -13,8 +13,8 @@
:can-move-box="option.canMoveBox"
:original="option.original"
:auto-crop="option.autoCrop"
:auto-crop-width="option.autoCropWidth"
:auto-crop-height="option.autoCropHeight"
:auto-crop-width="autoCropWidth"
:auto-crop-height="autoCropHeight"
:fixed-box="option.fixedBox"
:fixed="fixed"
:fixed-number="fixedNumber"
@ -85,6 +85,16 @@ export default {
fixed: {
type: Boolean,
default: true
},
// (:80%)
autoCropWidth: {
type: Number,
default: 480
},
// (:80%)
autoCropHeight: {
type: Number,
default: 124
}
},
data () {
@ -94,13 +104,11 @@ export default {
img: '', // ()
size: 1, // (:1)
full: true, // true (:false)
outputType: 'jpg', // (:jpg)
outputType: 'png', // (:jpg)
canMove: true, // (:true)
original: false, // (:false)
canMoveBox: true, // (:true)
autoCrop: true, // (:false)
autoCropWidth: 480, // (:80%)
autoCropHeight: 124, // (:80%)
fixedBox: false, // (:false)
fixed: true, // (:true)
fixedNumber: [1, 0.26], // (:[1:1])

@ -10,8 +10,8 @@ let host = `${location.origin}/`
if (isDev) {
jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统
host = 'http://121.37.12.51/'
host = 'https://huorantech.cn/'
// host = 'http://192.168.31.152:9000/'// 榕
// host = 'https://huorantech.cn/'
host = 'http://192.168.31.152:9000/'// 榕
// host = 'http://192.168.31.51:9000/'// 赓
} else if (isPro) {
jumpPath = 'https://www.huorantech.cn/judgmentPoint/'

@ -734,7 +734,7 @@
</el-table-column>
<el-table-column label="折扣率"
align="center"
min-width="140">
min-width="120">
<template slot-scope="scope">
<div class="small">
<el-input class="normal"
@ -747,7 +747,7 @@
</el-table-column>
<el-table-column label="账号数"
align="center"
min-width="120">
min-width="100">
<template slot-scope="scope">
<div class="small">
<el-input :class="['normal', !scope.row.accountNum&&whetherSubmit?'red':'']"
@ -777,7 +777,7 @@
</el-table-column>
<el-table-column label="结算价"
align="center"
min-width="160">
min-width="140">
<template slot-scope="scope">
<div class="small">
<el-input style="width: 80%"
@ -791,9 +791,12 @@
</el-table-column>
<el-table-column label="操作"
align="center"
width="180">
width="250">
<template slot-scope="scope">
<div class="flex-c-c">
<el-button style="margin-right: 10px;"
type="text"
@click="showShip(scope.row)">{{ viewDisabled ? '' : '编辑' }}发货内容</el-button>
<el-button v-if="!isEdit&&!viewDisabled"
type="text"
@click="delDataForm(scope.$index, scope.row)"
@ -2691,7 +2694,7 @@ export default {
if (row.ship === 1) {
row.isEnable = 1
}
if ((type == 3 || type == 4) && row.ship) this.showShip(row) //
if ((type == 1 || type == 3 || type == 4) && row.ship) this.showShip(row) //
},
// 0
handleNaN (val) {

@ -31,6 +31,10 @@
label="标题"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="subheading"
label="副标题"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="url"
label="链接"
min-width="150"
@ -85,6 +89,11 @@
placeholder="请输入标题"
maxlength="100"></el-input>
</el-form-item>
<el-form-item label="副标题">
<el-input v-model="form.subheading"
placeholder="请输入副标题"
maxlength="100"></el-input>
</el-form-item>
<el-form-item label="链接">
<el-input v-model="form.url"
placeholder="请输入链接"
@ -110,6 +119,8 @@
:is-upload="isUpload"
:fixed="true"
:fixedNumber.sync="fixedNumber"
:autoCropWidth="500"
:autoCropHeight="138.8"
@upload="customUpload" />
</el-dialog>
</div>
@ -132,6 +143,7 @@ export default {
id: '',
banner: '',
title: '',
subheading: '',
url: '',
},
cropperModel: false,
@ -163,43 +175,6 @@ export default {
formData.append('file', data, this.file.name)
this.imgUpload(formData)
},
//
compress (img) {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
// let initSize = img.src.length;
const width = img.width
const height = img.height
canvas.width = width
canvas.height = height
//
ctx.fillStyle = '#fff'
ctx.fillRect(0, 0, canvas.width, canvas.height)
ctx.drawImage(img, 0, 0, width, height)
//
const ndata = canvas.toDataURL('image/jpeg', 0.8)
return ndata
},
// base64bolb
dataURItoBlob (base64Data) {
let byteString
if (base64Data.split(',')[0].indexOf('base64') >= 0) {
byteString = atob(base64Data.split(',')[1])
} else {
byteString = unescape(base64Data.split(',')[1])
}
const mimeString = base64Data
.split(',')[0]
.split(':')[1]
.split(';')[0]
const ia = new Uint8Array(byteString.length)
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
return new Blob([ia], {
type: mimeString
})
},
//
imgUpload (formData) {
this.isUpload = true
@ -240,6 +215,7 @@ export default {
id: '',
banner: '',
title: '',
subheading: '',
url: '',
}
this.bannerVisible = true

@ -1,195 +1,224 @@
<template>
<div>
<el-card shadow="hover" class="mgb20">
<div class="flex-between">
<div class="per_title" v-preventReClick @click="$router.back()">
<i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span>
<span class="per_school">{{ platformName }}日志管理</span>
</div>
</div>
</el-card>
<div class="page">
<div class="inner">
<div class="tool">
<div class="filters">
<h6>日志更新</h6>
<div class="filter">
<label>版本查询</label>
<el-select v-model="versionName" size="small" placeholder="请选择版本" filterable @change="verChange">
<el-option
v-for="item in vers"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div>
<el-button type="primary" @click="add" v-auth="'/system:日志更新:管理:新增日志'">新增日志</el-button>
</div>
</div>
<el-timeline class="timeline">
<el-timeline-item placement="top" v-for="(item, i) in listData" :key="i" :class="['item' + i, {draft: item.draft}]">
<p class="sign">{{ item.draft ? '未发布' : item.draftTime }}</p>
<div class="ver">
<div>
{{ item.versionName + (item.draft ? '(草稿)' : '') }}
<span class="action">
<i class="el-icon-edit-outline" @click="edit(item)" v-auth="'/system:日志更新:管理:编辑日志'"></i>
<i class="el-icon-delete" @click="del(item)" v-auth="'/system:日志更新:管理:删除日志'"></i>
</span>
</div>
<div>
<template v-if="!i && item.withdrawNum !== 1 && item.draft !== 1">
<span class="withdraw" v-if="item.withdraw && item.open">已撤回</span>
<el-button v-else style="margin-right: 10px" type="primary" size="small" @click="revoke(item)">撤销</el-button>
</template>
<el-switch v-model="item.open" :active-value="0" :inactive-value="1" @change="switchOff($event, item)" v-auth="'/system:日志更新:管理:开启日志'"></el-switch>
</div>
</div>
<ul class="detail">
<li v-for="(item, i) in item.logContents" :key="i">
<p class="name"><img :src="require('@/assets/img/' + funcList.find(e => e.id === item.type).icon + '.png')" alt=""> {{ funcList.find(e => e.id === item.type).name }}</p>
<div class="val">
<p class="" v-for="(item, i) in item.content" :key="i">{{ item }}</p>
</div>
</li>
</ul>
</el-timeline-item>
</el-timeline>
<div>
<el-card shadow="hover"
class="mgb20">
<div class="flex-between">
<div class="per_title"
v-preventReClick
@click="$router.back()">
<i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span>
<span class="per_school">{{ platformName }}日志管理</span>
</div>
</div>
</el-card>
<div class="page">
<div class="inner">
<div class="tool">
<div class="filters">
<h6>日志更新</h6>
<div class="filter">
<label>版本查询</label>
<el-select v-model="versionName"
size="small"
placeholder="请选择版本"
filterable
@change="verChange">
<el-option v-for="item in vers"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div>
<el-button type="primary"
@click="add"
v-auth="'/system:日志更新:管理:新增日志'">新增日志</el-button>
</div>
</div>
<el-timeline class="timeline">
<el-timeline-item placement="top"
v-for="(item, i) in listData"
:key="i"
:class="['item' + i, {draft: item.draft}]">
<p class="sign">{{ item.draft ? '未发布' : item.draftTime }}</p>
<div class="ver">
<div>
{{ item.versionName + (item.draft ? '(草稿)' : '') }}
<span class="action">
<i class="el-icon-edit-outline"
@click="edit(item)"
v-auth="'/system:日志更新:管理:编辑日志'"></i>
<i class="el-icon-delete"
@click="del(item)"
v-auth="'/system:日志更新:管理:删除日志'"></i>
</span>
</div>
<div>
<template v-if="!i && item.withdrawNum !== 1 && item.draft !== 1">
<span class="withdraw"
v-if="item.withdraw && item.open">已撤回</span>
<el-button v-else
style="margin-right: 10px"
type="primary"
size="small"
@click="revoke(item)">撤销</el-button>
</template>
<el-switch v-model="item.open"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, item)"
v-auth="'/system:日志更新:管理:开启日志'"></el-switch>
</div>
</div>
<ul class="detail">
<li v-for="(item, i) in item.logContents"
:key="i">
<p v-if="!isNaN(item.type)"
class="name"><img :src="require('@/assets/img/' + funcList.find(e => e.id === item.type).icon + '.png')"
alt=""> {{ funcList.find(e => e.id === item.type).name }}</p>
<div class="val">
<p class=""
v-for="(item, i) in item.content"
:key="i">{{ item }}</p>
</div>
</li>
</ul>
</el-timeline-item>
</el-timeline>
</div>
</div>
</div>
</template>
<script>
import Setting from '@/setting'
export default {
data() {
return {
platformId: this.$route.query.platformId,
platformName: '',
versionName: '',
vers: [],
listData: [],
funcList: [
{
id: 0,
name: '新功能',
icon: 'func'
},
{
id: 1,
name: '修复',
icon: 'bug'
},
{
id: 2,
name: '优化',
icon: 'optimize'
}
]
};
},
mounted() {
this.getData()
},
methods: {
//
getData() {
this.$get(`${this.api.platformLogList}?platformId=${this.platformId}&versionName=${this.versionName}`).then(res => {
const { logList } = res
this.listData = logList
if (logList.length) {
const vers = []
const platformName = Setting.platformList.find(e => e.id === logList[0].platformId).name
this.platformName = platformName
logList.map((e, i) => {
e.logContents.map(n => {
n.content = n.content.split('\n')
})
vers.push({
id: i,
name: e.versionName
})
})
this.vers = vers
}
}).catch(res => {})
},
//
add() {
if (this.listData.find(e => e.draft)) {
this.$confirm("当前有未发布的版本,是否要新增版本?", "提示", {
type: "warning"
}).then(() => {
this.$router.push(`/addLog?platformId=${this.platformId}`)
}).catch(() => {})
} else {
this.$router.push(`/addLog?platformId=${this.platformId}`)
}
},
//
edit(item) {
this.$router.push(`/addLog?platformId=${this.platformId}&id=${item.logId}&draft=${item.draft}`)
data () {
return {
platformId: this.$route.query.platformId,
platformName: '',
versionName: '',
vers: [],
listData: [],
funcList: [
{
id: 0,
name: '新功能',
icon: 'func'
},
//
del(item) {
this.$confirm("确定要删除吗?", "提示", {
type: "warning"
}).then(() => {
this.$post(`${this.api.logDel}?logId=${item.logId}`).then(res => {
this.$message.success("删除成功")
this.getData()
}).catch(res => {})
}).catch(() => {})
{
id: 1,
name: '修复',
icon: 'bug'
},
//
revoke(item) {
this.$confirm("确定要撤销吗?", "提示", {
type: "warning"
}).then(() => {
this.$get(`${this.api.logWithdrawal}?platformId=${this.platformId}&logId=${item.logId}`).then(res => {
this.$message.success('撤销成功')
this.getData()
}).catch(res => {})
}).catch(() => {})
},
changeStatus(logId, open, draft) {
this.$post(this.api.listUpdate, {
logId,
open,
draft
}).then(res => {
this.$message.success(open ? '禁用成功' : '启用成功')
this.getData()
}).catch(res => {})
},
//
switchOff(val, row) {
const logId = row.logId
if (row.draft && !val) {
this.$confirm('是否要发布该日志?', '提示', {
type: 'success'
}).then(() => {
this.changeStatus(logId, val, 0)
}).catch(() => {
this.changeStatus(logId, val, 1)
})
} else {
this.changeStatus(logId, val, row.draft)
}
},
//
verChange(i) {
window.scrollTo({
top: document.querySelector(`.item${i}`).offsetTop,
behavior: 'smooth'
{
id: 2,
name: '优化',
icon: 'optimize'
}
]
};
},
mounted () {
this.getData()
},
methods: {
//
getData () {
this.$get(`${this.api.platformLogList}?platformId=${this.platformId}&versionName=${this.versionName}`).then(res => {
const { logList } = res
this.listData = logList
if (logList.length) {
const vers = []
const platformName = Setting.platformList.find(e => e.id === logList[0].platformId).name
this.platformName = platformName
logList.map((e, i) => {
e.logContents.map(n => {
n.content = n.content.split('\n')
})
vers.push({
id: i,
name: e.versionName
})
})
this.vers = vers
}
}).catch(res => { })
},
//
add () {
if (this.listData.find(e => e.draft)) {
this.$confirm("当前有未发布的版本,是否要新增版本?", "提示", {
type: "warning"
}).then(() => {
this.$router.push(`/addLog?platformId=${this.platformId}`)
}).catch(() => { })
} else {
this.$router.push(`/addLog?platformId=${this.platformId}`)
}
},
//
edit (item) {
this.$router.push(`/addLog?platformId=${this.platformId}&id=${item.logId}&draft=${item.draft}`)
},
//
del (item) {
this.$confirm("确定要删除吗?", "提示", {
type: "warning"
}).then(() => {
this.$post(`${this.api.logDel}?logId=${item.logId}`).then(res => {
this.$message.success("删除成功")
this.getData()
}).catch(res => { })
}).catch(() => { })
},
//
revoke (item) {
this.$confirm("确定要撤销吗?", "提示", {
type: "warning"
}).then(() => {
this.$get(`${this.api.logWithdrawal}?platformId=${this.platformId}&logId=${item.logId}`).then(res => {
this.$message.success('撤销成功')
this.getData()
}).catch(res => { })
}).catch(() => { })
},
changeStatus (logId, open, draft) {
this.$post(this.api.listUpdate, {
logId,
open,
draft
}).then(res => {
this.$message.success(open ? '禁用成功' : '启用成功')
this.getData()
}).catch(res => { })
},
//
switchOff (val, row) {
const logId = row.logId
if (row.draft && !val) {
this.$confirm('是否要发布该日志?', '提示', {
type: 'success'
}).then(() => {
this.changeStatus(logId, val, 0)
}).catch(() => {
this.changeStatus(logId, val, 1)
})
} else {
this.changeStatus(logId, val, row.draft)
}
},
//
verChange (i) {
window.scrollTo({
top: document.querySelector(`.item${i}`).offsetTop,
behavior: 'smooth'
})
}
}
};
</script>
<style lang="scss" scoped>
@ -218,25 +247,26 @@ export default {
padding-left: 20%;
overflow: hidden;
.el-timeline-item__node--normal {
top: 30px;
top: 30px;
}
.el-timeline-item__wrapper {
top: 15px;
padding-left: 40px;
top: 15px;
padding-left: 40px;
}
.el-timeline-item__tail {
height: 250%;
border-left-width: 1px;
height: 250%;
border-left-width: 1px;
}
.sign {
position: relative;
display: inline-block;
margin-left: -22%;
font-size: 14px;
color: #9076FF;
color: #9076ff;
}
.draft {
.ver, .sign {
.ver,
.sign {
color: #b1b1b1;
}
}
@ -247,23 +277,23 @@ export default {
padding-bottom: 10px;
margin: -19px 0 20px;
font-size: 18px;
color: #9076FF;
color: #9076ff;
border-bottom: 1px dashed #bfbfbf;
}
.withdraw {
margin-right: 10px;
font-size: 13px;
color: #979797;
margin-right: 10px;
font-size: 13px;
color: #979797;
}
.action {
margin-left: 15px;
i {
margin-left: 8px;
font-size: 14px;
color: #9076FF;
color: #9076ff;
cursor: pointer;
&:hover {
opacity: .9;
opacity: 0.9;
}
}
}
@ -287,18 +317,18 @@ export default {
line-height: 1.8;
white-space: pre-wrap;
p {
position: relative;
color: #6a6a6a;
&:before {
content: '';
display: inline-block;
width: 5px;
height: 5px;
margin: 0 10px 0 5px;
vertical-align: middle;
border-radius: 20px;
background-color: #c5b8ff;
}
position: relative;
color: #6a6a6a;
&:before {
content: '';
display: inline-block;
width: 5px;
height: 5px;
margin: 0 10px 0 5px;
vertical-align: middle;
border-radius: 20px;
background-color: #c5b8ff;
}
}
}
}

Loading…
Cancel
Save