公告管理,订单列表处理
This commit is contained in:
parent
706e51bee1
commit
a1c3902eb0
|
@ -322,6 +322,29 @@ export const asyncRoutes = [
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/announcements',
|
||||
component: Layout,
|
||||
redirect: '/announcements/index',
|
||||
alwaysShow: true,
|
||||
name: 'announcements',
|
||||
meta: {
|
||||
title: '公告管理',
|
||||
icon: 'el-icon-s-promotion',
|
||||
roles: ['follow_index', 'log_index', 'editor']
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'list',
|
||||
component: () => import('@/views/announcements/list'),
|
||||
name: 'list',
|
||||
meta: {
|
||||
title: '公告列表',
|
||||
roles: ['follow_index', 'editor']
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/icon',
|
||||
component: Layout,
|
||||
|
|
|
@ -4,7 +4,13 @@
|
|||
.el-breadcrumb__inner a {
|
||||
font-weight: 400 !important;
|
||||
}
|
||||
|
||||
.opening-announcement {
|
||||
.el-message-box__header {
|
||||
.el-message-box__title {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-upload {
|
||||
input[type="file"] {
|
||||
display: none !important;
|
||||
|
@ -69,7 +75,7 @@
|
|||
// dropdown
|
||||
.el-dropdown-menu {
|
||||
a {
|
||||
display: block
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
|
||||
import config from '../../package.json';
|
||||
|
||||
// 1、window.localStorage 浏览器永久缓存
|
||||
export const Local = {
|
||||
// 查看 v2.4.3版本更新日志
|
||||
setKey(key) {
|
||||
// @ts-ignore
|
||||
return `${config.name}:${key}`;
|
||||
},
|
||||
// 存储数据到本地缓存,设置过期时间
|
||||
setCache(key, value, expireTime) {
|
||||
const now = new Date().getTime();
|
||||
const item = {
|
||||
value: value,
|
||||
expire: now + expireTime * 1000 // 过期时间,单位是毫秒
|
||||
};
|
||||
localStorage.setItem(Local.setKey(key), JSON.stringify(item));
|
||||
},
|
||||
|
||||
// 从本地缓存读取数据,检查是否过期
|
||||
getCache(key) {
|
||||
const itemStr = localStorage.getItem(Local.setKey(key));
|
||||
if (itemStr) {
|
||||
const item = JSON.parse(itemStr);
|
||||
const now = new Date().getTime();
|
||||
if (now < item.expire) {
|
||||
return item.value;
|
||||
} else {
|
||||
// 数据已过期,清除缓存
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
// 设置永久缓存
|
||||
set(key, val) {
|
||||
window.localStorage.setItem(Local.setKey(key), JSON.stringify(val));
|
||||
},
|
||||
// 获取永久缓存
|
||||
get(key) {
|
||||
let json = window.localStorage.getItem(Local.setKey(key));
|
||||
return JSON.parse(json);
|
||||
},
|
||||
// 移除永久缓存
|
||||
remove(key) {
|
||||
window.localStorage.removeItem(Local.setKey(key));
|
||||
},
|
||||
// 移除全部永久缓存
|
||||
clear() {
|
||||
window.localStorage.clear();
|
||||
},
|
||||
};
|
||||
|
||||
// 2、window.sessionStorage 浏览器临时缓存
|
||||
export const Session = {
|
||||
// 设置临时缓存
|
||||
set(key, val) {
|
||||
window.sessionStorage.setItem(Local.setKey(key), JSON.stringify(val));
|
||||
},
|
||||
// 获取临时缓存
|
||||
get(key) {
|
||||
let json = window.sessionStorage.getItem(Local.setKey(key));
|
||||
return JSON.parse(json);
|
||||
},
|
||||
// 移除临时缓存
|
||||
remove(key) {
|
||||
window.sessionStorage.removeItem(Local.setKey(key));
|
||||
},
|
||||
// 移除全部临时缓存
|
||||
clear() {
|
||||
window.sessionStorage.clear();
|
||||
},
|
||||
};
|
|
@ -0,0 +1,189 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<div class="mb10">
|
||||
<el-button
|
||||
size="small"
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
@click="handleAdd('')"
|
||||
>添加</el-button
|
||||
>
|
||||
</div>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
:data="list"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column align="center" fixed width="200" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="small"
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
@click="handleAdd(scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed label="标题" prop="title" />
|
||||
|
||||
<el-table-column align="center" fixed label="内容" prop="content" />
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="listQuery.page"
|
||||
:limit.sync="listQuery.limit"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<el-dialog :title="dialogTitle" :visible.sync="dialog2Visible">
|
||||
<el-form ref="addForm" label-width="160px" :model="form" :rules="rules">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="form.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="form.content" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="onPass(form)">保 存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Pagination from "@/components/PaginationFixed";
|
||||
export default {
|
||||
name: "Announlist",
|
||||
components: { Pagination },
|
||||
data() {
|
||||
return {
|
||||
active: "follow",
|
||||
order_status: [
|
||||
"#9e9f9c",
|
||||
"#04bcd9",
|
||||
"#fc9904",
|
||||
"#1193f4",
|
||||
"#48b14b",
|
||||
"#eb1662",
|
||||
"#9d1cb5",
|
||||
],
|
||||
follow_status: [
|
||||
"#9e9f9c",
|
||||
"#04bcd9",
|
||||
"#fc9904",
|
||||
"#1193f4",
|
||||
"#48b14b",
|
||||
"#eb1662",
|
||||
],
|
||||
options: [],
|
||||
value: null,
|
||||
next_follow: null,
|
||||
list: [],
|
||||
total: 0,
|
||||
listLoading: true,
|
||||
listQuery: {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
times: [],
|
||||
status: null,
|
||||
admin: null,
|
||||
zhubo: null,
|
||||
os_status: [],
|
||||
},
|
||||
item: { next_follow: "", personnel: {} },
|
||||
follow: [],
|
||||
dialog2Visible: false,
|
||||
oss: [],
|
||||
dialogTitle: "添加",
|
||||
adminList: [],
|
||||
form: {
|
||||
title: "",
|
||||
content: "",
|
||||
},
|
||||
rules: {
|
||||
title: [{ required: true, message: "请输入标题", trigger: "change" }],
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.listQuery.zhubo = this.$route.query.zhubo || null;
|
||||
if (this.$route.query.start && this.$route.query.end) {
|
||||
this.listQuery.times = [this.$route.query.start, this.$route.query.end];
|
||||
}
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList($is_excel) {
|
||||
this.$axios
|
||||
.get("/admin/announcements/index", { params: this.listQuery })
|
||||
.then((response) => {
|
||||
this.list = response.data.data;
|
||||
this.total = response.data.total;
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
handleAdd(val) {
|
||||
this.dialog2Visible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["addForm"].resetFields();
|
||||
if (val) {
|
||||
this.dialogTitle = "编辑";
|
||||
this.form = {
|
||||
title: val.title,
|
||||
content: val.content,
|
||||
id: val.id,
|
||||
};
|
||||
}
|
||||
});
|
||||
},
|
||||
onPass() {
|
||||
this.$refs.addForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(
|
||||
this.dialogTitle == "编辑"
|
||||
? "/admin/announcements/edit"
|
||||
: "/admin/announcements/add",
|
||||
this.form
|
||||
)
|
||||
.then((res) => {
|
||||
this.$message({
|
||||
message: this.dialogTitle == "编辑" ? "编辑成功" : "添加成功",
|
||||
type: "success",
|
||||
});
|
||||
this.dialog2Visible = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.app-container {
|
||||
position: relative;
|
||||
padding-bottom: 60px; /* 分页条的高度 */
|
||||
}
|
||||
|
||||
.filter-container,
|
||||
.el-table {
|
||||
padding-bottom: 52px; /* 分页条的高度,以避免内容重叠 */
|
||||
}
|
||||
.mb10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
|
@ -1,9 +1,11 @@
|
|||
<template>
|
||||
<div class="dashboard-editor-container">
|
||||
|
||||
<panel-group @handleSetLineChartData="handleSetLineChartData" />
|
||||
|
||||
<el-row v-if="lineChartData" style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
|
||||
<el-row
|
||||
v-if="lineChartData"
|
||||
style="background: #fff; padding: 16px 16px 0; margin-bottom: 32px"
|
||||
>
|
||||
<line-chart :chart-data="lineChartData" />
|
||||
</el-row>
|
||||
|
||||
|
@ -37,36 +39,36 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import PanelGroup from './components/PanelGroup'
|
||||
import LineChart from './components/LineChart'
|
||||
import RaddarChart from './components/RaddarChart'
|
||||
import PieChart from './components/PieChart'
|
||||
import BarChart from './components/BarChart'
|
||||
import TransactionTable from './components/TransactionTable'
|
||||
import TodoList from './components/TodoList'
|
||||
import BoxCard from './components/BoxCard'
|
||||
|
||||
import PanelGroup from "./components/PanelGroup";
|
||||
import LineChart from "./components/LineChart";
|
||||
import RaddarChart from "./components/RaddarChart";
|
||||
import PieChart from "./components/PieChart";
|
||||
import BarChart from "./components/BarChart";
|
||||
import TransactionTable from "./components/TransactionTable";
|
||||
import TodoList from "./components/TodoList";
|
||||
import BoxCard from "./components/BoxCard";
|
||||
import { Local } from "@/utils/storage.js";
|
||||
const lineChartData = {
|
||||
newVisitis: {
|
||||
expectedData: [100, 120, 161, 134, 105, 160, 165],
|
||||
actualData: [120, 82, 91, 154, 162, 140, 145]
|
||||
actualData: [120, 82, 91, 154, 162, 140, 145],
|
||||
},
|
||||
messages: {
|
||||
expectedData: [200, 192, 120, 144, 160, 130, 140],
|
||||
actualData: [180, 160, 151, 106, 145, 150, 130]
|
||||
actualData: [180, 160, 151, 106, 145, 150, 130],
|
||||
},
|
||||
purchases: {
|
||||
expectedData: [80, 100, 121, 104, 105, 90, 100],
|
||||
actualData: [120, 90, 100, 138, 142, 130, 130]
|
||||
actualData: [120, 90, 100, 138, 142, 130, 130],
|
||||
},
|
||||
shoppings: {
|
||||
expectedData: [130, 140, 141, 142, 145, 150, 160],
|
||||
actualData: [120, 82, 91, 154, 162, 140, 130]
|
||||
}
|
||||
}
|
||||
actualData: [120, 82, 91, 154, 162, 140, 130],
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
name: 'DashboardAdmin',
|
||||
name: "DashboardAdmin",
|
||||
components: {
|
||||
PanelGroup,
|
||||
LineChart,
|
||||
|
@ -75,24 +77,37 @@ export default {
|
|||
BarChart,
|
||||
TransactionTable,
|
||||
TodoList,
|
||||
BoxCard
|
||||
BoxCard,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
lineChartData: null
|
||||
}
|
||||
lineChartData: null,
|
||||
};
|
||||
},
|
||||
created(){
|
||||
this.$axios.get('/admin/index/line', { params: this.listQuery }).then(response => {
|
||||
this.lineChartData = response.data
|
||||
})
|
||||
created() {
|
||||
this.$axios
|
||||
.get("/admin/index/line", { params: this.listQuery })
|
||||
.then((response) => {
|
||||
this.lineChartData = response.data;
|
||||
});
|
||||
// if (!Local.getCache("announcements")) {
|
||||
this.$axios.get("/admin/announcements/getLast").then((response) => {
|
||||
this.$alert(response.data.content, response.data.title, {
|
||||
confirmButtonText: "确定",
|
||||
customClass: "opening-announcement",
|
||||
callback: (action) => {
|
||||
// Local.setCache("announcements", true, 10);
|
||||
},
|
||||
});
|
||||
});
|
||||
// }
|
||||
},
|
||||
methods: {
|
||||
handleSetLineChartData(type) {
|
||||
this.lineChartData = lineChartData[type]
|
||||
}
|
||||
}
|
||||
}
|
||||
this.lineChartData = lineChartData[type];
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -115,7 +130,7 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
@media (max-width:1024px) {
|
||||
@media (max-width: 1024px) {
|
||||
.chart-wrapper {
|
||||
padding: 8px;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: 'home',
|
||||
name: 'overflowConcealment',
|
||||
data() {
|
||||
return {
|
||||
isTruncated:false
|
||||
|
@ -30,6 +30,7 @@ export default {
|
|||
// showConfirmButton:false
|
||||
});
|
||||
},
|
||||
// 检查是否溢出
|
||||
checkTruncation() {
|
||||
this.isTruncated = this.$refs['desc_conten'].offsetWidth<this.$refs['desc_conten'].scrollWidth
|
||||
},
|
||||
|
|
|
@ -151,11 +151,11 @@
|
|||
}
|
||||
.lineOnSale_right{
|
||||
margin-left: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
::v-deep.el-button{
|
||||
display: block;
|
||||
}
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.btn{
|
||||
width: 160px;
|
||||
height: 36px;
|
||||
|
|
|
@ -1,11 +1,134 @@
|
|||
<template>
|
||||
|
||||
<div class="app-container">
|
||||
<el-table v-loading="listLoading" :data="list" border fit highlight-current-row style="width: 100%">
|
||||
<div class="filter-container">
|
||||
<el-input
|
||||
v-model="listQuery.sn"
|
||||
placeholder="订单号"
|
||||
style="width: 200px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" fixed label="电话" width="120" prop="mobile" />
|
||||
<el-input
|
||||
v-model="listQuery.mobile"
|
||||
placeholder="手机号"
|
||||
style="width: 200px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" fixed label="平台" width="80" prop="os_name" />
|
||||
<el-input
|
||||
v-model="listQuery.zhubo"
|
||||
placeholder="主播"
|
||||
style="width: 100px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-input
|
||||
v-model="listQuery.admin"
|
||||
placeholder="客服"
|
||||
style="width: 100px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-cascader
|
||||
v-model="listQuery.os_status"
|
||||
placeholder="平台状态"
|
||||
:options="oss"
|
||||
class="filter-item"
|
||||
@change="handleChange"
|
||||
/>
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.status"
|
||||
filterable
|
||||
placeholder="跟进状态"
|
||||
class="filter-item"
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option key="" label="请选择" value="" />
|
||||
<el-option
|
||||
v-for="(v, k) in status_arr"
|
||||
:key="k"
|
||||
:label="v"
|
||||
:value="k"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.timetype"
|
||||
filterable
|
||||
placeholder="时间"
|
||||
class="filter-item"
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option key="" label="请选择" value="" />
|
||||
<el-option
|
||||
v-for="(v, k) in timetype_arr"
|
||||
:key="k"
|
||||
:label="v"
|
||||
:value="k"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
<el-date-picker
|
||||
v-model="listQuery.times"
|
||||
class="filter-item"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="getList"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="getList(1)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="dialog2Visible = true"
|
||||
>
|
||||
核单
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
:data="list"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed
|
||||
label="电话"
|
||||
width="120"
|
||||
prop="mobile"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed
|
||||
label="平台"
|
||||
width="80"
|
||||
prop="os_name"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" fixed label="直播" width="60">
|
||||
<template slot-scope="scope">
|
||||
|
@ -13,37 +136,80 @@
|
|||
<el-tag v-else type="info">否</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed label="客服" width="80" prop="admin.username" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed
|
||||
label="客服"
|
||||
width="80"
|
||||
prop="admin.username"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" label="订单号" width="180" prop="sn" />
|
||||
|
||||
<el-table-column width="138px" align="center" label="下单时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_at | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.create_at | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="160px" align="center" label="派单时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.give_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.give_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="状态" width="80">
|
||||
<template slot-scope="scope">
|
||||
<div style="padding: 1px 5px; border-radius: 3px;" :style="{color:order_status[scope.row.order_status],border:`1px solid ${order_status[scope.row.order_status]}`}" type="primary">{{ scope.row.order_status_name }}</div>
|
||||
<div
|
||||
style="padding: 1px 5px; border-radius: 3px"
|
||||
:style="{
|
||||
color: order_status[scope.row.order_status],
|
||||
border: `1px solid ${order_status[scope.row.order_status]}`,
|
||||
}"
|
||||
type="primary"
|
||||
>
|
||||
{{ scope.row.order_status_name }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="跟进状态" width="90">
|
||||
<template slot-scope="scope">
|
||||
<div style="padding: 1px 5px; border-radius: 3px;" :style="{color:follow_status[scope.row.status],border:`1px solid ${follow_status[scope.row.status]}`}" type="primary">{{ scope.row.status_name }}</div>
|
||||
<div
|
||||
style="padding: 1px 5px; border-radius: 3px"
|
||||
:style="{
|
||||
color: follow_status[scope.row.status],
|
||||
border: `1px solid ${follow_status[scope.row.status]}`,
|
||||
}"
|
||||
type="primary"
|
||||
>
|
||||
{{ scope.row.status_name }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" width="500px" label="标题" prop="product_name" />
|
||||
<el-table-column width="500px" align="center" label="跟进备注" prop="remark" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
width="500px"
|
||||
label="标题"
|
||||
prop="product_name"
|
||||
/>
|
||||
<el-table-column
|
||||
width="500px"
|
||||
align="center"
|
||||
label="跟进备注"
|
||||
prop="remark"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" label="联系人" width="120" prop="contact" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="联系人"
|
||||
width="120"
|
||||
prop="contact"
|
||||
/>
|
||||
|
||||
<!-- <el-table-column align="center" label="微信" width="80">
|
||||
<template slot-scope="scope">
|
||||
|
@ -53,13 +219,15 @@
|
|||
|
||||
<el-table-column width="138px" align="center" label="出行时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.travel_date | parseTime('{y}-{m}-{d}') }}</span>
|
||||
<span>{{ scope.row.travel_date | parseTime("{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column width="138px" align="center" label="最后跟进时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.last_follow | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.last_follow | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
@ -69,25 +237,42 @@
|
|||
<i v-if="scope.row.is_check == 2" class="el-icon-close" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" width="138px" label="分类" prop="category_desc" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
width="138px"
|
||||
label="分类"
|
||||
prop="category_desc"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" label="总金额" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.total_price/100 }}</span>
|
||||
<span>{{ scope.row.total_price / 100 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" width="80px" label="人数" prop="quantity" />
|
||||
<el-table-column align="center" label="主播" width="80" prop="anchor.username" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
width="80px"
|
||||
label="人数"
|
||||
prop="quantity"
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="主播"
|
||||
width="80"
|
||||
prop="anchor.username"
|
||||
/>
|
||||
<el-table-column width="138px" align="center" label="修改时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.update_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.update_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="listQuery.page"
|
||||
:limit.sync="listQuery.limit"
|
||||
|
@ -114,27 +299,51 @@
|
|||
{{ item.mobile }}
|
||||
</el-form-item>
|
||||
<el-form-item label="下单时间">
|
||||
{{ item.create_at | parseTime('{y}-{m}-{d} {h}:{i}') }}
|
||||
{{ item.create_at | parseTime("{y}-{m}-{d} {h}:{i}") }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="人员">
|
||||
<el-row>
|
||||
<el-col :span="3">大人</el-col>
|
||||
<el-col :span="5"><el-input v-model="item.personnel.adult" name="adult" placeholder="大人" /></el-col>
|
||||
<el-col :span="5"
|
||||
><el-input
|
||||
v-model="item.personnel.adult"
|
||||
name="adult"
|
||||
placeholder="大人"
|
||||
/></el-col>
|
||||
<el-col :span="3">老人</el-col>
|
||||
<el-col :span="5"><el-input v-model="item.personnel.old" name="old" placeholder="老人" /></el-col>
|
||||
<el-col :span="5"
|
||||
><el-input
|
||||
v-model="item.personnel.old"
|
||||
name="old"
|
||||
placeholder="老人"
|
||||
/></el-col>
|
||||
<el-col :span="3">小孩</el-col>
|
||||
<el-col :span="5"><el-input v-model="item.personnel.child" name="child" placeholder="小孩" /></el-col>
|
||||
<el-col :span="5"
|
||||
><el-input
|
||||
v-model="item.personnel.child"
|
||||
name="child"
|
||||
placeholder="小孩"
|
||||
/></el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="item.status!==1" label="核销码">
|
||||
<el-input v-model="item.check_sn" name="check_sn" placeholder="请输入平台核销码" />
|
||||
<el-form-item v-if="item.status !== 1" label="核销码">
|
||||
<el-input
|
||||
v-model="item.check_sn"
|
||||
name="check_sn"
|
||||
placeholder="请输入平台核销码"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="加微信" v-if="item.status!==2">
|
||||
<el-checkbox v-model="item.is_wechat" :true-label="1" :false-label="0">已加微信</el-checkbox>
|
||||
<el-form-item label="加微信" v-if="item.status !== 2">
|
||||
<el-checkbox
|
||||
v-model="item.is_wechat"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
>已加微信</el-checkbox
|
||||
>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="出游日期">
|
||||
|
@ -145,7 +354,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="item.status!==1" label="返回日期">
|
||||
<el-form-item v-if="item.status !== 1" label="返回日期">
|
||||
<el-date-picker
|
||||
v-model="item.travel_end"
|
||||
type="date"
|
||||
|
@ -153,19 +362,20 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="下次跟进时间" v-if="item.status!==2">
|
||||
<el-form-item label="下次跟进时间" v-if="item.status !== 2">
|
||||
<el-date-picker
|
||||
v-model="next_follow"
|
||||
type="datetime"
|
||||
placeholder="选择日期时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="跟进状态">
|
||||
<template v-for="(v,k) in status_arr">
|
||||
<el-radio v-if="k > 0" v-model="item.status" :label="k" border>{{ v }}</el-radio>
|
||||
<template v-for="(v, k) in status_arr">
|
||||
<el-radio v-if="k > 0" v-model="item.status" :label="k" border>{{
|
||||
v
|
||||
}}</el-radio>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="快捷跟进" style="width: 600px;">
|
||||
|
@ -185,7 +395,6 @@
|
|||
<el-form-item label="跟进说明">
|
||||
<el-input v-model="item.desc" type="textarea" />
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
|
@ -194,71 +403,45 @@
|
|||
|
||||
<el-tabs v-model="active" type="border-card">
|
||||
<el-tab-pane name="follow" label="跟进记录">
|
||||
|
||||
<el-table
|
||||
:data="item.follow"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
label="日期"
|
||||
width="138"
|
||||
>
|
||||
<el-table :data="item.follow" style="width: 100%">
|
||||
<el-table-column label="日期" width="138">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.create_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="跟进人"
|
||||
width="110"
|
||||
prop="name"
|
||||
/>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
width="80"
|
||||
>
|
||||
<el-table-column label="跟进人" width="110" prop="name" />
|
||||
<el-table-column label="状态" width="80">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ status_arr[scope.row.status] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="desc"
|
||||
label="跟进说明"
|
||||
/>
|
||||
<el-table-column prop="desc" label="跟进说明" />
|
||||
</el-table>
|
||||
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="finance" label="财务记录">
|
||||
<el-table
|
||||
:data="item.finance"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
label="日期"
|
||||
>
|
||||
<el-table :data="item.finance" style="width: 100%">
|
||||
<el-table-column label="日期">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.create_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="类型"
|
||||
width="110"
|
||||
>
|
||||
<el-table-column label="类型" width="110">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ type_arr[scope.row.type] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
width="120"
|
||||
>
|
||||
<el-table-column label="状态" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.total/100 }}</span>
|
||||
<span>{{ scope.row.total / 100 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="纯核销" :visible.sync="dialog2Visible">
|
||||
|
@ -283,13 +466,23 @@
|
|||
<el-form-item label="订单号:">
|
||||
<el-input v-model="item3.sn" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="流转对象:" style="width: 600px;" prop="flowObj">
|
||||
<el-select v-model="item3.flowObj" placeholder="请选择" @change="onChange2">
|
||||
<el-form-item style="display: inline-flex;text-align: left;width: 770px;">
|
||||
<el-form-item label="流转对象:" style="width: 600px" prop="flowObj">
|
||||
<el-select
|
||||
v-model="item3.flowObj"
|
||||
placeholder="请选择"
|
||||
@change="onChange2"
|
||||
>
|
||||
<el-form-item
|
||||
style="display: inline-flex; text-align: left; width: 770px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in adminList"
|
||||
:key="item.value"
|
||||
style="width: 250px;display: inline-flex;word-break: break-all;"
|
||||
style="
|
||||
width: 250px;
|
||||
display: inline-flex;
|
||||
word-break: break-all;
|
||||
"
|
||||
:label="item.username"
|
||||
:value="item.id"
|
||||
/>
|
||||
|
@ -299,31 +492,64 @@
|
|||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<!-- scope.row.backs&&scope.row.backs.status==2? -->
|
||||
<el-button v-if="item3.backs&&item3.backs.status==0" type="primary" @click="onCancel(item3.flowObj)">取 消</el-button>
|
||||
<el-button v-else type="primary" @click="onCirculationSave(item3.flowObj)">确 认</el-button>
|
||||
<el-button
|
||||
v-if="item3.backs && item3.backs.status == 0"
|
||||
type="primary"
|
||||
@click="onCancel(item3.flowObj)"
|
||||
>取 消</el-button
|
||||
>
|
||||
<el-button
|
||||
v-else
|
||||
type="primary"
|
||||
@click="onCirculationSave(item3.flowObj)"
|
||||
>确 认</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import Pagination from '@/Wangeditor/Pagination'
|
||||
import Pagination from '@/components/PaginationFixed'
|
||||
import {orderBack} from '@/api/order'
|
||||
import Pagination from "@/components/PaginationFixed";
|
||||
import { orderBack } from "@/api/order";
|
||||
export default {
|
||||
name: 'Orderlist',
|
||||
name: "Orderlist",
|
||||
components: { Pagination },
|
||||
data() {
|
||||
return {
|
||||
active: 'follow',
|
||||
types: { 0: '', 1: '', 2: '', 3: 'primary', 4: 'success', 5: 'warning', 6: 'danger', 7: 'info' },
|
||||
types2: { 1: 'primary', 2: 'success', 3: 'warning' },
|
||||
status_arr: ['待跟进', '跟进中', '已核销', '核销失败', '放弃跟单'],
|
||||
type_arr: ['-', '收益', '支出'],
|
||||
active: "follow",
|
||||
types: {
|
||||
0: "",
|
||||
1: "",
|
||||
2: "",
|
||||
3: "primary",
|
||||
4: "success",
|
||||
5: "warning",
|
||||
6: "danger",
|
||||
7: "info",
|
||||
},
|
||||
types2: { 1: "primary", 2: "success", 3: "warning" },
|
||||
status_arr: ["待跟进", "跟进中", "已核销", "核销失败", "放弃跟单"],
|
||||
type_arr: ["-", "收益", "支出"],
|
||||
timetype_arr: {},
|
||||
order_status: ['#9e9f9c', '#04bcd9', '#fc9904', '#1193f4', '#48b14b', '#eb1662', '#9d1cb5'],
|
||||
follow_status: ['#9e9f9c', '#04bcd9', '#fc9904', '#1193f4', '#48b14b', '#eb1662'],
|
||||
order_status: [
|
||||
"#9e9f9c",
|
||||
"#04bcd9",
|
||||
"#fc9904",
|
||||
"#1193f4",
|
||||
"#48b14b",
|
||||
"#eb1662",
|
||||
"#9d1cb5",
|
||||
],
|
||||
follow_status: [
|
||||
"#9e9f9c",
|
||||
"#04bcd9",
|
||||
"#fc9904",
|
||||
"#1193f4",
|
||||
"#48b14b",
|
||||
"#eb1662",
|
||||
],
|
||||
options: [],
|
||||
value: null,
|
||||
next_follow: null,
|
||||
|
@ -337,9 +563,9 @@ export default {
|
|||
status: null,
|
||||
admin: null,
|
||||
zhubo: null,
|
||||
os_status:[]
|
||||
os_status: [],
|
||||
},
|
||||
item: { next_follow: '', personnel: {}},
|
||||
item: { next_follow: "", personnel: {} },
|
||||
follow: [],
|
||||
|
||||
dialogVisible: false,
|
||||
|
@ -348,110 +574,126 @@ export default {
|
|||
oss: [],
|
||||
item3: {
|
||||
sn: null,
|
||||
backs:null,
|
||||
flowObj:'',
|
||||
os: null // 初始值,你可以根据需要设置为 1、2 或 3
|
||||
backs: null,
|
||||
flowObj: "",
|
||||
os: null, // 初始值,你可以根据需要设置为 1、2 或 3
|
||||
},
|
||||
os_arr: { 1: '美团', 2: '快手', 3: '抖音' },
|
||||
os_arr: { 1: "美团", 2: "快手", 3: "抖音" },
|
||||
adminList: [],
|
||||
form: {},
|
||||
rules:{
|
||||
rules: {
|
||||
flowObj: [
|
||||
{ required: true, message: '请选择流转对象', trigger: 'change' }
|
||||
{ required: true, message: "请选择流转对象", trigger: "change" },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
// this.listQuery.status = this.$route.query.status || null
|
||||
this.listQuery.zhubo = this.$route.query.zhubo || null
|
||||
this.listQuery.zhubo = this.$route.query.zhubo || null;
|
||||
if (this.$route.query.start && this.$route.query.end) {
|
||||
this.listQuery.times = [this.$route.query.start, this.$route.query.end]
|
||||
this.listQuery.times = [this.$route.query.start, this.$route.query.end];
|
||||
}
|
||||
this.setQuery('status')
|
||||
this.setQuery('os_status')
|
||||
this.setQuery('times')
|
||||
this.getList()
|
||||
this.getShortcutContent()
|
||||
this.getAdminList()
|
||||
this.setQuery("status");
|
||||
this.setQuery("os_status");
|
||||
this.setQuery("times");
|
||||
this.getList();
|
||||
this.getShortcutContent();
|
||||
this.getAdminList();
|
||||
},
|
||||
methods: {
|
||||
setQuery(key){
|
||||
setQuery(key) {
|
||||
if (this.$route.query.hasOwnProperty(key)) {
|
||||
this.listQuery[key] = this.$route.query[key]
|
||||
this.listQuery[key] = this.$route.query[key];
|
||||
} else {
|
||||
this.listQuery[key] = ''
|
||||
this.listQuery[key] = "";
|
||||
}
|
||||
},
|
||||
getList($is_excel) {
|
||||
this.listQuery.excel = null
|
||||
this.listQuery.excel = null;
|
||||
if ($is_excel == 1) {
|
||||
this.listQuery.excel = 1
|
||||
const isdate = this.listQuery.times[0] instanceof Date
|
||||
this.listQuery.excel = 1;
|
||||
const isdate = this.listQuery.times[0] instanceof Date;
|
||||
const params = {
|
||||
...this.listQuery,
|
||||
times: [isdate ? this.listQuery.times[0].toISOString() : '', isdate ? this.listQuery.times[1].toISOString() : '']
|
||||
times: [
|
||||
isdate ? this.listQuery.times[0].toISOString() : "",
|
||||
isdate ? this.listQuery.times[1].toISOString() : "",
|
||||
],
|
||||
};
|
||||
window.open("/admin/order/index?" + this.objectToQuery(params));
|
||||
return;
|
||||
}
|
||||
window.open('/admin/order/index?' + this.objectToQuery(params))
|
||||
return
|
||||
}
|
||||
this.listQuery.status = 4 //todo 现在只查已放弃订单
|
||||
this.$axios.get('/admin/order/index', { params: this.listQuery }).then(response => {
|
||||
this.list = response.data.data
|
||||
this.total = response.data.total
|
||||
this.timetype_arr = response.ext.timetype,
|
||||
this.oss = response.ext.oss
|
||||
this.listLoading = false
|
||||
})
|
||||
this.listQuery.status = 4; //todo 现在只查已放弃订单
|
||||
this.$axios
|
||||
.get("/admin/order/index", { params: this.listQuery })
|
||||
.then((response) => {
|
||||
this.list = response.data.data;
|
||||
this.total = response.data.total;
|
||||
(this.timetype_arr = response.ext.timetype),
|
||||
(this.oss = response.ext.oss);
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
objectToQuery(obj) {
|
||||
return Object.keys(obj).map(key => {
|
||||
const value = obj[key]
|
||||
if (value == undefined || value == null) return ''
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(value)
|
||||
}).join('&')
|
||||
return Object.keys(obj)
|
||||
.map((key) => {
|
||||
const value = obj[key];
|
||||
if (value == undefined || value == null) return "";
|
||||
return encodeURIComponent(key) + "=" + encodeURIComponent(value);
|
||||
})
|
||||
.join("&");
|
||||
},
|
||||
onInfo(item) {
|
||||
this.value = null
|
||||
this.next_follow = null
|
||||
this.$set(item, 'next_follow', null)
|
||||
this.item = item
|
||||
this.active = 'follow'
|
||||
this.$axios.get('/admin/order/info', { params: { id: item.id }}).then(res => {
|
||||
this.item = res.data
|
||||
this.dialogVisible = true
|
||||
}).catch(err => {
|
||||
|
||||
this.value = null;
|
||||
this.next_follow = null;
|
||||
this.$set(item, "next_follow", null);
|
||||
this.item = item;
|
||||
this.active = "follow";
|
||||
this.$axios
|
||||
.get("/admin/order/info", { params: { id: item.id } })
|
||||
.then((res) => {
|
||||
this.item = res.data;
|
||||
this.dialogVisible = true;
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
getAdminList() {
|
||||
this.$axios.get('/admin/admin/index', { params: { limit: 100, status: 1, is_order: 1 }}).then(response => {
|
||||
this.adminList = response.data.data
|
||||
this.listLoading = false
|
||||
}).catch(err => {
|
||||
this.$axios
|
||||
.get("/admin/admin/index", {
|
||||
params: { limit: 100, status: 1, is_order: 1 },
|
||||
})
|
||||
.then((response) => {
|
||||
this.adminList = response.data.data;
|
||||
this.listLoading = false;
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onCirculation(item) {
|
||||
this.applyVisible = true
|
||||
this.item3 = { ...item, os: Number(item.os) }
|
||||
this.applyVisible = true;
|
||||
this.item3 = { ...item, os: Number(item.os) };
|
||||
console.log(this.item3);
|
||||
if(this.item3.backs&&this.item3.backs.admin_id){
|
||||
this.item3.flowObj = this.item3.backs.admin_id
|
||||
}else{
|
||||
this.resetForm('ruleForm')
|
||||
if (this.item3.backs && this.item3.backs.admin_id) {
|
||||
this.item3.flowObj = this.item3.backs.admin_id;
|
||||
} else {
|
||||
this.resetForm("ruleForm");
|
||||
}
|
||||
},
|
||||
//确定
|
||||
onCirculationSave(to_admin_id) {
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if (valid) {
|
||||
orderBack({ sn: this.item3.sn, os: this.item3.os, to_admin_id: to_admin_id }).then((res)=>{
|
||||
this.applyVisible = false
|
||||
this.getList()
|
||||
})
|
||||
orderBack({
|
||||
sn: this.item3.sn,
|
||||
os: this.item3.os,
|
||||
to_admin_id: to_admin_id,
|
||||
}).then((res) => {
|
||||
this.applyVisible = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -460,66 +702,93 @@ export default {
|
|||
// 取消
|
||||
onCancel() {
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if(valid){
|
||||
this.$axios.post('/admin/order/backcancel', { id: this.item3.id }).then(res => {
|
||||
this.applyVisible = false
|
||||
this.getList()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post("/admin/order/backcancel", { id: this.item3.id })
|
||||
.then((res) => {
|
||||
this.applyVisible = false;
|
||||
this.getList();
|
||||
})
|
||||
}else{
|
||||
return false
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
onBack() {
|
||||
this.$axios.post('/admin/order/back', this.item).then(res => {
|
||||
this.dialogVisible = false
|
||||
this.item = {}
|
||||
this.getList()
|
||||
}).catch(err => {
|
||||
|
||||
this.$axios
|
||||
.post("/admin/order/back", this.item)
|
||||
.then((res) => {
|
||||
this.dialogVisible = false;
|
||||
this.item = {};
|
||||
this.getList();
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onSave(item) {
|
||||
console.log(this.next_follow)
|
||||
|
||||
this.$axios.post('/admin/order/save', { id: item.id, check_sn: item.check_sn, is_wechat: item.is_wechat, travel_end: item.travel_end, travel_date: item.travel_date, desc: item.desc, status: item.status, next_follow: this.next_follow, personnel: this.item.personnel }).then(res => {
|
||||
this.dialogVisible = false
|
||||
this.item = { next_follow: '', personnel: {}}
|
||||
}).catch(err => {
|
||||
console.log(this.next_follow);
|
||||
|
||||
this.$axios
|
||||
.post("/admin/order/save", {
|
||||
id: item.id,
|
||||
check_sn: item.check_sn,
|
||||
is_wechat: item.is_wechat,
|
||||
travel_end: item.travel_end,
|
||||
travel_date: item.travel_date,
|
||||
desc: item.desc,
|
||||
status: item.status,
|
||||
next_follow: this.next_follow,
|
||||
personnel: this.item.personnel,
|
||||
})
|
||||
.then((res) => {
|
||||
this.dialogVisible = false;
|
||||
this.item = { next_follow: "", personnel: {} };
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onPass(form) {
|
||||
this.$axios.post('/admin/order/pass', { check_sn: form.check_sn }).then(res => {
|
||||
this.dialog2Visible = false
|
||||
this.form = {}
|
||||
}).catch(err => {
|
||||
|
||||
this.$axios
|
||||
.post("/admin/order/pass", { check_sn: form.check_sn })
|
||||
.then((res) => {
|
||||
this.dialog2Visible = false;
|
||||
this.form = {};
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onChange(from) {
|
||||
this.$set(this.item, 'desc', from + (this.item.desc != undefined ? this.item.desc : ''))
|
||||
this.$set(
|
||||
this.item,
|
||||
"desc",
|
||||
from + (this.item.desc != undefined ? this.item.desc : "")
|
||||
);
|
||||
},
|
||||
onChange2(from) {
|
||||
this.$set(this.item, 'to_admin_id', from + (this.item.admin_id != undefined ? this.item.admin_id : ''))
|
||||
this.$set(
|
||||
this.item,
|
||||
"to_admin_id",
|
||||
from + (this.item.admin_id != undefined ? this.item.admin_id : "")
|
||||
);
|
||||
},
|
||||
handleChange(os) {
|
||||
console.log(os)
|
||||
console.log(os);
|
||||
},
|
||||
getShortcutContent() {
|
||||
this.listLoading = true
|
||||
this.$axios.get('/admin/shortcutContent/list', { params: { page: 1, limit: 50, status: 1 }}).then(response => {
|
||||
for (const r of response.data.data) {
|
||||
this.options.push({ value: r.id, label: r.content })
|
||||
}
|
||||
}).catch(() => {
|
||||
this.listLoading = true;
|
||||
this.$axios
|
||||
.get("/admin/shortcutContent/list", {
|
||||
params: { page: 1, limit: 50, status: 1 },
|
||||
})
|
||||
.then((response) => {
|
||||
for (const r of response.data.data) {
|
||||
this.options.push({ value: r.id, label: r.content });
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,12 +1,134 @@
|
|||
<template>
|
||||
|
||||
<div class="app-container">
|
||||
<div class="filter-container">
|
||||
<el-input
|
||||
v-model="listQuery.sn"
|
||||
placeholder="订单号"
|
||||
style="width: 200px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-table v-loading="listLoading" :data="list" border fit highlight-current-row style="width: 100%">
|
||||
<el-input
|
||||
v-model="listQuery.mobile"
|
||||
placeholder="手机号"
|
||||
style="width: 200px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" fixed label="电话" width="120" prop="mobile" />
|
||||
<el-input
|
||||
v-model="listQuery.zhubo"
|
||||
placeholder="主播"
|
||||
style="width: 100px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" fixed label="平台" width="80" prop="os_name" />
|
||||
<el-input
|
||||
v-model="listQuery.admin"
|
||||
placeholder="客服"
|
||||
style="width: 100px"
|
||||
class="filter-item"
|
||||
/>
|
||||
|
||||
<el-cascader
|
||||
v-model="listQuery.os_status"
|
||||
placeholder="平台状态"
|
||||
:options="oss"
|
||||
class="filter-item"
|
||||
@change="handleChange"
|
||||
/>
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.status"
|
||||
filterable
|
||||
placeholder="跟进状态"
|
||||
class="filter-item"
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option key="" label="请选择" value="" />
|
||||
<el-option
|
||||
v-for="(v, k) in status_arr"
|
||||
:key="k"
|
||||
:label="v"
|
||||
:value="k"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.timetype"
|
||||
filterable
|
||||
placeholder="时间"
|
||||
class="filter-item"
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option key="" label="请选择" value="" />
|
||||
<el-option
|
||||
v-for="(v, k) in timetype_arr"
|
||||
:key="k"
|
||||
:label="v"
|
||||
:value="k"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
<el-date-picker
|
||||
v-model="listQuery.times"
|
||||
class="filter-item"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="getList"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="getList(1)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="dialog2Visible = true"
|
||||
>
|
||||
核单
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
:data="list"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed
|
||||
label="电话"
|
||||
width="120"
|
||||
prop="mobile"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed
|
||||
label="平台"
|
||||
width="80"
|
||||
prop="os_name"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" fixed label="直播" width="60">
|
||||
<template slot-scope="scope">
|
||||
|
@ -14,37 +136,80 @@
|
|||
<el-tag v-else type="info">否</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed label="客服" width="80" prop="admin.username" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed
|
||||
label="客服"
|
||||
width="80"
|
||||
prop="admin.username"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" label="订单号" width="180" prop="sn" />
|
||||
|
||||
<el-table-column width="138px" align="center" label="下单时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_at | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.create_at | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="160px" align="center" label="派单时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.give_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.give_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="状态" width="80">
|
||||
<template slot-scope="scope">
|
||||
<div style="padding: 1px 5px; border-radius: 3px;" :style="{color:order_status[scope.row.order_status],border:`1px solid ${order_status[scope.row.order_status]}`}" type="primary">{{ scope.row.order_status_name }}</div>
|
||||
<div
|
||||
style="padding: 1px 5px; border-radius: 3px"
|
||||
:style="{
|
||||
color: order_status[scope.row.order_status],
|
||||
border: `1px solid ${order_status[scope.row.order_status]}`,
|
||||
}"
|
||||
type="primary"
|
||||
>
|
||||
{{ scope.row.order_status_name }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="跟进状态" width="90">
|
||||
<template slot-scope="scope">
|
||||
<div style="padding: 1px 5px; border-radius: 3px;" :style="{color:follow_status[scope.row.status],border:`1px solid ${follow_status[scope.row.status]}`}" type="primary">{{ scope.row.status_name }}</div>
|
||||
<div
|
||||
style="padding: 1px 5px; border-radius: 3px"
|
||||
:style="{
|
||||
color: follow_status[scope.row.status],
|
||||
border: `1px solid ${follow_status[scope.row.status]}`,
|
||||
}"
|
||||
type="primary"
|
||||
>
|
||||
{{ scope.row.status_name }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" width="500px" label="标题" prop="product_name" />
|
||||
<el-table-column width="500px" align="center" label="跟进备注" prop="remark" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
width="500px"
|
||||
label="标题"
|
||||
prop="product_name"
|
||||
/>
|
||||
<el-table-column
|
||||
width="500px"
|
||||
align="center"
|
||||
label="跟进备注"
|
||||
prop="remark"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" label="联系人" width="120" prop="contact" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="联系人"
|
||||
width="120"
|
||||
prop="contact"
|
||||
/>
|
||||
|
||||
<!-- <el-table-column align="center" label="微信" width="80">
|
||||
<template slot-scope="scope">
|
||||
|
@ -54,13 +219,15 @@
|
|||
|
||||
<el-table-column width="138px" align="center" label="出行时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.travel_date | parseTime('{y}-{m}-{d}') }}</span>
|
||||
<span>{{ scope.row.travel_date | parseTime("{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column width="138px" align="center" label="最后跟进时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.last_follow | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.last_follow | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
@ -70,25 +237,42 @@
|
|||
<i v-if="scope.row.is_check == 2" class="el-icon-close" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" width="138px" label="分类" prop="category_desc" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
width="138px"
|
||||
label="分类"
|
||||
prop="category_desc"
|
||||
/>
|
||||
|
||||
<el-table-column align="center" label="总金额" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.total_price/100 }}</span>
|
||||
<span>{{ scope.row.total_price / 100 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" width="80px" label="人数" prop="quantity" />
|
||||
<el-table-column align="center" label="主播" width="80" prop="anchor.username" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
width="80px"
|
||||
label="人数"
|
||||
prop="quantity"
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="主播"
|
||||
width="80"
|
||||
prop="anchor.username"
|
||||
/>
|
||||
<el-table-column width="138px" align="center" label="修改时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.update_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.update_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="listQuery.page"
|
||||
:limit.sync="listQuery.limit"
|
||||
|
@ -115,27 +299,51 @@
|
|||
{{ item.mobile }}
|
||||
</el-form-item>
|
||||
<el-form-item label="下单时间">
|
||||
{{ item.create_at | parseTime('{y}-{m}-{d} {h}:{i}') }}
|
||||
{{ item.create_at | parseTime("{y}-{m}-{d} {h}:{i}") }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="人员">
|
||||
<el-row>
|
||||
<el-col :span="3">大人</el-col>
|
||||
<el-col :span="5"><el-input v-model="item.personnel.adult" name="adult" placeholder="大人" /></el-col>
|
||||
<el-col :span="5"
|
||||
><el-input
|
||||
v-model="item.personnel.adult"
|
||||
name="adult"
|
||||
placeholder="大人"
|
||||
/></el-col>
|
||||
<el-col :span="3">老人</el-col>
|
||||
<el-col :span="5"><el-input v-model="item.personnel.old" name="old" placeholder="老人" /></el-col>
|
||||
<el-col :span="5"
|
||||
><el-input
|
||||
v-model="item.personnel.old"
|
||||
name="old"
|
||||
placeholder="老人"
|
||||
/></el-col>
|
||||
<el-col :span="3">小孩</el-col>
|
||||
<el-col :span="5"><el-input v-model="item.personnel.child" name="child" placeholder="小孩" /></el-col>
|
||||
<el-col :span="5"
|
||||
><el-input
|
||||
v-model="item.personnel.child"
|
||||
name="child"
|
||||
placeholder="小孩"
|
||||
/></el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="item.status!==1" label="核销码">
|
||||
<el-input v-model="item.check_sn" name="check_sn" placeholder="请输入平台核销码" />
|
||||
<el-form-item v-if="item.status !== 1" label="核销码">
|
||||
<el-input
|
||||
v-model="item.check_sn"
|
||||
name="check_sn"
|
||||
placeholder="请输入平台核销码"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="加微信" v-if="item.status!==2">
|
||||
<el-checkbox v-model="item.is_wechat" :true-label="1" :false-label="0">已加微信</el-checkbox>
|
||||
<el-form-item label="加微信" v-if="item.status !== 2">
|
||||
<el-checkbox
|
||||
v-model="item.is_wechat"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
>已加微信</el-checkbox
|
||||
>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="出游日期">
|
||||
|
@ -146,7 +354,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="item.status!==1" label="返回日期">
|
||||
<el-form-item v-if="item.status !== 1" label="返回日期">
|
||||
<el-date-picker
|
||||
v-model="item.travel_end"
|
||||
type="date"
|
||||
|
@ -154,19 +362,20 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="下次跟进时间" v-if="item.status!==2">
|
||||
<el-form-item label="下次跟进时间" v-if="item.status !== 2">
|
||||
<el-date-picker
|
||||
v-model="next_follow"
|
||||
type="datetime"
|
||||
placeholder="选择日期时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="跟进状态">
|
||||
<template v-for="(v,k) in status_arr">
|
||||
<el-radio v-if="k > 0" v-model="item.status" :label="k" border>{{ v }}</el-radio>
|
||||
<template v-for="(v, k) in status_arr">
|
||||
<el-radio v-if="k > 0" v-model="item.status" :label="k" border>{{
|
||||
v
|
||||
}}</el-radio>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="快捷跟进" style="width: 600px;">
|
||||
|
@ -186,7 +395,6 @@
|
|||
<el-form-item label="跟进说明">
|
||||
<el-input v-model="item.desc" type="textarea" />
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
|
@ -195,71 +403,45 @@
|
|||
|
||||
<el-tabs v-model="active" type="border-card">
|
||||
<el-tab-pane name="follow" label="跟进记录">
|
||||
|
||||
<el-table
|
||||
:data="item.follow"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
label="日期"
|
||||
width="138"
|
||||
>
|
||||
<el-table :data="item.follow" style="width: 100%">
|
||||
<el-table-column label="日期" width="138">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.create_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="跟进人"
|
||||
width="110"
|
||||
prop="name"
|
||||
/>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
width="80"
|
||||
>
|
||||
<el-table-column label="跟进人" width="110" prop="name" />
|
||||
<el-table-column label="状态" width="80">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ status_arr[scope.row.status] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="desc"
|
||||
label="跟进说明"
|
||||
/>
|
||||
<el-table-column prop="desc" label="跟进说明" />
|
||||
</el-table>
|
||||
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="finance" label="财务记录">
|
||||
<el-table
|
||||
:data="item.finance"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
label="日期"
|
||||
>
|
||||
<el-table :data="item.finance" style="width: 100%">
|
||||
<el-table-column label="日期">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
|
||||
<span>{{
|
||||
scope.row.create_time | parseTime("{y}-{m}-{d} {h}:{i}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="类型"
|
||||
width="110"
|
||||
>
|
||||
<el-table-column label="类型" width="110">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ type_arr[scope.row.type] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
width="120"
|
||||
>
|
||||
<el-table-column label="状态" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.total/100 }}</span>
|
||||
<span>{{ scope.row.total / 100 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="纯核销" :visible.sync="dialog2Visible">
|
||||
|
@ -284,13 +466,23 @@
|
|||
<el-form-item label="订单号:">
|
||||
<el-input v-model="item3.sn" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="流转对象:" style="width: 600px;" prop="flowObj">
|
||||
<el-select v-model="item3.flowObj" placeholder="请选择" @change="onChange2">
|
||||
<el-form-item style="display: inline-flex;text-align: left;width: 770px;">
|
||||
<el-form-item label="流转对象:" style="width: 600px" prop="flowObj">
|
||||
<el-select
|
||||
v-model="item3.flowObj"
|
||||
placeholder="请选择"
|
||||
@change="onChange2"
|
||||
>
|
||||
<el-form-item
|
||||
style="display: inline-flex; text-align: left; width: 770px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in adminList"
|
||||
:key="item.value"
|
||||
style="width: 250px;display: inline-flex;word-break: break-all;"
|
||||
style="
|
||||
width: 250px;
|
||||
display: inline-flex;
|
||||
word-break: break-all;
|
||||
"
|
||||
:label="item.username"
|
||||
:value="item.id"
|
||||
/>
|
||||
|
@ -300,31 +492,64 @@
|
|||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<!-- scope.row.backs&&scope.row.backs.status==2? -->
|
||||
<el-button v-if="item3.backs&&item3.backs.status==0" type="primary" @click="onCancel(item3.flowObj)">取 消</el-button>
|
||||
<el-button v-else type="primary" @click="onCirculationSave(item3.flowObj)">确 认</el-button>
|
||||
<el-button
|
||||
v-if="item3.backs && item3.backs.status == 0"
|
||||
type="primary"
|
||||
@click="onCancel(item3.flowObj)"
|
||||
>取 消</el-button
|
||||
>
|
||||
<el-button
|
||||
v-else
|
||||
type="primary"
|
||||
@click="onCirculationSave(item3.flowObj)"
|
||||
>确 认</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import Pagination from '@/Wangeditor/Pagination'
|
||||
import Pagination from '@/components/PaginationFixed'
|
||||
import {orderBack} from '@/api/order'
|
||||
import Pagination from "@/components/PaginationFixed";
|
||||
import { orderBack } from "@/api/order";
|
||||
export default {
|
||||
name: 'Orderlist',
|
||||
name: "Orderlist",
|
||||
components: { Pagination },
|
||||
data() {
|
||||
return {
|
||||
active: 'follow',
|
||||
types: { 0: '', 1: '', 2: '', 3: 'primary', 4: 'success', 5: 'warning', 6: 'danger', 7: 'info' },
|
||||
types2: { 1: 'primary', 2: 'success', 3: 'warning' },
|
||||
status_arr: ['待跟进', '跟进中', '已核销', '核销失败', '放弃跟单'],
|
||||
type_arr: ['-', '收益', '支出'],
|
||||
active: "follow",
|
||||
types: {
|
||||
0: "",
|
||||
1: "",
|
||||
2: "",
|
||||
3: "primary",
|
||||
4: "success",
|
||||
5: "warning",
|
||||
6: "danger",
|
||||
7: "info",
|
||||
},
|
||||
types2: { 1: "primary", 2: "success", 3: "warning" },
|
||||
status_arr: ["待跟进", "跟进中", "已核销", "核销失败", "放弃跟单"],
|
||||
type_arr: ["-", "收益", "支出"],
|
||||
timetype_arr: {},
|
||||
order_status: ['#9e9f9c', '#04bcd9', '#fc9904', '#1193f4', '#48b14b', '#eb1662', '#9d1cb5'],
|
||||
follow_status: ['#9e9f9c', '#04bcd9', '#fc9904', '#1193f4', '#48b14b', '#eb1662'],
|
||||
order_status: [
|
||||
"#9e9f9c",
|
||||
"#04bcd9",
|
||||
"#fc9904",
|
||||
"#1193f4",
|
||||
"#48b14b",
|
||||
"#eb1662",
|
||||
"#9d1cb5",
|
||||
],
|
||||
follow_status: [
|
||||
"#9e9f9c",
|
||||
"#04bcd9",
|
||||
"#fc9904",
|
||||
"#1193f4",
|
||||
"#48b14b",
|
||||
"#eb1662",
|
||||
],
|
||||
options: [],
|
||||
value: null,
|
||||
next_follow: null,
|
||||
|
@ -338,9 +563,9 @@ export default {
|
|||
status: null,
|
||||
admin: null,
|
||||
zhubo: null,
|
||||
os_status:[]
|
||||
os_status: [],
|
||||
},
|
||||
item: { next_follow: '', personnel: {}},
|
||||
item: { next_follow: "", personnel: {} },
|
||||
follow: [],
|
||||
|
||||
dialogVisible: false,
|
||||
|
@ -349,112 +574,128 @@ export default {
|
|||
oss: [],
|
||||
item3: {
|
||||
sn: null,
|
||||
backs:null,
|
||||
flowObj:'',
|
||||
os: null // 初始值,你可以根据需要设置为 1、2 或 3
|
||||
backs: null,
|
||||
flowObj: "",
|
||||
os: null, // 初始值,你可以根据需要设置为 1、2 或 3
|
||||
},
|
||||
os_arr: { 1: '美团', 2: '快手', 3: '抖音' },
|
||||
os_arr: { 1: "美团", 2: "快手", 3: "抖音" },
|
||||
adminList: [],
|
||||
form: {},
|
||||
rules:{
|
||||
rules: {
|
||||
flowObj: [
|
||||
{ required: true, message: '请选择流转对象', trigger: 'change' }
|
||||
{ required: true, message: "请选择流转对象", trigger: "change" },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
// this.listQuery.status = this.$route.query.status || null
|
||||
this.listQuery.zhubo = this.$route.query.zhubo || null
|
||||
this.listQuery.zhubo = this.$route.query.zhubo || null;
|
||||
if (this.$route.query.start && this.$route.query.end) {
|
||||
this.listQuery.times = [this.$route.query.start, this.$route.query.end]
|
||||
this.listQuery.times = [this.$route.query.start, this.$route.query.end];
|
||||
}
|
||||
this.setQuery('status')
|
||||
this.setQuery('os_status')
|
||||
this.setQuery('times')
|
||||
this.getList()
|
||||
this.getShortcutContent()
|
||||
this.getAdminList()
|
||||
this.setQuery("status");
|
||||
this.setQuery("os_status");
|
||||
this.setQuery("times");
|
||||
this.getList();
|
||||
this.getShortcutContent();
|
||||
this.getAdminList();
|
||||
},
|
||||
methods: {
|
||||
setQuery(key){
|
||||
setQuery(key) {
|
||||
if (this.$route.query.hasOwnProperty(key)) {
|
||||
this.listQuery[key] = this.$route.query[key]
|
||||
this.listQuery[key] = this.$route.query[key];
|
||||
} else {
|
||||
this.listQuery[key] = ''
|
||||
this.listQuery[key] = "";
|
||||
}
|
||||
},
|
||||
getList($is_excel) {
|
||||
this.listQuery.excel = null
|
||||
this.listQuery.excel = null;
|
||||
if ($is_excel == 1) {
|
||||
this.listQuery.excel = 1
|
||||
const isdate = this.listQuery.times[0] instanceof Date
|
||||
this.listQuery.excel = 1;
|
||||
const isdate = this.listQuery.times[0] instanceof Date;
|
||||
const params = {
|
||||
...this.listQuery,
|
||||
times: [isdate ? this.listQuery.times[0].toISOString() : '', isdate ? this.listQuery.times[1].toISOString() : '']
|
||||
}
|
||||
window.open('/admin/order/index?' + this.objectToQuery(params))
|
||||
return
|
||||
times: [
|
||||
isdate ? this.listQuery.times[0].toISOString() : "",
|
||||
isdate ? this.listQuery.times[1].toISOString() : "",
|
||||
],
|
||||
};
|
||||
window.open("/admin/order/index?" + this.objectToQuery(params));
|
||||
return;
|
||||
}
|
||||
|
||||
this.listQuery.os_status = [4,2] //todo 现在只查已使用订单
|
||||
this.listQuery.os_status = [4, 2]; //todo 现在只查已使用订单
|
||||
|
||||
this.$axios.get('/admin/order/index', { params: this.listQuery }).then(response => {
|
||||
this.list = response.data.data
|
||||
this.total = response.data.total
|
||||
this.timetype_arr = response.ext.timetype,
|
||||
this.oss = response.ext.oss
|
||||
this.listLoading = false
|
||||
})
|
||||
this.$axios
|
||||
.get("/admin/order/index", { params: this.listQuery })
|
||||
.then((response) => {
|
||||
this.list = response.data.data;
|
||||
this.total = response.data.total;
|
||||
(this.timetype_arr = response.ext.timetype),
|
||||
(this.oss = response.ext.oss);
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
objectToQuery(obj) {
|
||||
return Object.keys(obj).map(key => {
|
||||
const value = obj[key]
|
||||
if (value == undefined || value == null) return ''
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(value)
|
||||
}).join('&')
|
||||
return Object.keys(obj)
|
||||
.map((key) => {
|
||||
const value = obj[key];
|
||||
if (value == undefined || value == null) return "";
|
||||
return encodeURIComponent(key) + "=" + encodeURIComponent(value);
|
||||
})
|
||||
.join("&");
|
||||
},
|
||||
onInfo(item) {
|
||||
this.value = null
|
||||
this.next_follow = null
|
||||
this.$set(item, 'next_follow', null)
|
||||
this.item = item
|
||||
this.active = 'follow'
|
||||
this.$axios.get('/admin/order/info', { params: { id: item.id }}).then(res => {
|
||||
this.item = res.data
|
||||
this.dialogVisible = true
|
||||
}).catch(err => {
|
||||
|
||||
this.value = null;
|
||||
this.next_follow = null;
|
||||
this.$set(item, "next_follow", null);
|
||||
this.item = item;
|
||||
this.active = "follow";
|
||||
this.$axios
|
||||
.get("/admin/order/info", { params: { id: item.id } })
|
||||
.then((res) => {
|
||||
this.item = res.data;
|
||||
this.dialogVisible = true;
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
getAdminList() {
|
||||
this.$axios.get('/admin/admin/index', { params: { limit: 100, status: 1, is_order: 1 }}).then(response => {
|
||||
this.adminList = response.data.data
|
||||
this.listLoading = false
|
||||
}).catch(err => {
|
||||
this.$axios
|
||||
.get("/admin/admin/index", {
|
||||
params: { limit: 100, status: 1, is_order: 1 },
|
||||
})
|
||||
.then((response) => {
|
||||
this.adminList = response.data.data;
|
||||
this.listLoading = false;
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onCirculation(item) {
|
||||
this.applyVisible = true
|
||||
this.item3 = { ...item, os: Number(item.os) }
|
||||
this.applyVisible = true;
|
||||
this.item3 = { ...item, os: Number(item.os) };
|
||||
console.log(this.item3);
|
||||
if(this.item3.backs&&this.item3.backs.admin_id){
|
||||
this.item3.flowObj = this.item3.backs.admin_id
|
||||
}else{
|
||||
this.resetForm('ruleForm')
|
||||
if (this.item3.backs && this.item3.backs.admin_id) {
|
||||
this.item3.flowObj = this.item3.backs.admin_id;
|
||||
} else {
|
||||
this.resetForm("ruleForm");
|
||||
}
|
||||
},
|
||||
//确定
|
||||
onCirculationSave(to_admin_id) {
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if (valid) {
|
||||
orderBack({ sn: this.item3.sn, os: this.item3.os, to_admin_id: to_admin_id }).then((res)=>{
|
||||
this.applyVisible = false
|
||||
this.getList()
|
||||
})
|
||||
orderBack({
|
||||
sn: this.item3.sn,
|
||||
os: this.item3.os,
|
||||
to_admin_id: to_admin_id,
|
||||
}).then((res) => {
|
||||
this.applyVisible = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -463,66 +704,93 @@ export default {
|
|||
// 取消
|
||||
onCancel() {
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if(valid){
|
||||
this.$axios.post('/admin/order/backcancel', { id: this.item3.id }).then(res => {
|
||||
this.applyVisible = false
|
||||
this.getList()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post("/admin/order/backcancel", { id: this.item3.id })
|
||||
.then((res) => {
|
||||
this.applyVisible = false;
|
||||
this.getList();
|
||||
})
|
||||
}else{
|
||||
return false
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
onBack() {
|
||||
this.$axios.post('/admin/order/back', this.item).then(res => {
|
||||
this.dialogVisible = false
|
||||
this.item = {}
|
||||
this.getList()
|
||||
}).catch(err => {
|
||||
|
||||
this.$axios
|
||||
.post("/admin/order/back", this.item)
|
||||
.then((res) => {
|
||||
this.dialogVisible = false;
|
||||
this.item = {};
|
||||
this.getList();
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onSave(item) {
|
||||
console.log(this.next_follow)
|
||||
|
||||
this.$axios.post('/admin/order/save', { id: item.id, check_sn: item.check_sn, is_wechat: item.is_wechat, travel_end: item.travel_end, travel_date: item.travel_date, desc: item.desc, status: item.status, next_follow: this.next_follow, personnel: this.item.personnel }).then(res => {
|
||||
this.dialogVisible = false
|
||||
this.item = { next_follow: '', personnel: {}}
|
||||
}).catch(err => {
|
||||
console.log(this.next_follow);
|
||||
|
||||
this.$axios
|
||||
.post("/admin/order/save", {
|
||||
id: item.id,
|
||||
check_sn: item.check_sn,
|
||||
is_wechat: item.is_wechat,
|
||||
travel_end: item.travel_end,
|
||||
travel_date: item.travel_date,
|
||||
desc: item.desc,
|
||||
status: item.status,
|
||||
next_follow: this.next_follow,
|
||||
personnel: this.item.personnel,
|
||||
})
|
||||
.then((res) => {
|
||||
this.dialogVisible = false;
|
||||
this.item = { next_follow: "", personnel: {} };
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onPass(form) {
|
||||
this.$axios.post('/admin/order/pass', { check_sn: form.check_sn }).then(res => {
|
||||
this.dialog2Visible = false
|
||||
this.form = {}
|
||||
}).catch(err => {
|
||||
|
||||
this.$axios
|
||||
.post("/admin/order/pass", { check_sn: form.check_sn })
|
||||
.then((res) => {
|
||||
this.dialog2Visible = false;
|
||||
this.form = {};
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
onChange(from) {
|
||||
this.$set(this.item, 'desc', from + (this.item.desc != undefined ? this.item.desc : ''))
|
||||
this.$set(
|
||||
this.item,
|
||||
"desc",
|
||||
from + (this.item.desc != undefined ? this.item.desc : "")
|
||||
);
|
||||
},
|
||||
onChange2(from) {
|
||||
this.$set(this.item, 'to_admin_id', from + (this.item.admin_id != undefined ? this.item.admin_id : ''))
|
||||
this.$set(
|
||||
this.item,
|
||||
"to_admin_id",
|
||||
from + (this.item.admin_id != undefined ? this.item.admin_id : "")
|
||||
);
|
||||
},
|
||||
handleChange(os) {
|
||||
console.log(os)
|
||||
console.log(os);
|
||||
},
|
||||
getShortcutContent() {
|
||||
this.listLoading = true
|
||||
this.$axios.get('/admin/shortcutContent/list', { params: { page: 1, limit: 50, status: 1 }}).then(response => {
|
||||
for (const r of response.data.data) {
|
||||
this.options.push({ value: r.id, label: r.content })
|
||||
}
|
||||
}).catch(() => {
|
||||
this.listLoading = true;
|
||||
this.$axios
|
||||
.get("/admin/shortcutContent/list", {
|
||||
params: { page: 1, limit: 50, status: 1 },
|
||||
})
|
||||
.then((response) => {
|
||||
for (const r of response.data.data) {
|
||||
this.options.push({ value: r.id, label: r.content });
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -38,7 +38,7 @@ module.exports = {
|
|||
},
|
||||
proxy: {
|
||||
'/dev-api': { // 接口地址 以 api开头的都走下面的配置
|
||||
target: 'http://192.168.1.8:8787', // 代理目标地址为后端服务器地址 127.0.0.1 192.168.1.2
|
||||
target: 'https://www.szjinao.cn', // 代理目标地址为后端服务器地址 127.0.0.1 192.168.1.2
|
||||
ws: true, // 是否支持 websocket 请求 支持
|
||||
changeOrigin: true, // 是否启用跨域
|
||||
pathRewrite: {
|
||||
|
|
Loading…
Reference in New Issue