基础框架搭建
This commit is contained in:
@@ -10,17 +10,12 @@ import {
|
||||
BasicLayout,
|
||||
UserLayout
|
||||
} from '@/layouts'
|
||||
import assign from './routes/assign'
|
||||
import firstCheck from './routes/firstCheck'
|
||||
import reCheck from './routes/reCheck'
|
||||
import signIn from './routes/signIn'
|
||||
import address from './routes/address'
|
||||
import detail from './routes/detail'
|
||||
import organization from './routes/organization'
|
||||
import handleService from './routes/handleService'
|
||||
import completeOrder from './routes/completeOrder'
|
||||
import stock from './routes/stock'
|
||||
import user from './routes/user'
|
||||
import coupon from './routes/coupon'
|
||||
import permission from './routes/permission'
|
||||
import pendingOrder from './routes/pendingOrder'
|
||||
import sales from './routes/sales'
|
||||
|
||||
export const asyncRouterMap = [{
|
||||
path: '/',
|
||||
@@ -37,20 +32,15 @@ export const asyncRouterMap = [{
|
||||
meta: {
|
||||
title: '数据看板',
|
||||
keepAlive: true,
|
||||
icon: 'dashboard',
|
||||
icon: 'user',
|
||||
permission: ['home']
|
||||
}
|
||||
},
|
||||
...pendingOrder,
|
||||
...assign,
|
||||
...firstCheck,
|
||||
...signIn,
|
||||
...reCheck,
|
||||
...detail,
|
||||
...handleService,
|
||||
...completeOrder,
|
||||
...address,
|
||||
...organization,
|
||||
...stock,
|
||||
...sales,
|
||||
...user,
|
||||
...coupon,
|
||||
...permission
|
||||
]
|
||||
},
|
||||
|
||||
10
src/config/routes/coupon.js
Normal file
10
src/config/routes/coupon.js
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
export default [{
|
||||
path: '/coupon',
|
||||
name: 'CouponIndex',
|
||||
meta: {
|
||||
title: '优惠券管理',
|
||||
icon: 'bank'
|
||||
},
|
||||
component: () => import('@/views/coupon/Index')
|
||||
}]
|
||||
@@ -7,13 +7,13 @@ export default [
|
||||
component: () => import('@/views/detail/Detail'),
|
||||
meta: { title: '订单详情' }
|
||||
},
|
||||
{
|
||||
path: '/organization/detail/:orderId/:itemId',
|
||||
name: 'OrganizationDetail',
|
||||
hidden: true,
|
||||
component: () => import('@/views/organization/Detail'),
|
||||
meta: { title: '机构详情' }
|
||||
},
|
||||
// {
|
||||
// path: '/organization/detail/:orderId/:itemId',
|
||||
// name: 'OrganizationDetail',
|
||||
// hidden: true,
|
||||
// component: () => import('@/views/organization/Detail'),
|
||||
// meta: { title: '机构详情' }
|
||||
// },
|
||||
{
|
||||
path: '/detail/:id/logistics',
|
||||
name: 'DetailLogistics',
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
import {
|
||||
RouteView
|
||||
} from '@/layouts'
|
||||
|
||||
export default [{
|
||||
path: '/organization',
|
||||
component: RouteView,
|
||||
name: 'organizationIndex',
|
||||
redirect: '/organization/index',
|
||||
meta: {
|
||||
title: '机构信息列表',
|
||||
icon: 'bank'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: '/organization/index',
|
||||
name: 'OrganizationIndex',
|
||||
component: () => import('@/views/organization/Index'),
|
||||
meta: {
|
||||
title: '机构列表',
|
||||
icon: 'unordered-list'
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
@@ -11,10 +11,10 @@ export default [
|
||||
{
|
||||
path: '/permissions/index',
|
||||
name: 'PermissionsIndex',
|
||||
hidden: true,
|
||||
component: () => import('@/views/permissions/Index'),
|
||||
meta: {
|
||||
title: '组织结构(权限管理)'
|
||||
title: '权限管理',
|
||||
icon: 'bank'
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
42
src/config/routes/sales.js
Normal file
42
src/config/routes/sales.js
Normal file
@@ -0,0 +1,42 @@
|
||||
import {
|
||||
RouteView
|
||||
} from '@/layouts'
|
||||
|
||||
export default [{
|
||||
path: '/sales',
|
||||
name: 'StockIndex',
|
||||
meta: {
|
||||
title: '销售管理',
|
||||
icon: 'bank'
|
||||
},
|
||||
component: RouteView,
|
||||
children: [
|
||||
{
|
||||
path: '/sales/online',
|
||||
name: 'SalesOnline',
|
||||
meta: {
|
||||
title: '线上零售订单',
|
||||
icon: 'unordered-list'
|
||||
},
|
||||
component: () => import('@/views/sales/Online')
|
||||
},
|
||||
{
|
||||
path: '/sales/stock',
|
||||
name: 'SalesStock',
|
||||
meta: {
|
||||
title: '线上进货订单',
|
||||
icon: 'unordered-list'
|
||||
},
|
||||
component: () => import('@/views/sales/OnStock')
|
||||
},
|
||||
{
|
||||
path: '/sales/offline',
|
||||
name: 'SalesOffline',
|
||||
meta: {
|
||||
title: '线下出货列表',
|
||||
icon: 'unordered-list'
|
||||
},
|
||||
component: () => import('@/views/sales/Offline')
|
||||
}
|
||||
]
|
||||
}]
|
||||
54
src/config/routes/stock.js
Normal file
54
src/config/routes/stock.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import {
|
||||
RouteView
|
||||
} from '@/layouts'
|
||||
|
||||
export default [{
|
||||
path: '/stock',
|
||||
name: 'StockIndex',
|
||||
meta: {
|
||||
title: '库存管理',
|
||||
icon: 'bank'
|
||||
},
|
||||
component: RouteView,
|
||||
children: [
|
||||
{
|
||||
path: '/stock/ins',
|
||||
name: 'StockIns',
|
||||
meta: {
|
||||
title: '分公司库存管理',
|
||||
icon: 'unordered-list'
|
||||
},
|
||||
component: RouteView,
|
||||
redirect: '/stock/in',
|
||||
children: [
|
||||
{
|
||||
path: '/stock/in',
|
||||
name: 'StockIn',
|
||||
component: () => import('@/views/stock/In'),
|
||||
meta: {
|
||||
title: '入库管理',
|
||||
icon: 'unordered-list'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/stock/out',
|
||||
name: 'StockOut',
|
||||
component: () => import('@/views/stock/Out'),
|
||||
meta: {
|
||||
title: '出库管理',
|
||||
icon: 'unordered-list'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/stock/dealer',
|
||||
name: 'StockDealer',
|
||||
meta: {
|
||||
title: '经销商库存管理',
|
||||
icon: 'unordered-list'
|
||||
},
|
||||
component: () => import('@/views/stock/DealerIndex')
|
||||
}
|
||||
]
|
||||
}]
|
||||
9
src/config/routes/user.js
Normal file
9
src/config/routes/user.js
Normal file
@@ -0,0 +1,9 @@
|
||||
export default [{
|
||||
path: '/user',
|
||||
name: 'UserIndex',
|
||||
meta: {
|
||||
title: '用户管理',
|
||||
icon: 'bank'
|
||||
},
|
||||
component: () => import('@/views/user/Index')
|
||||
}]
|
||||
@@ -18,7 +18,7 @@
|
||||
</template>
|
||||
|
||||
<template v-slot:rightContentRender>
|
||||
<span class="rightContentRenderTitle">欢迎使用水感应大数据综合管理平台</span>
|
||||
<span class="rightContentRenderTitle">欢迎使用水感应代理商综合管理平台</span>
|
||||
<right-content :is-mobile="isMobile" :theme="settings.theme" :top-menu="settings.layout === 'topmenu'" />
|
||||
</template>
|
||||
|
||||
@@ -61,7 +61,7 @@ export default {
|
||||
menus: [],
|
||||
// 侧栏收起状态
|
||||
collapsed: false,
|
||||
title: ' 水感应法律 ',
|
||||
title: ' 水感应代理商 ',
|
||||
logo: '',
|
||||
settings: {
|
||||
// 布局类型
|
||||
|
||||
344
src/views/coupon/Index.vue
Normal file
344
src/views/coupon/Index.vue
Normal file
@@ -0,0 +1,344 @@
|
||||
|
||||
<template>
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="优惠券生成人姓名">
|
||||
<a-input v-model="queryParam.item_id" placeholder="优惠券生成人姓名" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="优惠券类型" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="优惠券类型">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="优惠券状态" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="优惠券状态">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<!-- <a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button> -->
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
<a-button
|
||||
v-if="exports_can"
|
||||
class="ml8"
|
||||
type="dashed"
|
||||
shape="round"
|
||||
icon="download"
|
||||
@click="exports"/>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<div slot="name">
|
||||
<div>zdx</div>
|
||||
</div>
|
||||
<div slot="phone">
|
||||
<div>14745798066</div>
|
||||
</div>
|
||||
<div slot="time">
|
||||
<div>2023-11-11~2029-11-11</div>
|
||||
</div>
|
||||
|
||||
<div slot="type">
|
||||
<div>3瓶优惠券</div>
|
||||
</div>
|
||||
<div slot="status">
|
||||
<div>待使用</div>
|
||||
</div>
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onEdit(record)">查看明细</a>
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
import StockInfo from './widgets/StockInfo.vue'
|
||||
import AddRole from './widgets/AddRole.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '优惠券生成人',
|
||||
children: [
|
||||
{
|
||||
title: '姓名',
|
||||
scopedSlots: { customRender: 'name' },
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '手机号',
|
||||
scopedSlots: { customRender: 'phone' },
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '使用人',
|
||||
children: [
|
||||
{
|
||||
title: '姓名',
|
||||
scopedSlots: { customRender: 'name' },
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '手机号',
|
||||
scopedSlots: { customRender: 'phone' },
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '优惠券有效期',
|
||||
scopedSlots: { customRender: 'time' },
|
||||
width: 240,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '优惠券类型',
|
||||
scopedSlots: { customRender: 'type' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '优惠券状态',
|
||||
scopedSlots: { customRender: 'status' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}
|
||||
// {
|
||||
// title: '操作',
|
||||
// scopedSlots: { customRender: 'actions' },
|
||||
// align: 'center',
|
||||
// width: 160,
|
||||
// fixed: 'right'
|
||||
// }
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'CouponIndex',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
Info,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
// this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 新增用户
|
||||
onAddRole () {
|
||||
console.log('add....')
|
||||
const success = {
|
||||
title: '新增用户',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认新增',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
AddRole,
|
||||
{
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 修改用户
|
||||
onEdit (item) {
|
||||
const success = {
|
||||
title: '库变详情',
|
||||
width: 1000,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
footer: '',
|
||||
okText: '知道了'
|
||||
}
|
||||
this.$dialog(
|
||||
StockInfo,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
76
src/views/coupon/widgets/AddRole.vue
Normal file
76
src/views/coupon/widgets/AddRole.vue
Normal file
@@ -0,0 +1,76 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="机构状态" style="padding-top:30px;">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'status',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择机构状态!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择机构状态!`"
|
||||
>
|
||||
<a-select-option v-for="(it) in item.status_two.texts" :key="it.key" :value="it.key+''">
|
||||
{{ it.title }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'AddRole',
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -29,7 +29,7 @@
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'EditStatus',
|
||||
name: 'EditRole',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
119
src/views/coupon/widgets/StockInfo.vue
Normal file
119
src/views/coupon/widgets/StockInfo.vue
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<div>
|
||||
<a-descriptions title="用户信息" :column="4">
|
||||
<a-descriptions-item label="姓名" span="2">张冬雪</a-descriptions-item>
|
||||
<a-descriptions-item label="电话" span="2">1810000000</a-descriptions-item>
|
||||
<a-descriptions-item label="身份" span="2">创客</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线上出库 -->
|
||||
<a-descriptions title="线上出库" :column="4">
|
||||
<a-descriptions-item label="线上出库方式" span="2">线上零售、优惠券扣除库存</a-descriptions-item>
|
||||
<a-descriptions-item label="出库数量" span="2">12件</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线下出库 物流 -->
|
||||
<a-descriptions title="线下出库(线上发货)" :column="4">
|
||||
<a-descriptions-item label="出库数量" span="2">12件</a-descriptions-item>
|
||||
<a-descriptions-item label="发货状态" span="2">线上发货</a-descriptions-item>
|
||||
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
|
||||
<a-descriptions-item label="发货时间" span="2">2023-12-12 12:12:12</a-descriptions-item>
|
||||
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="收货人名" span="2">张冬雪</a-descriptions-item>
|
||||
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线下出库 自提 -->
|
||||
<a-descriptions title="线下出库(自提)" :column="4">
|
||||
<a-descriptions-item label="自提数量" span="2">12件</a-descriptions-item>
|
||||
<a-descriptions-item label="发货状态" span="2">自提</a-descriptions-item>
|
||||
<a-descriptions-item label="提货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线上 -->
|
||||
<a-descriptions title="入库(线上)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线下 线上发货-->
|
||||
<a-descriptions title="入库(线下发货)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
|
||||
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线下 自提-->
|
||||
<a-descriptions title="入库(线下发货)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="自提时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'StockInfo',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -105,7 +105,6 @@ import RealName from '@/components/OrderDetailInfo/RealName.vue'
|
||||
import Services from '@/components/OrderDetailInfo/Services.vue'
|
||||
import BankList from '@/components/OrderDetailInfo/BankList.vue'
|
||||
import OrderSteps from '@/components/OrderDetailInfo/OrderSteps.vue'
|
||||
import SelctAddr from '@/views/address/modules/SelctAddr.vue'
|
||||
|
||||
export default {
|
||||
name: 'Detail',
|
||||
@@ -254,7 +253,7 @@ export default {
|
||||
// 选择邮寄地址操作
|
||||
selectAddr (order) {
|
||||
this.$dialog(
|
||||
SelctAddr,
|
||||
// SelctAddr,
|
||||
{
|
||||
order,
|
||||
on: {
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
<template>
|
||||
<a-row :gutter="[24, 24]">
|
||||
|
||||
<a-col :lg="10" :md="24" :sm="24" :xl="8" :xxl="7">
|
||||
<!-- <a-col :lg="10" :md="24" :sm="24" :xl="8" :xxl="7">
|
||||
<UserInfo />
|
||||
</a-col>
|
||||
|
||||
<a-col :lg="14" :md="24" :sm="24" :xl="16" :xxl="17">
|
||||
<a-col :lg="24" :md="24" :sm="24" :xl="24" :xxl="24">
|
||||
<Count v-if="info!=={}" :info="info" />
|
||||
</a-col> -->
|
||||
<a-col :lg="24" :md="24" :sm="24" :xl="24" :xxl="24">
|
||||
<!-- <Analysis /> -->
|
||||
首页展示。。
|
||||
</a-col>
|
||||
|
||||
</a-row>
|
||||
@@ -16,11 +20,12 @@
|
||||
import { getStatistical } from '@/api/statistical'
|
||||
import UserInfo from '@/views/home/components/UserInfo'
|
||||
import Count from '@/views/home/components/Count'
|
||||
import Analysis from '@/views/home/components/Analysis.vue'
|
||||
|
||||
export default {
|
||||
name: 'Home',
|
||||
components: {
|
||||
UserInfo, Count
|
||||
UserInfo, Count, Analysis
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
||||
252
src/views/home/components/Analysis.vue
Normal file
252
src/views/home/components/Analysis.vue
Normal file
@@ -0,0 +1,252 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-row>
|
||||
<a-col :xl="12" :lg="24" :md="24" :sm="24" :xs="24">
|
||||
<a-card class="antd-pro-pages-dashboard-analysis-salesCard" :loading="loading" :bordered="false" title="数据统计" :style="{ height: '100%' }">
|
||||
<div slot="extra" style="height: inherit;">
|
||||
<span class="dashboard-analysis-iconGroup">
|
||||
<a-dropdown :trigger="['click']" placement="bottomLeft">
|
||||
<a-icon type="ellipsis" class="ant-dropdown-link" />
|
||||
<a-menu slot="overlay">
|
||||
<a-menu-item>
|
||||
<a href="javascript:;">当日</a>
|
||||
</a-menu-item>
|
||||
<a-menu-item>
|
||||
<a href="javascript:;">当周</a>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</a-dropdown>
|
||||
</span>
|
||||
<div class="analysis-salesTypeRadio">
|
||||
<a-radio-group defaultValue="a">
|
||||
<a-radio-button value="a">当周</a-radio-button>
|
||||
<a-radio-button value="b">当日</a-radio-button>
|
||||
<a-radio-button value="c">当月</a-radio-button>
|
||||
<a-radio-button value="c">当</a-radio-button>
|
||||
</a-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<h4>副标题</h4>
|
||||
<div>
|
||||
<v-chart :force-fit="true" :height="405" :data="pieData" :scale="pieScale">
|
||||
<v-tooltip :showTitle="false" dataKey="item*percent" />
|
||||
<v-axis />
|
||||
<v-legend dataKey="item" />
|
||||
<v-pie position="percent" color="item" :vStyle="pieStyle" />
|
||||
<v-coord type="theta" :radius="0.75" :innerRadius="0.6" />
|
||||
</v-chart>
|
||||
</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment'
|
||||
import {
|
||||
ChartCard,
|
||||
MiniArea,
|
||||
MiniBar,
|
||||
MiniProgress,
|
||||
RankList,
|
||||
Bar,
|
||||
Trend,
|
||||
NumberInfo,
|
||||
MiniSmoothArea
|
||||
} from '@/components'
|
||||
import { baseMixin } from '@/store/app-mixin'
|
||||
|
||||
const barData = []
|
||||
const barData2 = []
|
||||
for (let i = 0; i < 12; i += 1) {
|
||||
barData.push({
|
||||
x: `${i + 1}月`,
|
||||
y: Math.floor(Math.random() * 1000) + 200
|
||||
})
|
||||
barData2.push({
|
||||
x: `${i + 1}月`,
|
||||
y: Math.floor(Math.random() * 1000) + 200
|
||||
})
|
||||
}
|
||||
|
||||
const rankList = []
|
||||
for (let i = 0; i < 7; i++) {
|
||||
rankList.push({
|
||||
name: '白鹭岛 ' + (i + 1) + ' 号店',
|
||||
total: 1234.56 - i * 100
|
||||
})
|
||||
}
|
||||
|
||||
const searchUserData = []
|
||||
for (let i = 0; i < 7; i++) {
|
||||
searchUserData.push({
|
||||
x: moment().add(i, 'days').format('YYYY-MM-DD'),
|
||||
y: Math.ceil(Math.random() * 10)
|
||||
})
|
||||
}
|
||||
const searchUserScale = [
|
||||
{
|
||||
dataKey: 'x',
|
||||
alias: '时间'
|
||||
},
|
||||
{
|
||||
dataKey: 'y',
|
||||
alias: '用户数',
|
||||
min: 0,
|
||||
max: 10
|
||||
}]
|
||||
|
||||
const searchData = []
|
||||
for (let i = 0; i < 50; i += 1) {
|
||||
searchData.push({
|
||||
index: i + 1,
|
||||
keyword: `搜索关键词-${i}`,
|
||||
count: Math.floor(Math.random() * 1000),
|
||||
range: Math.floor(Math.random() * 100),
|
||||
status: Math.floor((Math.random() * 10) % 2)
|
||||
})
|
||||
}
|
||||
|
||||
const DataSet = require('@antv/data-set')
|
||||
|
||||
const sourceData = [
|
||||
{ item: '家用电器', count: 32.2 },
|
||||
{ item: '食用酒水', count: 21 },
|
||||
{ item: '个护健康', count: 17 },
|
||||
{ item: '服饰箱包', count: 13 },
|
||||
{ item: '母婴产品', count: 9 },
|
||||
{ item: '其他', count: 7.8 }
|
||||
]
|
||||
|
||||
const pieScale = [{
|
||||
dataKey: 'percent',
|
||||
min: 0,
|
||||
formatter: '.0%'
|
||||
}]
|
||||
|
||||
const dv = new DataSet.View().source(sourceData)
|
||||
dv.transform({
|
||||
type: 'percent',
|
||||
field: 'count',
|
||||
dimension: 'item',
|
||||
as: 'percent'
|
||||
})
|
||||
const pieData = dv.rows
|
||||
|
||||
export default {
|
||||
name: 'Analysis',
|
||||
mixins: [baseMixin],
|
||||
components: {
|
||||
ChartCard,
|
||||
MiniArea,
|
||||
MiniBar,
|
||||
MiniProgress,
|
||||
RankList,
|
||||
Bar,
|
||||
Trend,
|
||||
NumberInfo,
|
||||
MiniSmoothArea
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
loading: true,
|
||||
rankList,
|
||||
|
||||
// 搜索用户数
|
||||
searchUserData,
|
||||
searchUserScale,
|
||||
searchData,
|
||||
|
||||
barData,
|
||||
barData2,
|
||||
|
||||
//
|
||||
pieScale,
|
||||
pieData,
|
||||
sourceData,
|
||||
pieStyle: {
|
||||
stroke: '#fff',
|
||||
lineWidth: 1
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
searchTableColumns () {
|
||||
return [
|
||||
{
|
||||
dataIndex: 'index',
|
||||
title: this.$t('dashboard.analysis.table.rank'),
|
||||
width: 90
|
||||
},
|
||||
{
|
||||
dataIndex: 'keyword',
|
||||
title: this.$t('dashboard.analysis.table.search-keyword')
|
||||
},
|
||||
{
|
||||
dataIndex: 'count',
|
||||
title: this.$t('dashboard.analysis.table.users')
|
||||
},
|
||||
{
|
||||
dataIndex: 'range',
|
||||
title: this.$t('dashboard.analysis.table.weekly-range'),
|
||||
align: 'right',
|
||||
sorter: (a, b) => a.range - b.range,
|
||||
scopedSlots: { customRender: 'range' }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
created () {
|
||||
setTimeout(() => {
|
||||
this.loading = !this.loading
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.extra-wrapper {
|
||||
line-height: 55px;
|
||||
padding-right: 24px;
|
||||
|
||||
.extra-item {
|
||||
display: inline-block;
|
||||
margin-right: 24px;
|
||||
|
||||
a {
|
||||
margin-left: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.antd-pro-pages-dashboard-analysis-twoColLayout {
|
||||
position: relative;
|
||||
display: flex;
|
||||
display: block;
|
||||
flex-flow: row wrap;
|
||||
}
|
||||
|
||||
.antd-pro-pages-dashboard-analysis-salesCard {
|
||||
height: calc(100% - 24px);
|
||||
|
||||
:deep(.ant-card-head) {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard-analysis-iconGroup {
|
||||
i {
|
||||
margin-left: 16px;
|
||||
color: rgba(0, 0, 0, .45);
|
||||
cursor: pointer;
|
||||
transition: color .32s;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
.analysis-salesTypeRadio {
|
||||
position: absolute;
|
||||
right: 54px;
|
||||
bottom: 12px;
|
||||
}</style>
|
||||
@@ -1,353 +0,0 @@
|
||||
<template>
|
||||
<page-header-wrapper @back="() => $router.go(-1)" :title="('订单号: ' + infos.order_no)" v-if="!loading">
|
||||
<!-- 订单详情 -->
|
||||
<template v-slot:content>
|
||||
<a-descriptions size="small">
|
||||
<!-- <a-descriptions-item label="实习顾问"> {{ infos.manager || '-' }} </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="法务助理"> {{ infos.tutor || '-' }} </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="法务老师"> {{ infos.teachers || '-' }} </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="协办人"> {{ infos.transactor || '-' }} </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="下单时间"> {{ infos.created_at || '-' }} </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="提交审核次数" v-if="(infos.logs_sum > 0)"> {{ infos.logs_sum || '-' }} 次 -->
|
||||
<!-- </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="驳回待审总数" v-if="infos.log_count">
|
||||
<a-tooltip>
|
||||
<template slot="title">驳回信息全部都确认后<br />才可以操作初审/复审通过!</template>
|
||||
<span count="">{{ infos.log_count || '-' }}</span>
|
||||
<a-icon type="info-circle" :style="{ fontSize: '15px', color: '#ff4d4f', padding: '0 0 0 6px' }" />
|
||||
</a-tooltip>
|
||||
</a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="订单状态" v-if="infos.status"> {{ infos.status.text || '-' }} </a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="指派签收地址">
|
||||
<span v-if="infos.can&&infos.can.edit_sign_address">
|
||||
<a @click="selectAddr(infos)" class="change">{{ infos.express ==''?'指派':'更改' }}地址 </a>
|
||||
<a @click="$router.push({ name: 'AddressCreate'})" class="plus">( <a-icon type="plus" /> )</a>
|
||||
</span>
|
||||
<span v-else>-</span>
|
||||
</a-descriptions-item> -->
|
||||
<!-- <a-descriptions-item label="资料签收地址" :span="2" v-if="infos.express != ''">{{ infos.express }}</a-descriptions-item>
|
||||
<a-descriptions-item label="查看邮寄进度" v-if="infos.express != ''">
|
||||
<router-link tag="a" target="_blank" :to="{ name: 'DetailLogistics', params: { id: infos.business_order_id } }"> 查看详情 </router-link>
|
||||
</a-descriptions-item> -->
|
||||
</a-descriptions>
|
||||
</template>
|
||||
<!-- 右上角审核功能 -->
|
||||
<template v-slot:extra>
|
||||
<!-- 复审按钮 -->
|
||||
<a-popconfirm
|
||||
v-if="infos.can && infos.can.first && infos.can.recheck"
|
||||
placement="bottomLeft"
|
||||
title="是否确认通过当前审核"
|
||||
ok-text="确认"
|
||||
cancel-text="取消"
|
||||
@confirm="firstPassActions">
|
||||
<a-button :loading="loading" type="primary">复审核通过</a-button>
|
||||
</a-popconfirm>
|
||||
|
||||
<!-- 初审按钮 -->
|
||||
<a-popconfirm
|
||||
v-if="infos.can && infos.can.first && !infos.can.recheck"
|
||||
placement="bottomLeft"
|
||||
title="是否确认通过当前审核"
|
||||
ok-text="确认"
|
||||
cancel-text="取消"
|
||||
@confirm="firstPassActions">
|
||||
<a-button :loading="loading" type="primary">初审核通过</a-button>
|
||||
</a-popconfirm>
|
||||
|
||||
<!-- 法务老师确认按钮展示 -->
|
||||
<a-popconfirm
|
||||
v-if="infos.can && infos.can.teacher_makesure"
|
||||
placement="bottomLeft"
|
||||
title="是否确认通过当前审核"
|
||||
ok-text="确认"
|
||||
cancel-text="取消"
|
||||
@confirm="teachearSure(infos)">
|
||||
<a-button :loading="loading" type="primary">法务老师确认复审</a-button>
|
||||
</a-popconfirm>
|
||||
</template>
|
||||
|
||||
<!-- 流程进度 -->
|
||||
<OrderSteps :steps="infos.steps" :stepsCount="stepsCount" />
|
||||
|
||||
<!-- 用户实名信息 -->
|
||||
<OrganizationRealName :info="infos.userbase" :orderId="$route.params.orderId + ''" :can="infos.can" />
|
||||
|
||||
<!-- 机构信息 -->
|
||||
<OrganizationInfo :institution="infos.institution" :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''" :can="infos.can" />
|
||||
|
||||
<!-- 跟进记录 -->
|
||||
<OrganizationInfoFollow :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''" :can="infos.can" :userLogs="userLogs" :systemLogs="systemLogs" />
|
||||
|
||||
<!-- 机构信息 -->
|
||||
<OrganizationSchemes :closeScheme="closeScheme" :schemes="schemes" :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''"/>
|
||||
|
||||
<!-- 服务包 -->
|
||||
<OrganizationServiceInfo :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''" :can="infos.can" :services="services" :remark="services.remark || ''" />
|
||||
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
firstPass, secondPass, teachermakesure
|
||||
} from '@/api/order'
|
||||
import {
|
||||
getOriganizationInfo
|
||||
} from '@/api/organization'
|
||||
import OrganizationRealName from '@/components/OrderDetailInfo/OrganizationRealNames.vue'
|
||||
import Services from '@/components/OrderDetailInfo/Services.vue'
|
||||
import BankList from '@/components/OrderDetailInfo/BankList.vue'
|
||||
import OrderSteps from '@/components/OrderDetailInfo/OrderSteps.vue'
|
||||
import SelctAddr from '@/views/address/modules/SelctAddr.vue'
|
||||
import OrganizationInfo from '@/components/OrderDetailInfo/OrganizationBankInfo.vue'
|
||||
import OrganizationInfoFollow from '@/components/OrderDetailInfo/OrganizationInfoFollow.vue'
|
||||
import OrganizationServiceInfo from '@/components/OrderDetailInfo/OrganizationServiceInfo.vue'
|
||||
import OrganizationSchemes from '@/components/OrderDetailInfo/OrganizationSchemes.vue'
|
||||
|
||||
export default {
|
||||
name: 'Detail',
|
||||
components: {
|
||||
OrganizationRealName, Services, BankList, OrderSteps, OrganizationInfo, OrganizationInfoFollow, OrganizationServiceInfo, OrganizationSchemes
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
infos: {},
|
||||
systemLogs: [], // 系统展示记录
|
||||
userLogs: [], // 用户展示记录
|
||||
schemes: [], // 预估方案
|
||||
services: {}, // 服务包
|
||||
id: '',
|
||||
loading: false,
|
||||
stepsCount: 0,
|
||||
IdCardVisible: false,
|
||||
closeScheme: {}
|
||||
}
|
||||
},
|
||||
activated () {
|
||||
this.getInfo()
|
||||
this.eventBus.$on('updateOrderInfo', (res) => {
|
||||
this.getInfo()
|
||||
})
|
||||
},
|
||||
deactivated () {
|
||||
this.eventBus.$off('updateOrderInfo')
|
||||
},
|
||||
filters: {
|
||||
statusFilter (status) {
|
||||
const statusMap = {
|
||||
'agree': '成功',
|
||||
'reject': '驳回'
|
||||
}
|
||||
return statusMap[status]
|
||||
},
|
||||
statusTypeFilter (type) {
|
||||
const statusTypeMap = {
|
||||
'agree': 'success',
|
||||
'reject': 'error'
|
||||
}
|
||||
return statusTypeMap[type]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 老师确认复审
|
||||
teachearSure (item) {
|
||||
teachermakesure(item.business_order_id).then(res => {
|
||||
this.$notification.success({
|
||||
message: '老师确认成功',
|
||||
description: '审核通过'
|
||||
})
|
||||
this.getInfo()
|
||||
}).catch(err => {
|
||||
this.$notification.error(err)
|
||||
})
|
||||
},
|
||||
// 初审复审操作
|
||||
firstPassActions () {
|
||||
// 复审
|
||||
if (this.infos.can.recheck) {
|
||||
if (this.infos.alert) {
|
||||
const key = `open${Date.now()}`
|
||||
this.$notification.open({
|
||||
message: '温馨提示',
|
||||
description: '该订单存在减免结清业务,请确认是否通过.',
|
||||
btn: h => {
|
||||
return h(
|
||||
'a-button',
|
||||
{
|
||||
props: {
|
||||
type: 'primary',
|
||||
size: 'small'
|
||||
},
|
||||
on: {
|
||||
click: () => {
|
||||
secondPass(this.$route.params.id).then(res => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '复审核通过'
|
||||
})
|
||||
this.getInfo()
|
||||
this.$notification.close(key)
|
||||
}).catch(err => {
|
||||
if (err.status_code === 400) {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
}
|
||||
this.$notification.close(key)
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
'确认通过'
|
||||
)
|
||||
},
|
||||
key,
|
||||
onClose: () => { }
|
||||
})
|
||||
} else {
|
||||
// 复审
|
||||
secondPass(this.$route.params.id).then(res => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '复审核通过'
|
||||
})
|
||||
this.getInfo()
|
||||
}).catch(err => {
|
||||
if (err.status_code === 400) {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// 初审
|
||||
firstPass(this.$route.params.id).then(res => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '初审核通过'
|
||||
})
|
||||
this.getInfo()
|
||||
}).catch(err => {
|
||||
if (err.status_code === 400) {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// 获取订单信息
|
||||
getInfo () {
|
||||
getOriganizationInfo(this.$route.params.itemId).then(res => {
|
||||
this.infos = res
|
||||
this.userLogs = res.user_logs.reverse() || []
|
||||
this.systemLogs = res.system_logs.reverse() || []
|
||||
this.schemes = res.schemes || []
|
||||
const services = res.service
|
||||
services.parent = res.parent
|
||||
services.remark = res.remark
|
||||
services.center = res.center
|
||||
this.services = services
|
||||
let stepsCount = 0
|
||||
res.steps.map(item => {
|
||||
if (item.status) {
|
||||
stepsCount = stepsCount + 1
|
||||
}
|
||||
})
|
||||
this.stepsCount = stepsCount
|
||||
this.closeScheme = res.closeScheme || '{}'
|
||||
})
|
||||
},
|
||||
// 选择邮寄地址操作
|
||||
selectAddr (order) {
|
||||
this.$dialog(
|
||||
SelctAddr,
|
||||
{
|
||||
order,
|
||||
on: {
|
||||
ok: () => {
|
||||
// this.eventBus.$emit('editRealName', { data: true })
|
||||
},
|
||||
cancel: () => {
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '指派签收地址',
|
||||
width: 500,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认',
|
||||
cancelText: '取消'
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.detail-layout {
|
||||
margin-left: 44px;
|
||||
}
|
||||
|
||||
.text {
|
||||
color: rgba(0, 0, 0, .45);
|
||||
}
|
||||
|
||||
.heading {
|
||||
color: rgba(0, 0, 0, .85);
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.no-data {
|
||||
color: rgba(0, 0, 0, .25);
|
||||
text-align: center;
|
||||
line-height: 64px;
|
||||
font-size: 16px;
|
||||
|
||||
i {
|
||||
font-size: 24px;
|
||||
margin-right: 16px;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.mobile {
|
||||
.detail-layout {
|
||||
margin-left: unset;
|
||||
}
|
||||
|
||||
.status-list {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
font-size: 10px;
|
||||
color: rgb(9, 100, 237);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.plus {
|
||||
padding-top: 8px;
|
||||
padding-left: 8px;
|
||||
color: rgb(9, 100, 237);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.change {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.count {
|
||||
color: #ff4d4f;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
@@ -28,15 +28,15 @@
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="24">
|
||||
<a-form-item label="用户手机号">
|
||||
<a-form-item label="用户手机">
|
||||
<a-input v-model="userQueryParam.username" placeholder="" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
|
||||
<a-button class="ml8" type="primary" @click="addPromissions">新增</a-button>
|
||||
<a-button
|
||||
class="ml8"
|
||||
@click="() => ((this.queryParam = { state: 'role' }), $refs.table.refresh(true))">重置</a-button>
|
||||
<a-button class="ml8" type="primary" @click="addPromissions">新增</a-button>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
@@ -246,7 +246,7 @@ export default {
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '新增权限',
|
||||
title: '新增用户',
|
||||
width: 500,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
|
||||
@@ -1,46 +1,18 @@
|
||||
<!-- 驳回原因客户姓名输入 -->
|
||||
<template>
|
||||
<a-form ref="form" v-bind="formItemLayout" :form="form">
|
||||
<a-form-item label="新增角色权限">
|
||||
<a-select
|
||||
<a-form-item label="登录账号">
|
||||
<a-input
|
||||
:maxLength="11"
|
||||
v-decorator="[
|
||||
'role',
|
||||
'username',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '请选择添加记录类型!', type: 'string' },
|
||||
{ required: true, message: '请输入添加登录账号!', type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
@change="handleRoleChange"
|
||||
placeholder="请选择添加记录类型">
|
||||
<a-select-option
|
||||
:value="item.key+''"
|
||||
v-for="item in permission"
|
||||
:key="item.key">
|
||||
<a-icon
|
||||
type="user"
|
||||
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="选择上级用户">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'parent_id',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '选择上级用户!', type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
placeholder="选择上级用户">
|
||||
<a-select-option
|
||||
:value="item.staff_id + ''"
|
||||
v-for="item in users"
|
||||
:key="item.staff_id">
|
||||
<a-icon
|
||||
type="user"
|
||||
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />{{ item.name }}({{ item.type }}){{ item.username }}</a-select-option>
|
||||
</a-select>
|
||||
placeholder="请输入添加登录账号!" />
|
||||
</a-form-item>
|
||||
<a-form-item label="用户姓名">
|
||||
<a-input
|
||||
@@ -55,19 +27,6 @@
|
||||
]"
|
||||
placeholder="请输入添加姓名!" />
|
||||
</a-form-item>
|
||||
<a-form-item label="手机号码">
|
||||
<a-input
|
||||
:maxLength="11"
|
||||
v-decorator="[
|
||||
'username',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '请输入添加手机号码!', type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
placeholder="请输入添加手机号码!" />
|
||||
</a-form-item>
|
||||
<a-form-item label="初始密码">
|
||||
<a-input
|
||||
:maxLength="6"
|
||||
|
||||
@@ -1,45 +1,6 @@
|
||||
<!-- 驳回原因客户姓名输入 -->
|
||||
<template>
|
||||
<a-form ref="form" v-bind="formItemLayout" :form="form">
|
||||
<a-form-item label="角色权限">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'role',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '请选择添加记录类型!', type: 'string' },
|
||||
],
|
||||
initialValue: defaultRoleName
|
||||
},
|
||||
]"
|
||||
@change="handleRoleChange"
|
||||
placeholder="请选择添加记录类型">
|
||||
<a-select-option :value="it.key + ''" v-for="it in permissions" :key="it.key">
|
||||
<a-icon
|
||||
type="user"
|
||||
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />{{ it.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="上级用户">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'parent_id',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '选择上级用户!', type: 'string' },
|
||||
],
|
||||
initialValue: defaultParentsName
|
||||
}
|
||||
]"
|
||||
placeholder="选择上级用户">
|
||||
<a-select-option :value="its.staff_id + ''" v-for="its in users" :key="its.staff_id">
|
||||
<a-icon
|
||||
type="user"
|
||||
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />
|
||||
{{ its.name }}({{ its.type }}){{ its.username }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="用户姓名">
|
||||
<a-input
|
||||
:rows="4"
|
||||
|
||||
@@ -1,291 +0,0 @@
|
||||
|
||||
<template>
|
||||
<page-header-wrapper
|
||||
:tab-active-key="tabActiveKey"
|
||||
:tab-change="handleTabChange"
|
||||
:tab-list="tabsList"
|
||||
:title="pageTitle"
|
||||
>
|
||||
<!-- <template v-slot:content>
|
||||
<a-descriptions size="small">
|
||||
<a-descriptions-item :label="item.tab" v-for="item in tabList" :key="item.key" >
|
||||
<div><a style="font-size:18px;font-weight:600;">{{ item.count }}</a> 单</div>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</template> -->
|
||||
<a-card :bordered="false">
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="6" :sm="24">
|
||||
<a-form-item label="订单编号">
|
||||
<a-input v-model="queryParam.order_no" placeholder="" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="24">
|
||||
<a-form-item label="申请用户">
|
||||
<a-input v-model="queryParam.nickname" placeholder="" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="24">
|
||||
<a-form-item label="法务老师">
|
||||
<a-input v-model="queryParam.teacher" placeholder="" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
|
||||
<a-button class="ml8" @click="() => ((this.queryParam = {state: tabActiveKey}), $refs.table.refresh(true))">重置</a-button>
|
||||
<!-- <DeriveButton :queryParam="queryParam" :listCount="listCount" /> -->
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.business_order_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1500, y: 1000 }"
|
||||
>
|
||||
<!-- 订单单号 -->
|
||||
<span slot="order_no" slot-scope="text, record">
|
||||
<router-link tag="a" target="_blank" :to="{ name: 'Detail', params: {id: record.business_order_id } }">
|
||||
{{ record.order_no }}
|
||||
</router-link>
|
||||
</span>
|
||||
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record">
|
||||
<user-info :info="{...record.user,sex:record.cert.sex}" />
|
||||
</div>
|
||||
<div slot="transactor" slot-scope="text, record">
|
||||
{{ record.transactor != '' ?record.transactor:'--' }}
|
||||
</div>
|
||||
<div slot="teachers" slot-scope="text, record">
|
||||
{{ record.teachers != '' ? record.teachers : '--' }}
|
||||
</div>
|
||||
|
||||
<!-- 业务类型 -->
|
||||
<span slot="one" slot-scope="text, record"><a> {{ record.item_type.one>0?'x '+record.item_type.one :'--' }}</a></span>
|
||||
<span slot="two" slot-scope="text, record"><a> {{ record.item_type.two>0?'x '+record.item_type.two :'--' }}</a></span>
|
||||
<span slot="price" slot-scope="text, record">¥ <span>{{ record.price }}</span></span>
|
||||
<span slot="total" slot-scope="text, record">¥<span>{{ record.total }}</span></span>
|
||||
|
||||
<!-- 订单状态 -->
|
||||
<span slot="status" slot-scope="text, record">
|
||||
<a-tag color="blue">{{ record.status.text }}</a-tag>
|
||||
</span>
|
||||
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<router-link tag="a" target="_blank" :to="{ name: 'Detail', params: { id: record.business_order_id } }"> 查看详情 </router-link>
|
||||
<span v-if="(record.can && record.can.teacher_makesure && queryParam.state === 'tea_make')">
|
||||
<a-divider type="vertical" />
|
||||
<a-popconfirm
|
||||
placement="bottomLeft"
|
||||
title="是否确认通过审核"
|
||||
ok-text="确认"
|
||||
cancel-text="取消"
|
||||
@confirm="teachearSure(record)"
|
||||
><a> 通过审核 </a></a-popconfirm>
|
||||
</span>
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import {
|
||||
getOrderList,
|
||||
teachermakesure,
|
||||
getOrdersCount
|
||||
} from '@/api/order'
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: '订单号',
|
||||
dataIndex: 'order_no',
|
||||
scopedSlots: { customRender: 'order_no' },
|
||||
align: 'center',
|
||||
width: 160,
|
||||
fixed: 'left'
|
||||
},
|
||||
{
|
||||
title: '申请用户',
|
||||
dataIndex: 'user',
|
||||
key: 'user',
|
||||
scopedSlots: { customRender: 'user' },
|
||||
width: 180,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '实习顾问',
|
||||
dataIndex: 'manager',
|
||||
key: 'manager',
|
||||
scopedSlots: { customRender: 'manager' },
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: '法务老师',
|
||||
dataIndex: 'teachers',
|
||||
key: 'teachers',
|
||||
scopedSlots: { customRender: 'teachers' },
|
||||
align: 'center',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: '业务类型',
|
||||
children: [
|
||||
{
|
||||
title: '信用卡业务',
|
||||
dataIndex: 'one',
|
||||
key: 'one',
|
||||
scopedSlots: { customRender: 'one' },
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '网贷业务',
|
||||
dataIndex: 'two',
|
||||
scopedSlots: { customRender: 'two' },
|
||||
key: 'two',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '总申请额度',
|
||||
dataIndex: 'price',
|
||||
scopedSlots: { customRender: 'price' },
|
||||
key: 'price',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '服务包总金额',
|
||||
dataIndex: 'total',
|
||||
scopedSlots: { customRender: 'total' },
|
||||
key: 'total',
|
||||
align: 'center'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '订单状态',
|
||||
dataIndex: 'status',
|
||||
scopedSlots: { customRender: 'status' },
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '下单时间',
|
||||
dataIndex: 'created_at',
|
||||
align: 'center',
|
||||
sorter: true
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
scopedSlots: { customRender: 'actions' },
|
||||
align: 'center',
|
||||
width: 180,
|
||||
fixed: 'right'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'Index',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
this.columns = columns
|
||||
return {
|
||||
// diff 待补价 | first 初审 | firstcheck 修改 | tea_make 待老师确认
|
||||
tabList: [
|
||||
{ key: 'first', tab: '初审中' },
|
||||
{ key: 'firstcheck', tab: '待修改' },
|
||||
{ key: 'diff', tab: '待补价' }
|
||||
// { key: 'tea_make', tab: '待老师确认' }
|
||||
],
|
||||
tabsList: [],
|
||||
tabActiveKey: 'first',
|
||||
pageTitle: '初审中',
|
||||
dataList: [],
|
||||
queryParam: {
|
||||
state: 'first',
|
||||
order_no: '',
|
||||
nickname: '',
|
||||
teacher: ''
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
getOrderList(requestParameters).then(res => {
|
||||
this.listCount = res.data.length
|
||||
})
|
||||
return getOrderList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
activated () {
|
||||
getOrdersCount({ state: this.tabList }).then(res => {
|
||||
this.tabsList = []
|
||||
res.map(item => {
|
||||
item.tab = item.tab + '(' + item.count + ')'
|
||||
this.tabsList.push(item)
|
||||
})
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
teachearSure (item) {
|
||||
teachermakesure(item.business_order_id).then(res => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '审核通过'
|
||||
})
|
||||
this.$refs.table.loadData()
|
||||
}).catch(err => {
|
||||
this.$notification.error(err)
|
||||
})
|
||||
},
|
||||
logistic (order) {
|
||||
this.$router.push({
|
||||
name: 'OrderLogistic',
|
||||
params: { orderId: order.order_no }
|
||||
})
|
||||
},
|
||||
handleTabChange (key) {
|
||||
this.tabActiveKey = key
|
||||
this.queryParam.state = key
|
||||
this.$refs.table.refresh(true)
|
||||
this.pageTitle = this.tabList.find((item) => item.key === key).tab
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
359
src/views/sales/Offline.vue
Normal file
359
src/views/sales/Offline.vue
Normal file
@@ -0,0 +1,359 @@
|
||||
|
||||
<template>
|
||||
<!-- 线下出货列表 -->
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="订单号码">
|
||||
<a-input v-model="queryParam.item_id" placeholder="订单号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="手机号码">
|
||||
<a-input v-model="queryParam.order_no" placeholder="购买人手机号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="真实姓名">
|
||||
<a-input v-model="queryParam.item_id" placeholder="购买人真实姓名" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="发货数量" has-feedback>
|
||||
<a-input v-model="queryParam.order_no" placeholder="发货数量" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="快递类型" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="快递类型">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="快递单号">
|
||||
<a-input v-model="queryParam.item_id" placeholder="快递单号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增线下出货</a-button>
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
<a-button
|
||||
v-if="exports_can"
|
||||
class="ml8"
|
||||
type="dashed"
|
||||
shape="round"
|
||||
icon="download"
|
||||
@click="exports"/>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<!-- 创建时间 -->
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onInfo(record)">查看详情</a>
|
||||
<!-- <a-divider type="vertical" /> -->
|
||||
<!-- <a class="ant-dropdown-link" @click="onEdit(record)">发货</a> -->
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
import EditSend from './widgets/EditSend.vue'
|
||||
import StockInfo from './widgets/StockInfo.vue'
|
||||
import AddOffline from './widgets/AddOffline.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '订单号',
|
||||
dataIndex: 'user22',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '收货人',
|
||||
dataIndex: 'created_at',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '发货数量',
|
||||
dataIndex: 'created_at1',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '订单信息',
|
||||
children: [
|
||||
{
|
||||
title: '状态',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '金额',
|
||||
dataIndex: 'name1',
|
||||
key: 'name1',
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
scopedSlots: { customRender: 'actions' },
|
||||
align: 'center',
|
||||
width: 160,
|
||||
fixed: 'right'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'Online',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
Info,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
// this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 新增用户
|
||||
onAddRole () {
|
||||
console.log('add....')
|
||||
const success = {
|
||||
title: '新增用户',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认新增',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
AddOffline,
|
||||
{
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 查看详情
|
||||
onInfo (item) {
|
||||
const success = {
|
||||
title: '立即发货',
|
||||
width: 1000,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
footer: '',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
StockInfo,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 发货
|
||||
onEdit (item) {
|
||||
console.log(item)
|
||||
const success = {
|
||||
title: '立即发货',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认发货',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
EditSend,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
335
src/views/sales/OnStock.vue
Normal file
335
src/views/sales/OnStock.vue
Normal file
@@ -0,0 +1,335 @@
|
||||
|
||||
<template>
|
||||
<!-- 线上进货 -->
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="订单号码">
|
||||
<a-input v-model="queryParam.item_id" placeholder="订单号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="手机号码">
|
||||
<a-input v-model="queryParam.order_no" placeholder="购买人手机号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="真实姓名">
|
||||
<a-input v-model="queryParam.item_id" placeholder="购买人真实姓名" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="进货数量" has-feedback>
|
||||
<a-input v-model="queryParam.order_no" placeholder="发货数量" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="快递类型" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="快递类型">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="快递单号">
|
||||
<a-input v-model="queryParam.item_id" placeholder="快递单号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<!-- <a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button> -->
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
<a-button
|
||||
v-if="exports_can"
|
||||
class="ml8"
|
||||
type="dashed"
|
||||
shape="round"
|
||||
icon="download"
|
||||
@click="exports"/>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<!-- 创建时间 -->
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onInfo(record)">查看详情</a>
|
||||
<!-- <a-divider type="vertical" /> -->
|
||||
<!-- <a class="ant-dropdown-link" @click="onEdit(record)">发货</a> -->
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
import EditSend from './widgets/EditSend.vue'
|
||||
import StockInfo from './widgets/StockInfo.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '订单号',
|
||||
dataIndex: 'order_no',
|
||||
align: 'center',
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
title: '收货人',
|
||||
dataIndex: 'tutor',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '进货数量',
|
||||
dataIndex: 'order_id',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '订单信息',
|
||||
children: [
|
||||
{
|
||||
title: '状态',
|
||||
dataIndex: 'status',
|
||||
key: 'status',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '金额',
|
||||
dataIndex: 'price',
|
||||
key: 'price',
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
scopedSlots: { customRender: 'actions' },
|
||||
align: 'center',
|
||||
width: 160,
|
||||
fixed: 'right'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'Online',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
Info,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
// this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 查看详情
|
||||
onInfo (item) {
|
||||
const success = {
|
||||
title: '立即发货',
|
||||
width: 1000,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
footer: '',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
StockInfo,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 发货
|
||||
onEdit (item) {
|
||||
console.log(item)
|
||||
const success = {
|
||||
title: '立即发货',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认发货',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
EditSend,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
335
src/views/sales/Online.vue
Normal file
335
src/views/sales/Online.vue
Normal file
@@ -0,0 +1,335 @@
|
||||
|
||||
<template>
|
||||
<!-- 线上零售 -->
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="订单号码">
|
||||
<a-input v-model="queryParam.item_id" placeholder="订单号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="手机号码">
|
||||
<a-input v-model="queryParam.order_no" placeholder="购买人手机号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="真实姓名">
|
||||
<a-input v-model="queryParam.item_id" placeholder="购买人真实姓名" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="发货数量" has-feedback>
|
||||
<a-input v-model="queryParam.order_no" placeholder="发货数量" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="快递类型" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="快递类型">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="快递单号">
|
||||
<a-input v-model="queryParam.item_id" placeholder="快递单号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<!-- <a-button class="ml8" type="primary" @click="onAdd">新增</a-button> -->
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
<a-button
|
||||
v-if="exports_can"
|
||||
class="ml8"
|
||||
type="dashed"
|
||||
shape="round"
|
||||
icon="download"
|
||||
@click="exports"/>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<!-- 创建时间 -->
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onInfo(record)">查看详情</a>
|
||||
<!-- <a-divider type="vertical" /> -->
|
||||
<!-- <a class="ant-dropdown-link" @click="onEdit(record)">发货</a> -->
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
import EditSend from './widgets/EditSend.vue'
|
||||
import StockInfo from './widgets/StockInfo.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '订单号',
|
||||
dataIndex: 'order_no',
|
||||
align: 'center',
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
title: '收货人',
|
||||
dataIndex: 'tutor',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '进货数量',
|
||||
dataIndex: 'order_id',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '订单信息',
|
||||
children: [
|
||||
{
|
||||
title: '状态',
|
||||
dataIndex: 'status',
|
||||
key: 'status',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '金额',
|
||||
dataIndex: 'price',
|
||||
key: 'price',
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
scopedSlots: { customRender: 'actions' },
|
||||
align: 'center',
|
||||
width: 160,
|
||||
fixed: 'right'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'Online',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
Info,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
// this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 查看详情
|
||||
onInfo (item) {
|
||||
const success = {
|
||||
title: '立即发货',
|
||||
width: 1000,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
footer: '',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
StockInfo,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 发货
|
||||
onEdit (item) {
|
||||
console.log(item)
|
||||
const success = {
|
||||
title: '立即发货',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认发货',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
EditSend,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
173
src/views/sales/widgets/AddOffline.vue
Normal file
173
src/views/sales/widgets/AddOffline.vue
Normal file
@@ -0,0 +1,173 @@
|
||||
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="收货人名">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'no1',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择收货人名!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择收货人名!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="收货地址">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'no2',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择收货地址!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择收货地址!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="购买数量">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'no3',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择购买数量!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择购买数量!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="发货方式">
|
||||
<a-select
|
||||
@change="typeChange"
|
||||
v-decorator="[
|
||||
'status',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择发货方式!`, type: 'string' }
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择发货方式!`">
|
||||
<a-select-option value="online">线上发货</a-select-option>
|
||||
<a-select-option value="offline">线下自提</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="快递类型" v-if="currentType === 'online'">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'tpe',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择快递类型!`, type: 'string' }
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择快递类型!`">
|
||||
<a-select-option value="shunfeng">顺丰速递</a-select-option>
|
||||
<a-select-option value="yunda">韵达快递</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="快递单号" v-if="currentType === 'online'">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'no',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择快递单号!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择快递单号!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="自提时间"
|
||||
v-if="currentType === 'offline'"
|
||||
>
|
||||
<a-date-picker
|
||||
v-decorator="[
|
||||
'time',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择自提时间!` },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择自提时间!`"
|
||||
style="width: 100%" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
import moment from 'moment'
|
||||
export default {
|
||||
name: 'EditSend',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false,
|
||||
currentType: ''
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
console.log(moment(values.time).format('YYYY-MM-DD'))
|
||||
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 切换发货方式(线上发货 自提发货)
|
||||
typeChange (e) {
|
||||
this.currentType = e
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
126
src/views/sales/widgets/EditSend.vue
Normal file
126
src/views/sales/widgets/EditSend.vue
Normal file
@@ -0,0 +1,126 @@
|
||||
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="发货类型">
|
||||
<a-select
|
||||
@change="typeChange"
|
||||
v-decorator="[
|
||||
'status',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择发货类型!`, type: 'string' }
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择发货类型!`">
|
||||
<a-select-option value="online">线上发货</a-select-option>
|
||||
<a-select-option value="offline">线下自提</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="快递类型" v-if="currentType === 'online'">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'tpe',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择快递类型!`, type: 'string' }
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择快递类型!`">
|
||||
<a-select-option value="shunfeng">顺丰速递</a-select-option>
|
||||
<a-select-option value="yunda">韵达快递</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="快递单号" v-if="currentType === 'online'">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'no',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择快递单号!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择快递单号!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="原因">
|
||||
<a-textarea
|
||||
:rows="4"
|
||||
v-decorator="[
|
||||
'remark',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '请输入详细的添加原因!', type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
placeholder="请输入详细的添加补差价原因" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'EditSend',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false,
|
||||
currentType: ''
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
typeChange (e) {
|
||||
this.currentType = e
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
119
src/views/sales/widgets/StockInfo.vue
Normal file
119
src/views/sales/widgets/StockInfo.vue
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<div>
|
||||
<a-descriptions title="用户信息" :column="4">
|
||||
<a-descriptions-item label="姓名" span="2">张冬雪</a-descriptions-item>
|
||||
<a-descriptions-item label="电话" span="2">1810000000</a-descriptions-item>
|
||||
<a-descriptions-item label="身份" span="2">创客</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线上出库 -->
|
||||
<a-descriptions title="线上出库" :column="4">
|
||||
<a-descriptions-item label="线上出库方式" span="2">线上零售、优惠券扣除库存</a-descriptions-item>
|
||||
<a-descriptions-item label="出库数量" span="2">12件</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线下出库 物流 -->
|
||||
<a-descriptions title="线下出库(线上发货)" :column="4">
|
||||
<a-descriptions-item label="出库数量" span="2">12件</a-descriptions-item>
|
||||
<a-descriptions-item label="发货状态" span="2">线上发货</a-descriptions-item>
|
||||
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
|
||||
<a-descriptions-item label="发货时间" span="2">2023-12-12 12:12:12</a-descriptions-item>
|
||||
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="收货人名" span="2">张冬雪</a-descriptions-item>
|
||||
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线下出库 自提 -->
|
||||
<a-descriptions title="线下出库(自提)" :column="4">
|
||||
<a-descriptions-item label="自提数量" span="2">12件</a-descriptions-item>
|
||||
<a-descriptions-item label="发货状态" span="2">自提</a-descriptions-item>
|
||||
<a-descriptions-item label="提货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线上 -->
|
||||
<a-descriptions title="入库(线上)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线下 线上发货-->
|
||||
<a-descriptions title="入库(线下发货)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
|
||||
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线下 自提-->
|
||||
<a-descriptions title="入库(线下发货)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="自提时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'StockInfo',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -6,50 +6,36 @@
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="订单号码">
|
||||
<a-input v-model="queryParam.order_no" placeholder="订单号码" />
|
||||
<a-form-item label="用户昵称">
|
||||
<a-input v-model="queryParam.item_id" placeholder="用户昵称" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="机构号码">
|
||||
<a-input v-model="queryParam.item_id" placeholder="机构号码" />
|
||||
<a-form-item label="用户手机">
|
||||
<a-input v-model="queryParam.order_no" placeholder="用户手机" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="机构名称">
|
||||
<a-input v-model="queryParam.institution" placeholder="机构名称" />
|
||||
<a-form-item label="顶点账号">
|
||||
<a-input v-model="queryParam.item_id" placeholder="顶点账号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="客户姓名">
|
||||
<a-input v-model="queryParam.nickname" placeholder="客户姓名" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="业务类型" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="业务类型">
|
||||
<a-form-item label="身份筛选" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="身份筛选">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="机构状态">
|
||||
<a-select v-model="queryParam.status" @change="onOrganizationChange" placeholder="机构状态">
|
||||
<a-select-option v-for="item in statusArray" :key="item.key" :value="item.key">{{ item.value }}</a-select-option>
|
||||
<a-form-item label="库变类型" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="库变类型">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<!-- <a-col :md="8" :sm="24" v-if="searchType">
|
||||
<a-form-item label="处理状态" >
|
||||
<a-select v-model="queryParam.dispose" placeholder="处理状态" @change="onDisposeChange">
|
||||
<a-select-option value="1">Option 1</a-select-option>
|
||||
<a-select-option value="2">Option 2</a-select-option>
|
||||
<a-select-option value="3">Option 3</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col> -->
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="下单时间">
|
||||
<a-form-item label="入库时间">
|
||||
<a-range-picker
|
||||
:placeholder="['开始日期', '结束日期']"
|
||||
v-model="queryParam.paid_at"
|
||||
@@ -57,26 +43,9 @@
|
||||
@change="onCreateChange" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="执行时间">
|
||||
<a-range-picker
|
||||
:placeholder="['开始日期', '结束日期']"
|
||||
v-model="queryParam.audit_at"
|
||||
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
|
||||
@change="onCarryChange" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="结案时间">
|
||||
<a-range-picker
|
||||
:placeholder="['开始日期', '结束日期']"
|
||||
v-model="queryParam.settle_at"
|
||||
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
|
||||
@change="onSettleChange" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<!-- <a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button> -->
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
<a-button
|
||||
v-if="exports_can"
|
||||
@@ -101,48 +70,16 @@
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1500, y: 1000 }">
|
||||
<!-- 机构详情 -->
|
||||
<span slot="order_no" slot-scope="text, record">
|
||||
<router-link tag="a" target="_blank" :to="{ name: 'OrganizationDetail', params: { orderId: record.order_id, itemId: record.order_item_id }}">
|
||||
{{ record.order_no }}
|
||||
</router-link>
|
||||
</span>
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record"><user-info :info="{ ...record.user, sex: record.cert.sex }" /></div>
|
||||
<div slot="transactor" slot-scope="text, record">{{ record.transactor != '' ? record.transactor : '--' }}</div>
|
||||
<div slot="teachers" slot-scope="text, record">{{ record.teachers != '' ? record.teachers : '--' }}</div>
|
||||
<span slot="institution_name" slot-scope="text, record">{{ record.institution_name || '-' }}</span>
|
||||
<!-- 业务类型 -->
|
||||
<span slot="price" slot-scope="text, record">¥ <span>{{ record.price }}</span></span>
|
||||
<!-- 机构状态 -->
|
||||
<span slot="status" slot-scope="text, record"><a-tag color="blue">{{ record.status }}</a-tag></span>
|
||||
<!-- 机构状态2 -->
|
||||
<span slot="status_two_text" slot-scope="text, record">
|
||||
<a-tag color="#87d068">{{ record.status_two_text }}</a-tag>
|
||||
<a-icon v-if="record.status_two.can_set" type="edit" :style="{ fontSize: '16px', color: '#87d068' }" @click="onEditStatus(record)" />
|
||||
</span>
|
||||
<!-- 创建时间 -->
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 申请时间 -->
|
||||
<span slot="audit_at" slot-scope="text, record">{{ record.audit_at || '-' }}</span>
|
||||
<!-- 结案时间 -->
|
||||
<span slot="settle_at" slot-scope="text, record">{{ record.settle_at || '-' }}</span>
|
||||
<!-- 处理时效 -->
|
||||
<span
|
||||
slot="prescription"
|
||||
slot-scope="text, record">{{ record.prescription > 0 ? record.prescription + '天' : '-' }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a-dropdown v-if="record.can_status" :trigger="['click']">
|
||||
<a class="ant-dropdown-link">操作<a-icon type="down" /></a>
|
||||
<a-menu slot="overlay">
|
||||
<a-menu-item v-for="item in record.update_status" :key="item.key" @click="actions(item.key, record)">
|
||||
<a>{{ `${item.title}` }}</a>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</a-dropdown>
|
||||
<a v-else>-</a>
|
||||
<a class="ant-dropdown-link" @click="onEdit(record)">查看明细</a>
|
||||
<a-divider type="vertical" />
|
||||
<a class="ant-dropdown-link" @click="onUpData(record)">更改库存</a>
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
@@ -154,130 +91,93 @@ import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
changeStatus,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
import EditStatus from './widgets/EditStatu.vue'
|
||||
import StockInfo from './widgets/StockInfo.vue'
|
||||
import onUpData from './widgets/onUpData.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '订单号码',
|
||||
dataIndex: 'order_no',
|
||||
scopedSlots: { customRender: 'order_no' },
|
||||
title: '用户ID',
|
||||
dataIndex: 'order_id',
|
||||
align: 'center',
|
||||
width: 160,
|
||||
fixed: 'left'
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
title: '机构号码',
|
||||
dataIndex: 'order_item_id',
|
||||
width: 100,
|
||||
align: 'center'
|
||||
},
|
||||
title: '当前用户信息',
|
||||
children: [
|
||||
{
|
||||
title: '机构名称',
|
||||
dataIndex: 'institution',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '机构名称2',
|
||||
scopedSlots: { customRender: 'institution_name' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '机构状态',
|
||||
scopedSlots: { customRender: 'status' },
|
||||
width: 160,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '机构状态2',
|
||||
scopedSlots: { customRender: 'status_two_text' },
|
||||
width: 160,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '客户姓名',
|
||||
dataIndex: 'user',
|
||||
key: 'user',
|
||||
width: 180,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '业务类型',
|
||||
dataIndex: 'business_type',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '欠款金额',
|
||||
dataIndex: 'price',
|
||||
scopedSlots: { customRender: 'price' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '匹配额度',
|
||||
dataIndex: 'allocation',
|
||||
scopedSlots: { customRender: 'allocation' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '法务老师',
|
||||
dataIndex: 'teacher',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '法务助理',
|
||||
dataIndex: 'tutor',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '下单时间',
|
||||
dataIndex: 'paid_at',
|
||||
title: '昵称',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
align: 'center',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
title: '账号',
|
||||
dataIndex: 'name23',
|
||||
key: 'name23',
|
||||
align: 'center',
|
||||
width: 140
|
||||
},
|
||||
{
|
||||
title: '身份',
|
||||
dataIndex: 'name2',
|
||||
key: 'name2',
|
||||
align: 'center',
|
||||
width: 140
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '库变类型(入库、出库)',
|
||||
dataIndex: 'user212',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '库变数量',
|
||||
dataIndex: 'user232',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '当前库存',
|
||||
dataIndex: 'user22',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '库变时间',
|
||||
dataIndex: 'created_at',
|
||||
width: 200,
|
||||
align: 'center',
|
||||
sorter: true
|
||||
},
|
||||
{
|
||||
title: '申请时间',
|
||||
dataIndex: 'audit_at',
|
||||
scopedSlots: { customRender: 'audit_at' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '结案时间',
|
||||
dataIndex: 'settle_at',
|
||||
scopedSlots: { customRender: 'settle_at' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '处理时效',
|
||||
dataIndex: 'prescription',
|
||||
scopedSlots: { customRender: 'prescription' },
|
||||
width: 140,
|
||||
align: 'center'
|
||||
}, {
|
||||
title: '操作',
|
||||
dataIndex: 'status10',
|
||||
dataIndex: 'status110',
|
||||
scopedSlots: { customRender: 'actions' },
|
||||
width: 180,
|
||||
align: 'center',
|
||||
width: 200,
|
||||
fixed: 'right'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'Index',
|
||||
name: 'DealerIndex',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
Info,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
@@ -302,9 +202,6 @@ export default {
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
getList(requestParameters).then(res => {
|
||||
this.listCount = res.data.length
|
||||
})
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
@@ -329,28 +226,12 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 更改机构状态
|
||||
actions (status, record) {
|
||||
console.log(status, record.order_item_id)
|
||||
const params = {
|
||||
status: status
|
||||
}
|
||||
changeStatus(record.order_item_id, params).then(res => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '机构状态修改成功'
|
||||
})
|
||||
this.$refs.table.loadData()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
},
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
this.canExports()
|
||||
// this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
@@ -422,19 +303,42 @@ export default {
|
||||
})
|
||||
}
|
||||
},
|
||||
// 修改状态2
|
||||
onEditStatus (item) {
|
||||
// 更改库存
|
||||
onUpData (item) {
|
||||
console.log(item)
|
||||
const success = {
|
||||
title: '修改机构状态2',
|
||||
title: '更改库存',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认修改',
|
||||
cancelText: '取消'
|
||||
okText: '知道了'
|
||||
}
|
||||
this.$dialog(
|
||||
EditStatus,
|
||||
onUpData,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 修改用户
|
||||
onEdit (item) {
|
||||
const success = {
|
||||
title: '库变详情',
|
||||
width: 1000,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
footer: '',
|
||||
okText: '知道了'
|
||||
}
|
||||
this.$dialog(
|
||||
StockInfo,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
308
src/views/stock/In.vue
Normal file
308
src/views/stock/In.vue
Normal file
@@ -0,0 +1,308 @@
|
||||
|
||||
<template>
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="入库时间">
|
||||
<a-range-picker
|
||||
:placeholder="['开始日期', '结束日期']"
|
||||
v-model="queryParam.paid_at"
|
||||
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
|
||||
@change="onCreateChange" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<a-card :bordered="false">
|
||||
<a-row>
|
||||
<a-col :sm="12" :xs="24">
|
||||
<info title="线上库存量剩余" value="222" :bordered="true" />
|
||||
</a-col>
|
||||
<a-col :sm="12" :xs="24">
|
||||
<info title="线下库存量剩余" value="333" :bordered="false" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
<br/>
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<!-- 创建时间 -->
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onEdit(record)">修改<a-icon type="down" /></a>
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
// import EditRole from './widgets/EditRole.vue'
|
||||
import AddRole from './widgets/AddRole.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '创客进货金额',
|
||||
dataIndex: 'user22',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '补充库存时间',
|
||||
dataIndex: 'created_at',
|
||||
align: 'center',
|
||||
sorter: true
|
||||
},
|
||||
{
|
||||
title: '补充库存数量',
|
||||
children: [
|
||||
{
|
||||
title: '线上',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '线下',
|
||||
dataIndex: 'name1',
|
||||
key: 'name1',
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
}
|
||||
// {
|
||||
// title: '操作',
|
||||
// dataIndex: 'status10',
|
||||
// scopedSlots: { customRender: 'actions' },
|
||||
// align: 'center',
|
||||
// width: 160,
|
||||
// fixed: 'right'
|
||||
// }
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'StockIn',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
Info,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
// this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 新增用户
|
||||
onAddRole () {
|
||||
console.log('add....')
|
||||
const success = {
|
||||
title: '新增用户',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认新增',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
AddRole,
|
||||
{
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 修改用户
|
||||
onEdit (item) {
|
||||
console.log(item)
|
||||
// const success = {
|
||||
// title: '修改用户',
|
||||
// width: 600,
|
||||
// maskClosable: true,
|
||||
// closable: true,
|
||||
// okText: '确认修改',
|
||||
// cancelText: '取消'
|
||||
// }
|
||||
// this.$dialog(
|
||||
// EditRole,
|
||||
// {
|
||||
// item,
|
||||
// on: {
|
||||
// ok: () => {
|
||||
// console.log('成功了。。')
|
||||
// this.$refs.table.loadData()
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// success
|
||||
// )
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
326
src/views/stock/Out.vue
Normal file
326
src/views/stock/Out.vue
Normal file
@@ -0,0 +1,326 @@
|
||||
|
||||
<template>
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="出库时间">
|
||||
<a-range-picker
|
||||
:placeholder="['开始日期', '结束日期']"
|
||||
v-model="queryParam.paid_at"
|
||||
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
|
||||
@change="onCreateChange" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<a-card :bordered="false">
|
||||
<a-row>
|
||||
<a-col :sm="12" :xs="24">
|
||||
<info title="线上库存量剩余" value="222" :bordered="true" />
|
||||
</a-col>
|
||||
<a-col :sm="12" :xs="24">
|
||||
<info title="线下库存量剩余" value="333" :bordered="false" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
<br/>
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<!-- 创建时间 -->
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onEdit(record)">修改<a-icon type="down" /></a>
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import Info from '@/views/home/components/Info'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
// import EditRole from './widgets/EditRole.vue'
|
||||
import AddRole from './widgets/AddRole.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '用户名',
|
||||
dataIndex: 'user22',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '出库时间',
|
||||
dataIndex: 'created_at',
|
||||
align: 'center',
|
||||
sorter: true
|
||||
},
|
||||
{
|
||||
title: '经销商进货明细',
|
||||
children: [
|
||||
{
|
||||
title: '线上数量',
|
||||
dataIndex: 'name33',
|
||||
key: 'name',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '线下数量',
|
||||
dataIndex: 'name1333',
|
||||
key: 'name1',
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '零售出库明细',
|
||||
children: [
|
||||
{
|
||||
title: '线上数量',
|
||||
dataIndex: 'name11',
|
||||
key: 'name11',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '线下数量',
|
||||
dataIndex: 'name12',
|
||||
key: 'name12',
|
||||
align: 'center'
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
}
|
||||
// {
|
||||
// title: '操作',
|
||||
// dataIndex: 'status10',
|
||||
// scopedSlots: { customRender: 'actions' },
|
||||
// align: 'center',
|
||||
// width: 160,
|
||||
// fixed: 'right'
|
||||
// }
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'StockOut',
|
||||
components: {
|
||||
Info,
|
||||
STable,
|
||||
UserInfo,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 新增用户
|
||||
onAddRole () {
|
||||
console.log('add....')
|
||||
const success = {
|
||||
title: '新增用户',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认新增',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
AddRole,
|
||||
{
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 修改用户
|
||||
onEdit (item) {
|
||||
console.log(item)
|
||||
// const success = {
|
||||
// title: '修改用户',
|
||||
// width: 600,
|
||||
// maskClosable: true,
|
||||
// closable: true,
|
||||
// okText: '确认修改',
|
||||
// cancelText: '取消'
|
||||
// }
|
||||
// this.$dialog(
|
||||
// EditRole,
|
||||
// {
|
||||
// item,
|
||||
// on: {
|
||||
// ok: () => {
|
||||
// console.log('成功了。。')
|
||||
// this.$refs.table.loadData()
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// success
|
||||
// )
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
76
src/views/stock/widgets/AddRole.vue
Normal file
76
src/views/stock/widgets/AddRole.vue
Normal file
@@ -0,0 +1,76 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="机构状态" style="padding-top:30px;">
|
||||
<a-select
|
||||
v-decorator="[
|
||||
'status',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请选择机构状态!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请选择机构状态!`"
|
||||
>
|
||||
<a-select-option v-for="(it) in item.status_two.texts" :key="it.key" :value="it.key+''">
|
||||
{{ it.title }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'AddRole',
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
119
src/views/stock/widgets/StockInfo.vue
Normal file
119
src/views/stock/widgets/StockInfo.vue
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<div>
|
||||
<a-descriptions title="用户信息" :column="4">
|
||||
<a-descriptions-item label="姓名" span="2">张冬雪</a-descriptions-item>
|
||||
<a-descriptions-item label="电话" span="2">1810000000</a-descriptions-item>
|
||||
<a-descriptions-item label="身份" span="2">创客</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线上出库 -->
|
||||
<a-descriptions title="线上出库" :column="4">
|
||||
<a-descriptions-item label="线上出库方式" span="2">线上零售、优惠券扣除库存</a-descriptions-item>
|
||||
<a-descriptions-item label="出库数量" span="2">12件</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线下出库 物流 -->
|
||||
<a-descriptions title="线下出库(线上发货)" :column="4">
|
||||
<a-descriptions-item label="出库数量" span="2">12件</a-descriptions-item>
|
||||
<a-descriptions-item label="发货状态" span="2">线上发货</a-descriptions-item>
|
||||
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
|
||||
<a-descriptions-item label="发货时间" span="2">2023-12-12 12:12:12</a-descriptions-item>
|
||||
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="收货人名" span="2">张冬雪</a-descriptions-item>
|
||||
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 出库 线下出库 自提 -->
|
||||
<a-descriptions title="线下出库(自提)" :column="4">
|
||||
<a-descriptions-item label="自提数量" span="2">12件</a-descriptions-item>
|
||||
<a-descriptions-item label="发货状态" span="2">自提</a-descriptions-item>
|
||||
<a-descriptions-item label="提货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线上 -->
|
||||
<a-descriptions title="入库(线上)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线下 线上发货-->
|
||||
<a-descriptions title="入库(线下发货)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
|
||||
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
|
||||
<!-- 入库 线下 自提-->
|
||||
<a-descriptions title="入库(线下发货)" :column="4">
|
||||
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
|
||||
<a-descriptions-item label="进货数量" span="2">99件</a-descriptions-item>
|
||||
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
|
||||
<a-descriptions-item label="自提时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'StockInfo',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
96
src/views/stock/widgets/onUpData.vue
Normal file
96
src/views/stock/widgets/onUpData.vue
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="新增库存" style="padding-top:10px;">
|
||||
<a-input-number
|
||||
style="width: 100%;"
|
||||
:min="1"
|
||||
:max="10"
|
||||
v-decorator="[
|
||||
'number',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请填写库存!`, type: 'number' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请填写库存!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="备注">
|
||||
<a-textarea
|
||||
:rows="4"
|
||||
v-decorator="[
|
||||
'remark',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: '请输入备注!', type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
placeholder="请输入备注!" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'EditRole',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
347
src/views/user/Index.vue
Normal file
347
src/views/user/Index.vue
Normal file
@@ -0,0 +1,347 @@
|
||||
|
||||
<template>
|
||||
<page-header-wrapper>
|
||||
<template v-slot:content>
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="用户昵称">
|
||||
<a-input v-model="queryParam.order_no" placeholder="用户昵称" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="用户昵称">
|
||||
<a-input v-model="queryParam.item_id" placeholder="用户昵称" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="顶点账号">
|
||||
<a-input v-model="queryParam.item_id" placeholder="顶点账号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="身份筛选" has-feedback>
|
||||
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="身份筛选">
|
||||
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
|
||||
<a-button class="ml8" type="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button>
|
||||
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
|
||||
<a-button
|
||||
v-if="exports_can"
|
||||
class="ml8"
|
||||
type="dashed"
|
||||
shape="round"
|
||||
icon="download"
|
||||
@click="exports"/>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 列表 -->
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(row) => row.order_item_id"
|
||||
showPagination="auto"
|
||||
bordered
|
||||
size="default"
|
||||
:scroll="{ x: 1200, y: 1000 }">
|
||||
<!-- 申请用户 实习顾问 法务老师 -->
|
||||
<div slot="user" slot-scope="text, record" style="color: #1890ff">
|
||||
<div>{{ record.user }}</div>
|
||||
</div>
|
||||
<!-- 创建时间 -->
|
||||
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
|
||||
<!-- 操作 -->
|
||||
<div slot="actions" slot-scope="text, record">
|
||||
<a class="ant-dropdown-link" @click="onEdit(record)">更改推荐人</a>
|
||||
</div>
|
||||
</s-table>
|
||||
</a-card>
|
||||
</page-header-wrapper>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { STable, UserInfo } from '@/components'
|
||||
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
|
||||
import { institutionsExports } from '@/api/storage'
|
||||
import moment from 'moment'
|
||||
import {
|
||||
getList,
|
||||
init,
|
||||
canExport
|
||||
} from '@/api/organization'
|
||||
import storage from 'store'
|
||||
import EditInvite from './widgets/EditInvite.vue'
|
||||
import AddRole from './widgets/AddRole.vue'
|
||||
|
||||
// 列表规格
|
||||
const columns = [
|
||||
{
|
||||
title: '用户id',
|
||||
dataIndex: 'order_id',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
title: '当前用户信息',
|
||||
children: [
|
||||
{
|
||||
title: '昵称',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
align: 'center',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
title: '真实姓名',
|
||||
dataIndex: 'name1',
|
||||
key: 'name1',
|
||||
align: 'center',
|
||||
width: 140
|
||||
},
|
||||
{
|
||||
title: '用户手机',
|
||||
dataIndex: 'name23',
|
||||
key: 'name23',
|
||||
align: 'center',
|
||||
width: 140
|
||||
},
|
||||
{
|
||||
title: '身份',
|
||||
dataIndex: 'name2',
|
||||
key: 'name2',
|
||||
align: 'center',
|
||||
width: 140
|
||||
},
|
||||
{
|
||||
title: '邀请码',
|
||||
dataIndex: 'name554',
|
||||
key: 'name5',
|
||||
align: 'center',
|
||||
width: 140
|
||||
}
|
||||
],
|
||||
width: 300,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '推荐人手机号',
|
||||
dataIndex: 'user22',
|
||||
width: 140,
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '注册时间',
|
||||
dataIndex: 'created_at',
|
||||
width: 200,
|
||||
align: 'center',
|
||||
sorter: true
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
dataIndex: 'status10',
|
||||
scopedSlots: { customRender: 'actions' },
|
||||
align: 'center',
|
||||
width: 160,
|
||||
fixed: 'right'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'UserIndex',
|
||||
components: {
|
||||
STable,
|
||||
UserInfo,
|
||||
DeriveButton
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
exports_can: false,
|
||||
columns,
|
||||
searchType: false, // 展示全部的搜索
|
||||
businessArray: [], // 业务类型
|
||||
statusArray: [], // 机构列表
|
||||
|
||||
queryParam: {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined // 结案时间
|
||||
},
|
||||
listCount: 0,
|
||||
loadData: (parameter) => {
|
||||
const requestParameters = Object.assign({}, parameter, this.queryParam)
|
||||
return getList(requestParameters)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route (to, from) {
|
||||
if (
|
||||
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
|
||||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
|
||||
) {
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 获取检索的基本样式
|
||||
init () {
|
||||
init().then(res => {
|
||||
this.statusArray = res.status // 机构状态
|
||||
this.businessArray = res.type // 业务类型
|
||||
this.canExports()
|
||||
})
|
||||
},
|
||||
// 更改创建时间
|
||||
onCreateChange (dates, dateStrings) {
|
||||
this.queryParam.paid_at = dateStrings
|
||||
},
|
||||
// 更改执行时间
|
||||
onCarryChange (dates, dateStrings) {
|
||||
this.queryParam.audit_at = dateStrings
|
||||
},
|
||||
// 更改结案时间
|
||||
onSettleChange (dates, dateStrings) {
|
||||
this.queryParam.settle_at = dateStrings
|
||||
},
|
||||
// 处理状态
|
||||
onDisposeChange (e) {
|
||||
this.queryParam.dispose = e
|
||||
},
|
||||
// 业务类型
|
||||
onBusinessChange (e) {
|
||||
this.queryParam.business_type_id = e
|
||||
},
|
||||
// 机构状态
|
||||
onOrganizationChange (e) {
|
||||
this.queryParam.status = e
|
||||
},
|
||||
// 搜索列表
|
||||
search () {
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 重置搜索列表
|
||||
resetSearch () {
|
||||
this.queryParam = {
|
||||
order_no: '', // 订单编号
|
||||
institution: '', // 机构名称
|
||||
item_id: '', // 机构编号
|
||||
nickname: '', // 下单人
|
||||
business_type_id: '', // 业务类型
|
||||
status: '', // 机构状态
|
||||
paid_at: undefined, // 下单时间
|
||||
audit_at: undefined, // 执行时间
|
||||
settle_at: undefined// 结案时间
|
||||
}
|
||||
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
|
||||
},
|
||||
// 机构是否能导出
|
||||
canExports () {
|
||||
console.log('canExports')
|
||||
canExport(storage.get('userid')).then(res => {
|
||||
this.exports_can = res.exports
|
||||
})
|
||||
},
|
||||
// 导出列表
|
||||
exports () {
|
||||
const params = this.queryParam
|
||||
params.audit_at = this.queryParam.audit_at || ''
|
||||
params.paid_at = this.queryParam.paid_at || ''
|
||||
params.settle_at = this.queryParam.settle_at || ''
|
||||
if (this.listCount > 0) {
|
||||
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
|
||||
for (const key in params) {
|
||||
downUrl = downUrl + '&' + key + '=' + params[key]
|
||||
}
|
||||
window.open(downUrl)
|
||||
} else {
|
||||
this.$notification.error({
|
||||
message: '温馨提醒',
|
||||
description: '数据为空不能下载!'
|
||||
})
|
||||
}
|
||||
},
|
||||
// 新增用户
|
||||
onAddRole () {
|
||||
console.log('add....')
|
||||
const success = {
|
||||
title: '新增用户',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认新增',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
AddRole,
|
||||
{
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
},
|
||||
// 修改用户
|
||||
onEdit (item) {
|
||||
console.log(item)
|
||||
const success = {
|
||||
title: '更改推荐人',
|
||||
width: 600,
|
||||
maskClosable: true,
|
||||
closable: true,
|
||||
okText: '确认变更',
|
||||
cancelText: '取消'
|
||||
}
|
||||
this.$dialog(
|
||||
EditInvite,
|
||||
{
|
||||
item,
|
||||
on: {
|
||||
ok: () => {
|
||||
console.log('成功了。。')
|
||||
this.$refs.table.loadData()
|
||||
}
|
||||
}
|
||||
},
|
||||
success
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ml8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
</style>
|
||||
98
src/views/user/widgets/AddRole.vue
Normal file
98
src/views/user/widgets/AddRole.vue
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="用户手机">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'phone',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请添加用户手机!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请添加用户手机!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="真实姓名">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'name',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请添加真实姓名!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请添加真实姓名!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="推荐人信息">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'invite',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请添加推荐人手机号!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请添加推荐人手机号!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'AddRole',
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
80
src/views/user/widgets/EditInvite.vue
Normal file
80
src/views/user/widgets/EditInvite.vue
Normal file
@@ -0,0 +1,80 @@
|
||||
|
||||
<!-- 驳回原因用户姓名输入 -->
|
||||
<template>
|
||||
<a-form
|
||||
ref="form"
|
||||
v-bind="formItemLayout"
|
||||
:form="form"
|
||||
>
|
||||
<a-form-item label="推荐人信息" style="padding-top:30px;">
|
||||
<a-input
|
||||
v-decorator="[
|
||||
'name',
|
||||
{
|
||||
rules: [
|
||||
{ required: true, message: `请输入推荐人信息!`, type: 'string' },
|
||||
]
|
||||
}
|
||||
]"
|
||||
:placeholder="`请输入推荐人信息!`"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { changeStatusTwo } from '@/api/organization'
|
||||
export default {
|
||||
name: 'EditRole',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
formItemLayout: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 14 }
|
||||
},
|
||||
loading: false
|
||||
}),
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
methods: {
|
||||
onOk () {
|
||||
return new Promise(resolve => {
|
||||
this.form.validateFields((errors, values) => {
|
||||
console.log(values)
|
||||
if (!errors) {
|
||||
console.log(values)
|
||||
const params = {
|
||||
status: values.status
|
||||
}
|
||||
changeStatusTwo(this.item.order_item_id, params).then((res) => {
|
||||
this.$notification.success({
|
||||
message: '成功',
|
||||
description: '修改成功'
|
||||
})
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
this.$notification.error({
|
||||
message: '失败',
|
||||
description: err.message
|
||||
})
|
||||
resolve(false)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user