Commit 0001c842 by frenck
parents f3857afc e5e05d45
module.exports = {
root: true,
env: {
node: true,
node: true
},
extends: [
'plugin:vue/essential',
'@vue/standard',
],
extends: ['plugin:vue/essential', '@vue/standard'],
parserOptions: {
parser: '@babel/eslint-parser',
parser: '@babel/eslint-parser'
},
rules: {
"space-before-function-paren": 0,
'space-before-function-paren': 0,
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'comma-dangle': ['error', 'always-multiline'],
'comma-dangle': 'off',
// eslint-disable-next-line no-dupe-keys
'space-before-function-paren': 'off',
indent: 'off',
'multiline-ternary': 'off',
"vue/multi-word-component-names":"off",
'vue/multi-word-component-names': 'off',
'eol-last': 0,
'vue/no-mutating-props':"off"
},
'vue/no-mutating-props': 'off'
}
}
{
"tabWidth": 2,
"singleQuote": true,
"printWidth": 180,
"printWidth": 80,
"semi": false,
"trailingComma": "none",
"bracketSpacing": true,
......
{
"singleQuote": true,
"semi": false,
"trailingComma": "all",
"printWidth": 60
}
......@@ -1045,10 +1045,6 @@ ul li {
padding: 0 8px;
}
.el-dialog__footer .el-button {
width: 100px;
}
.operate-popper {
min-width: 100px;
}
......
......@@ -5,7 +5,7 @@ import router from '@/router'
const axios = Axios.create({
baseURL: window.apiHostSetting.VUE_APP_BASE_URL + '/api',
timeout: 30 * 1000,
timeout: 30 * 1000
})
let HTTPNUM = 0
axios.interceptors.request.use((config) => {
......@@ -29,6 +29,8 @@ axios.interceptors.response.use(
Vue.prototype.$message({
type: 'error',
message: res.data.message,
offset: 200,
duration: 1000
})
sessionStorage.setItem('active', 'true')
// router
......@@ -43,6 +45,8 @@ axios.interceptors.response.use(
Vue.prototype.$message({
message: res.data.message,
type: 'warning',
offset: 200,
duration: 1000
})
return Promise.reject(res.data)
} else if (res.data.code === 403) {
......@@ -52,10 +56,12 @@ axios.interceptors.response.use(
Vue.prototype.$message({
type: 'error',
message: res.data.message,
offset: 200,
duration: 1000
})
router
.replace({
name: 'login',
name: 'login'
})
.catch((err) => {
console.log(err)
......@@ -65,12 +71,12 @@ axios.interceptors.response.use(
} else if (res.data.code === 500) {
Vue.prototype.$alert(
'<div style="max-height:500px;overflow:auto">' +
res.data.message +
'</div>',
res.data.message +
'</div>',
'错误提示',
{
dangerouslyUseHTMLString: true,
},
dangerouslyUseHTMLString: true
}
)
}
} else {
......@@ -78,26 +84,23 @@ axios.interceptors.response.use(
if (res.data) {
const fileReader = new FileReader()
fileReader.readAsText(res.data)
fileReader.onload = function(ev) {
fileReader.onload = function (ev) {
console.log(ev.target.result)
Vue.prototype.$alert(ev.target.result, '提示', {
confirmButtonText: '确定',
callback: () => {
},
callback: () => {}
})
}
} else {
Vue.prototype.$alert('请求参数有误', '提示', {
confirmButtonText: '确定',
callback: () => {
},
callback: () => {}
})
}
} else if (res.status === 404) {
Vue.prototype.$alert('请求不存在', '提示', {
confirmButtonText: '确定',
callback: () => {
},
callback: () => {}
})
}
}
......@@ -107,16 +110,16 @@ axios.interceptors.response.use(
(error) => {
Vue.prototype.$alert(error.message, 'Error', {
confirmButtonText: '确定',
callback: () => {
},
callback: () => {}
})
return Promise.reject(error)
},
}
)
export function get(url, params) {
return new Promise((resolve, reject) => {
axios.get(url, { params })
axios
.get(url, { params })
.then((res) => {
if (res.status === 200 && res.data) {
resolve(res.data)
......@@ -132,7 +135,8 @@ export function get(url, params) {
export function post(url, params, headers) {
return new Promise((resolve, reject) => {
axios.post(url, params, headers)
axios
.post(url, params, headers)
.then((res) => {
if (res.status === 200 && res.data) {
resolve(res.data)
......
import axios from '../axios'
export function listTableData(data) {
return axios.post('/order/loseOrderInfo/list_page', data)
}
export function listShopPlateformData() {
return axios.get('/order/loseOrderInfo/getPlatform')
}
export function deleteData(data) {
return axios.post('/order/loseOrderInfo/deleteLoseOrderInfoByIds?ids=' + data)
}
......@@ -36,6 +36,7 @@ import {
Tooltip,
ColorPicker,
CheckboxGroup,
Popover,
} from 'element-ui'
const components = [
......@@ -71,6 +72,7 @@ const components = [
Tooltip,
ColorPicker,
CheckboxGroup,
Popover,
]
export default {
......
......@@ -89,6 +89,40 @@ const routes = [
name: 'system_management',
meta: { title: '客户管理' },
},
{
path: '/saas/logistics/transporters',
component: () => import('@/views/system/transporters.vue'),
name: 'system_transporters',
meta: { title: '运输商列表' },
},
{
path: '/saas/category-style',
component: () => import('@/views/system/category-style.vue'),
name: 'system_category_style',
meta: { title: '类别风格' },
},
{
path: '/saas/sku-sort',
component: () => import('@/views/system/sku-sort.vue'),
name: 'system_sku-sort',
meta: {
title: '属性类管理',
},
},
{
path: '/saas/sku-manage',
component: () => import('@/views/system/sku-manage.vue'),
name: 'system_sku-manage',
meta: {
title: '属性值管理',
},
},
{
path: '/operation/lossOrder',
component: () => import('@/views/operation/lossOrder/index.vue'),
name: 'system_management',
meta: { title: '丢单管理' },
},
],
},
]
......
<template>
<div class="saas-manage card">
<div class="search">
<el-form
:model="searchForm"
size="small"
:inline="true"
>
<el-form-item label="所属平台">
<el-select
style="width: 120px"
filterable
clearable
v-model="searchForm.salesPlatform"
placeholder="请选择所属平台"
>
<el-option
v-for="(value,
index) in plateformList"
:key="index"
:value="value"
:label="index"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="三方平台订单ID">
<el-input
style="width: 160px"
clearable
v-model="searchForm.orderThirdId"
placeholder="请输入三方平台订单ID"
></el-input>
</el-form-item>
<el-form-item label="店铺单号">
<el-input
style="width: 140px"
clearable
v-model="searchForm.shopNumber"
placeholder="请输入店铺单号"
></el-input>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
style="width: 360px"
v-model="searchForm.createTimeText"
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type="primary"
size="small"
icon="el-icon-search"
@click="search"
>查询</el-button
>
</el-form-item>
<el-form-item>
<el-button
type="danger"
size="small"
icon="el-icon-delete"
@click="deleteData()"
>删除</el-button
>
</el-form-item>
</el-form>
</div>
<div class="table-wrap" v-loading="loading">
<el-table
ref="table"
:data="manageData"
border
width="100%"
height="100%"
:highlight-current-row="true"
@selection-change="handleSelectionChange"
@row-click="rowClick"
header-row-class-name="header-row-class-name"
>
<el-table-column type="expand">
<template slot-scope="props">
<el-form label-position="right" inline class="demo-table-expand" style="display: none;">
<el-form-item label="所属平台">
<span>{{ props.row.salesPlatform }}</span>
</el-form-item>
<el-form-item label="三方平台订单ID">
<span>{{ props.row.orderThirdId }}</span>
</el-form-item>
<el-form-item label="店铺单号">
<span>{{ props.row.shopNumber }}</span>
</el-form-item>
</el-form>
<el-form label-position="right" label-width="100px" size="medium" class="demo-table-expand">
<el-form-item label="失败原因:">
<span style="background-color: #f8f8f9;display: block;padding: 0 13px 0 13px;">{{ props.row.failReason }}</span>
</el-form-item>
</el-form>
</template>
</el-table-column>
<el-table-column
type="selection"
width="55"
header-align="center"
align="center"
>
</el-table-column>
<el-table-column
label="序号"
type="index"
width="50"
align="center"
header-align="center"
>
</el-table-column>
<el-table-column
label="所属平台"
prop="salesPlatform"
header-align="center"
align="center"
width="180"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column
label="三方平台订单ID"
prop="orderThirdId"
width="200"
header-align="center"
>
</el-table-column>
<el-table-column
label="店铺单号"
prop="shopNumber"
header-align="center"
align="center"
width="200"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column
label="失败原因"
prop="failReason"
header-align="center"
align="center"
min-width="160"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column
label="创建时间"
prop="createTime"
header-align="center"
align="center"
width="160"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column
label="操作"
header-align="center"
align="center"
width="55"
fixed="right"
>
<template slot-scope="scope">
<i
style="cursor: pointer;color:#F56C6C"
class="el-icon-delete"
@click="deleteData(scope.row)"
></i>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<el-pagination
layout="sizes, total, prev, pager, next, jumper"
background
:total="total"
:page-size="pageSize"
:current-page="currentPage"
@size-change="sizeChange"
@current-change="onCurrentChange"
>
</el-pagination>
</div>
</div>
</template>
<script>
import {
listTableData,
deleteData, // eslint-disable-line no-unused-vars
listShopPlateformData,
} from '@/common/api/operation/lossOrder'
export default {
name: 'lossOrderManage',
data() {
return {
manageData: [],
searchForm: {},
total: 0,
pageSize: 50,
currentPage: 1,
loading: false,
selection: [],
plateformList: [],
}
},
async created() {
this.getList()
this.getShopPlateform()
},
methods: {
async getList() {
this.loading = true
try {
const res = await listTableData(
{
...this.searchForm,
createTimeStart: this.searchForm.createTimeText && this.searchForm.createTimeText[0],
createTimeEnd: this.searchForm.createTimeText && this.searchForm.createTimeText[1],
currentPage: this.currentPage,
pageSize: this.pageSize,
},
)
this.manageData = res.data.records
this.total = res.data.total
} catch (e) {
console.error(e)
} finally {
this.loading = false
}
},
async getShopPlateform() {
const res = await listShopPlateformData()
this.plateformList = res.data
},
search() {
this.getList()
},
async deleteData(row) {
let ids = []
let arr = [] // eslint-disable-line no-unused-vars
if (row) {
arr.push(row)
} else {
arr = this.selection
}
console.log(this.selection)
if (arr.length === 0) {
this.$message.error('请至少选择一条记录')
return
}
try {
await this.$confirm('确认删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
} catch {
return
}
ids = this.selection.map((item) => item.id)
ids = ids.join()
const l = this.$loading({
background: 'rgba(0, 0, 0, 0.3)',
})
try {
await deleteData(ids)
this.selection = []
this.getList()
} catch (e) {
console.error(e)
} finally {
l.close()
}
},
handleSelectionChange(selection) {
this.selection = selection
},
onCurrentChange(currentPage) {
this.currentPage = currentPage
this.getList()
},
sizeChange(pageSize) {
this.pageSize = pageSize
this.getList()
},
rowClick(row) {
if (
this.selection.length === 1 &&
this.selection[0] === row
) {
this.selection = []
this.$refs.table.clearSelection()
} else {
this.selection = [row]
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row, true)
}
},
},
}
</script>
<style lang="scss" scoped>
.saas-manage {
height: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
&::v-deep {
.el-table .el-table__cell {
padding: 6px 0;
}
.el-input__inner {
padding: 0 4px;
}
.el-input--small .el-input__inner {
height: 30px;
line-height: 30px;
}
.el-icon-time:before {
content: '';
}
.el-dialog__footer {
text-align: center;
.el-button--small {
padding: 9px 50px;
}
}
.el-dialog__body {
padding: 10px 20px;
}
.el-icon-edit:before {
color: #ff9800;
font-weight: bold;
}
.el-range-editor--small .el-range-separator {
line-height: 31px;
}
.header-row-class-name th {
background-color: #f8f8f9;
}
.el-input-group__append {
padding-left: 0;
}
}
}
.search {
background: #fff;
}
.table-wrap {
background: #fff;
flex: 1;
overflow: hidden;
}
.demo-table-expand {
font-size: 0;
//padding: 0 20px 0 20px;
}
.el-form-item__label{
width: 90px!important;
color: #99a9bf!important;
}
</style>
<template>
<div class="wrap card">
<div class="search">
<el-form
:model="searchForm"
ref="form"
:inline="true"
size="small"
v-enter-submit="search"
@submit.native.prevent
>
<el-form-item label="名称">
<el-input
style="width: 300px"
v-model="searchForm.name"
placeholder="请输入名称&中文名称&英文名称"
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="search"
>查询</el-button
>
</el-form-item>
</el-form>
</div>
<div class="table-wrap">
<table-view
:sourceData="sourceData"
:tableColumns="tableColumns"
></table-view>
<!-- <vxe-table
border
ref="xTable"
height="100%"
show-overflow
size="mini"
@scroll="scrollChange"
:data="sourceData">
<vxe-column
v-for="(config, index) in tableColumns"
:key="index"
:width="config.width"
:type="config.type"
:field="config.key"
:title="config.label"></vxe-column>
</vxe-table> -->
</div>
<div class="pagination">
<el-pagination
layout="sizes, total, prev, pager, next, jumper"
background
:total="paginationOptions.total"
:page-size="paginationOptions.pageSize"
:current-page="paginationOptions.currentPage"
@size-change="sizeChange"
@current-change="onCurrentChange"
>
</el-pagination>
</div>
</div>
</template>
<script>
import axios from '../../common/api/axios'
import TableView from '@/common/components/base/tableView.vue'
export default {
name: 'logistics_transporters',
components: {
TableView,
},
data() {
return {
sourceData: [],
searchForm: {},
isLoad: false,
bodyHeight: 0,
currentPage: 1,
sourceDataTotal: 0,
paginationOptions: {
total: 0,
pageSize: 100,
currentPage: 1,
},
}
},
computed: {
tableColumns() {
return [
{ label: '编码', key: 'code' },
{ label: '中文名称', key: 'nameCn', align: 'left' },
{ label: '英文名称', key: 'nameEn', align: 'left' },
{ label: '港澳名称', key: 'nameHk', align: 'left' },
{ label: '链接', key: 'url', align: 'left' },
]
},
},
mounted() {
this.getlist()
},
methods: {
onCurrentChange(currentPage) {
this.paginationOptions.currentPage = currentPage
this.getlist()
},
sizeChange(pageSize) {
this.paginationOptions.pageSize = pageSize
this.getlist()
},
search() {
this.getlist()
},
scrollChange({ scrollTop, scrollHeight, bodyHeight }) {
if (!this.bodyHeight) {
this.bodyHeight = bodyHeight
}
if (scrollTop + this.bodyHeight >= scrollHeight) {
if (!this.isLoad) {
this.isLoad = true
this.currentPage++
if (
this.sourceData.length >= this.sourceDataTotal
) {
return
}
this.getlist(true)
}
}
},
getlist() {
const { pageSize, currentPage } =
this.paginationOptions
axios
.post('LogisticsCarrierCode/list_page', {
pageSize,
currentPage,
...this.searchForm,
}, {
baseURL: '/api/manage/rest',
})
.then((res) => {
this.sourceData = res.data.records
this.paginationOptions.total = res.data.total
})
},
},
}
</script>
<style scoped>
.wrap {
height: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
}
.table-wrap {
background: #fff;
flex: 1;
overflow: hidden;
}
.table_wrap {
vertical-align: middle;
}
.table_wrap >>> .vxe-checkbox--label {
padding-left: 0;
}
.table_wrap >>> .vxe-header--column.tablecolgroup,
.table_wrap
>>> .vxe-header--column.col--ellipsis.tablecolgroup {
height: 22px !important;
}
.table_wrap >>> .vxe-cell {
/* max-height: 30px !important; */
padding-left: 5px;
padding-right: 5px;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment