Browse Source

no message

develop
parent
commit
d1a1bd0f0a
8 changed files with 139 additions and 58 deletions
  1. +1
    -1
      .env
  2. +3
    -0
      src/layouts/tabs/TabsView.vue
  3. +64
    -29
      src/pages/agent/list.vue
  4. +1
    -1
      src/pages/login/i18n.js
  5. +34
    -16
      src/pages/order/list.vue
  6. +24
    -3
      src/services/Common.js
  7. +3
    -8
      src/services/Merchants/Merchants.js
  8. +9
    -0
      src/utils/axios-interceptors.js

+ 1
- 1
.env View File

@@ -1,5 +1,5 @@
VUE_APP_PUBLIC_PATH=/ VUE_APP_PUBLIC_PATH=/
VUE_APP_NAME=捷配管理后台
VUE_APP_NAME=捷配审单云管理后台
VUE_APP_ROUTES_KEY=admin.routes VUE_APP_ROUTES_KEY=admin.routes
VUE_APP_PERMISSIONS_KEY=admin.permissions VUE_APP_PERMISSIONS_KEY=admin.permissions
VUE_APP_ROLES_KEY=admin.roles VUE_APP_ROLES_KEY=admin.roles


+ 3
- 0
src/layouts/tabs/TabsView.vue View File

@@ -328,6 +328,9 @@ export default {
</script> </script>
<style lang="less"> <style lang="less">
a.link{font-size:16px; line-height:2em; display: inline-block} a.link{font-size:16px; line-height:2em; display: inline-block}
.font2h{text-overflow:-o-ellipsis-lastline; overflow:hidden; text-overflow:ellipsis; display:-webkit-box!important; -webkit-line-clamp:2; -webkit-box-orient:vertical; word-break: break-all;}
.font3h{-webkit-line-clamp:3;}
.fontovdd{display:block; overflow:hidden; text-overflow:ellipsis; -o-text-overflow:ellipsis; white-space:nowrap;}
.formSa .ant-form-item{margin-bottom:.5em} .formSa .ant-form-item{margin-bottom:.5em}
.tabbn .ant-btn{padding:0 .5em; color:#f90} .tabbn .ant-btn{padding:0 .5em; color:#f90}
.tabbn .ant-btn:hover{opacity:.4} .tabbn .ant-btn:hover{opacity:.4}


+ 64
- 29
src/pages/agent/list.vue View File

@@ -2,21 +2,32 @@
<div class="boxMain"> <div class="boxMain">
<inc-search :listInput="listInput" :loadSoBn="tableLoad" :onSearch="filterSearch"></inc-search> <inc-search :listInput="listInput" :loadSoBn="tableLoad" :onSearch="filterSearch"></inc-search>
<a-table class="tablesa" :columns="tableColumns" :data-source="tableData" :rowKey="lists => lists.id" :pagination="pagination" :loading="tableLoad" @change="filterSearch"> <a-table class="tablesa" :columns="tableColumns" :data-source="tableData" :rowKey="lists => lists.id" :pagination="pagination" :loading="tableLoad" @change="filterSearch">
<span slot="state" slot-scope="text">{{text==1?'启用':'禁用'}}</span>
<div slot="state" slot-scope="text"><span :style="'color:#'+(text==2?'f30':'f90')">{{text==1?'启用':'禁用'}}</span></div>
<span slot="type" slot-scope="text">{{getResSelects('platformType',text)}}</span>
<div slot="id" slot-scope="text,record,index"> <div slot="id" slot-scope="text,record,index">
<a-spin :spinning="record.load"> <a-spin :spinning="record.load">
<a-space> <a-space>
<a-button @click="showNEAgent(record)">修改</a-button>
<a-button type="primary" v-if="record.state==2" @click="fnSetState(record,index)">启用</a-button> <a-button type="primary" v-if="record.state==2" @click="fnSetState(record,index)">启用</a-button>
<a-button type="primary" v-else @click="fnSetState(record,index)">禁用</a-button> <a-button type="primary" v-else @click="fnSetState(record,index)">禁用</a-button>
<a-button @click="fnRelease(record,index)">发布</a-button> <a-button @click="fnRelease(record,index)">发布</a-button>
<a-popconfirm title="确定删除吗?" ok-text="Yes" cancel-text="No" @confirm="fnDel(record,index)"><a-button type="danger" >删除</a-button></a-popconfirm>
<a-popconfirm title="确定删除吗?" ok-text="Yes" cancel-text="No" @confirm="fnDel(record,index)"><a-button type="danger"><a-icon type="delete" /></a-button></a-popconfirm>
</a-space> </a-space>
</a-spin> </a-spin>
</div> </div>
</a-table> </a-table>
<a-modal title="新增平台" :visible="showNA" :confirm-loading="confirmNewAgent" @ok="newAgent" @cancel="showNA=false">
<a-form-model v-model="formNA" v-bind="layout">
<a-form-model-item label="平台描述"><a-input v-model="formNA.description"/></a-form-model-item>
<a-modal :title="formNA.id?'修改平台信息':'新增平台'" :visible="showNA" :confirm-loading="confirmNewAgent" @ok="NEAgent" @cancel="showNA=false">
<a-form-model :model="formNA" v-bind="layout" ref="ruleForm" :rules="rules">
<a-form-model-item label="平台类型" prop="type">
<a-select v-model="formNA.type">
<a-select-option value="">请选择平台类型</a-select-option>
<a-select-option v-for="(li,index) in platformType" :key="index" :value="li.value">{{li.text}}</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="平台描述" prop="description"><a-input v-model="formNA.description" placeholder="描述"/></a-form-model-item>
<a-form-model-item label="登录帐号" prop="userName"><a-input v-model="formNA.userName" placeholder="登录此平台用户名"/></a-form-model-item>
<a-form-model-item label="登录密码" prop="password"><a-input v-model="formNA.password" placeholder="登录此平台密码" /></a-form-model-item>
<a-form-model-item label="链接地址" prop="url"><a-input v-model="formNA.url" placeholder="http"/></a-form-model-item>
</a-form-model> </a-form-model>
</a-modal> </a-modal>
</div> </div>
@@ -27,11 +38,11 @@ import IncSearch from "@/pages/Common/search";
import { import {
delMerchants, delMerchants,
MerchantsList, MerchantsList,
NewMerchants,
NEMerchants,
pubMerchantsAccess, pubMerchantsAccess,
setMerchantsState setMerchantsState
} from "@/services/Merchants/Merchants"; } from "@/services/Merchants/Merchants";
import {formatDate} from "@/services/Common";
import {formatDate, getRandCode,resSelects} from "@/services/Common";
export default { export default {
name: 'agentList', name: 'agentList',
components: {IncSearch}, components: {IncSearch},
@@ -40,7 +51,7 @@ export default {
listInput:[ listInput:[
{type:'input',name:'code',title:'关键词',value:'',alt:'全匹配'}, {type:'input',name:'code',title:'关键词',value:'',alt:'全匹配'},
// {type:'input',name:'name',title:'商户名称',value:'',alt:'模糊匹配'}, // {type:'input',name:'name',title:'商户名称',value:'',alt:'模糊匹配'},
{type:'button',name:'newAgent',title:'新增平台',value:'',alt:'',fn:this.showNewAgent},
{type:'button',name:'newAgent',title:'新增平台',value:'',alt:'',fn:this.showNEAgent},
], ],
pagination: { pagination: {
pageSize: 10, pageSize: 10,
@@ -49,14 +60,24 @@ export default {
}, },
tableLoad: false, tableLoad: false,
tableColumns:[ tableColumns:[
// {title: '商户ID',dataIndex: 'id',key: 'id',},
{title: '平台类型',dataIndex: 'type',key: 'type',width:'100px',scopedSlots: { customRender: 'type' },},
{title: '状态',dataIndex: 'state',key: 'state',align:'center',width:'100px',scopedSlots: { customRender: 'state' },},
{title: '平台描述',dataIndex: 'description',key: 'description',scopedSlots: { customRender: 'description' },}, {title: '平台描述',dataIndex: 'description',key: 'description',scopedSlots: { customRender: 'description' },},
{title: '状态',dataIndex: 'state',key: 'state',scopedSlots: { customRender: 'state' },},
// {title: '邮箱',dataIndex: 'email',key: 'email'},
{title: '帐号',dataIndex: 'userName',key: 'userName',align:'center'},
{title: '登录链接',dataIndex: 'url',key: 'url'},
{title: '操作',width:'300px',dataIndex: 'id',key: 'id',scopedSlots: { customRender: 'id' },}, {title: '操作',width:'300px',dataIndex: 'id',key: 'id',scopedSlots: { customRender: 'id' },},
], ],
tableData:[],showNA:false,confirmNewAgent:false, tableData:[],showNA:false,confirmNewAgent:false,
formNA:{description:''},
platformType:[],
formNA_b:{description:'',userName:'',password:'',type:'',url:''},
formNA:{},
rules: {
type: [{required: true, message: '请选择平台类型!', trigger: 'change' },],
description: [{required: true, message: '请填写平台描述!', trigger: 'blur' },],
userName: [{required: true, message: '请填写登录此平台用户名!', trigger: 'blur' },],
password: [{required: true, message: '请填写登录此平台密码!', trigger: 'blur' },],
url: [{required: true, message: '请填写平台链接地址!', trigger: 'blur' },],
},
layout: { layout: {
labelCol: { span:7 }, labelCol: { span:7 },
wrapperCol: { span:12 }, wrapperCol: { span:12 },
@@ -100,25 +121,32 @@ export default {
this.filterSearch(); this.filterSearch();
}) })
}, },
showNewAgent(){
showNEAgent(arr){
this.platformType = resSelects('platformType');
if (arr?.id){
this.formNA = {...arr};
let typeVal =this.formNA.type;
this.formNA.type = typeVal===0?'':typeVal.toString();
}
else this.formNA = {...this.formNA_b};
this.showNA = true; this.showNA = true;
this.$refs.ruleForm?.resetFields();
}, },
newAgent(){
let name = this.formNA.description;
if (name==''){
this.$message.error('请填写平台描述!');
return false;
}
this.confirmNewAgent = true;
NewMerchants(name).then(res=>{
if(res.success) {
this.$message.success(res.message);
this.showNA = false;
this.formNA.description = '';
this.filterSearch();
}else this.$message.error(res.message)
}).finally(()=>{
this.confirmNewAgent = false;
NEAgent(){
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.confirmNewAgent = true;
NEMerchants(this.formNA).then(res=>{
if(res.success) {
this.$message.success(res.message);
this.showNA = false;
this.filterSearch();
}else this.$message.error(res.message)
}).finally(()=>{
this.confirmNewAgent = false;
});
}
else return false;
}); });
}, },
filterSearch(page){ filterSearch(page){
@@ -160,6 +188,13 @@ export default {
formatDateTime(time){ formatDateTime(time){
return formatDate(time,'yyyy-MM-dd hh:mm'); return formatDate(time,'yyyy-MM-dd hh:mm');
}, },
//随机密码
randPWD(){
this.formNA.password = getRandCode();
},
getResSelects(type,val){
return resSelects(type,val)
}
} }
} }
</script> </script>


+ 1
- 1
src/pages/login/i18n.js View File

@@ -1,7 +1,7 @@
module.exports = { module.exports = {
messages: { messages: {
CN: { CN: {
welcome: '您好,欢迎来到\n捷配管理后台',
welcome: '您好,欢迎来到\n捷配审单云管理后台',
login: '登录', login: '登录',
usernamePlaceholder: '请输入账户名', usernamePlaceholder: '请输入账户名',
usernameInvalidMessage: '请输入账户名', usernameInvalidMessage: '请输入账户名',


+ 34
- 16
src/pages/order/list.vue View File

@@ -2,18 +2,29 @@
<div class="boxMain"> <div class="boxMain">
<inc-search :listInput="listInput" :loadSoBn="tableLoad" :onSearch="filterSearch" :orderType="orderType"></inc-search> <inc-search :listInput="listInput" :loadSoBn="tableLoad" :onSearch="filterSearch" :orderType="orderType"></inc-search>
<a-table class="tablesa" :columns="tableColumns" :data-source="tableData" :rowKey="lists => lists.orderNo" :pagination="pagination" :loading="tableLoad" @change="filterSearch"> <a-table class="tablesa" :columns="tableColumns" :data-source="tableData" :rowKey="lists => lists.orderNo" :pagination="pagination" :loading="tableLoad" @change="filterSearch">
<div slot="memberNo" slot-scope="text,record">
<i v-if="record.memberLevel!==null" :class="'star s'+record.memberLevel">{{record.memberLevel}}</i>{{text}}
</div>
<div slot="orderNo" slot-scope="text,record"> <div slot="orderNo" slot-scope="text,record">
<router-link :to="'detail?Id='+record.orderNo"><a-icon type="file-text" /> {{text}}</router-link>
<router-link class="fontovdd" :title="text" :to="'detail?Id='+record.orderNo"><a-icon type="file-text" /> {{text}}</router-link>
<span :style="'color:'+(record.isJiaJi?'#f90':'#999')">加急:{{record.isJiaJi?'是':'否'}}</span><br>
<span :style="'color:'+(record.isReorder?'#f90':'#999')">返单:{{record.isReorder?'是':'否'}}</span>
</div>
<div slot="orderMoney" slot-scope="text,record">
¥{{record.orderMoney}}<br>
<span :style="'color:'+(record.isPay?'#f90':'#999')">{{record.isPay?'已支付':'未支付'}}</span>
</div> </div>
<span class="amount" slot="amount" slot-scope="text,record">金额:<span>${{ text }}</span><br>已付:<span>${{record.paidAmount||0}}</span></span>
<span slot="orderType" slot-scope="text,record">{{getSelTxt('orderType',text)}}<br>{{getSelTxt('sourceType',record.sourceType)}}</span>
<span slot="status" slot-scope="text">{{getSelTxt('orderStatus',text)}}</span> <span slot="status" slot-scope="text">{{getSelTxt('orderStatus',text)}}</span>
<div slot="groupNo" slot-scope="text">{{text}}<br></div>
<span slot="parsingStatus" slot-scope="text">{{getSelTxt('parseStatue',text)}}</span> <span slot="parsingStatus" slot-scope="text">{{getSelTxt('parseStatue',text)}}</span>
<span slot="creationTime" slot-scope="text">{{formatDateTime(text)}}</span>
<div class="files" slot="files" slot-scope="text">
<ul>
<li v-for="(file,fid) in text" :key="fid"><a :href="file.url" :title="file.name" target="_blank"><a-icon type="link" /> {{file.name}}</a></li>
</ul>
<div slot="createTime" slot-scope="text">{{formatDateTime(text)}}</div>
<div slot="pcbFileName" slot-scope="text,record">
<a class="font2h" :href="record.pcbFilePath" target="_blank" :title="'下载文件:'+text"><a-icon type="cloud-download" style="color:#1fb1ff" /> {{text}}</a>
</div> </div>
<div slot="id" slot-scope="text,record">
<router-link :to="'detail?Id='+record.orderNo">详情</router-link>
</div>
</a-table> </a-table>
</div> </div>
</template> </template>
@@ -53,15 +64,20 @@ export default {
}, },
tableLoad: false, tableLoad: false,
tableColumns:[ tableColumns:[
{title: '订单编号',dataIndex: 'orderNo',key: 'orderNo',width:'260px',scopedSlots: { customRender: 'orderNo' },},
// {title: '加急/返单',dataIndex: 'isJiaJi',key: 'isJiaJi',align:'center',width:'100px',scopedSlots: { customRender: 'isJiaJi' },},
{title: '订单编号',dataIndex: 'orderNo',key: 'orderNo',width:'160px',scopedSlots: { customRender: 'orderNo' },},
{title: '类型/来源',dataIndex: 'orderType',key: 'orderType',align:'center',width:'100px',scopedSlots: { customRender: 'orderType' },},
{title: '订单包',dataIndex: 'groupNo',key: 'groupNo',width:'200px',scopedSlots: { customRender: 'groupNo' },},
{title: '订单金额',dataIndex: 'orderMoney',key: 'orderMoney',width:'120px',scopedSlots: { customRender: 'orderMoney' },},
{title: '客户编号',dataIndex: 'memberNo',key: 'memberNo',width:'140px',scopedSlots: { customRender: 'memberNo' },},
{title: '审单员',dataIndex: 'checkAccountName',align:'center',key:'checkAccountName',width:'80px'},
{title: '跟单人员账号',dataIndex: 'followAccount',align:'center',key:'followAccount',width:'160px'},
{title: '状态',dataIndex: 'status',key: 'status',width:'100px',scopedSlots: { customRender: 'status' },}, {title: '状态',dataIndex: 'status',key: 'status',width:'100px',scopedSlots: { customRender: 'status' },},
{title: '解析状态',dataIndex: 'parsingStatus',key: 'parsingStatus',width:'100px',scopedSlots: { customRender: 'parsingStatus' },},
{title: '创建时间',dataIndex: 'creationTime',key: 'creationTime',width:'160px',scopedSlots: { customRender: 'creationTime' },},
{title: '下单时间',dataIndex: 'orderTime',key: 'orderTime',width:'160px'},
{title: '时效',dataIndex: 'deliveryTime',key: 'deliveryTime',width:'120px'},
{title: '数量',dataIndex: 'qty',key: 'qty',width:'80px'},
{title: '文件',dataIndex: 'files',key: 'files',width:'300px',scopedSlots: { customRender: 'files' },},
{title: '金额',dataIndex: 'amount',key: 'amount',scopedSlots: { customRender: 'amount' }},
{title: '解析状态',dataIndex: 'parsingStatus',align:'center',key: 'parsingStatus',width:'100px',scopedSlots: { customRender: 'parsingStatus' },},
{title: '文件',dataIndex: 'pcbFileName',key: 'pcbFileName',width:'160px',scopedSlots: { customRender: 'pcbFileName' },},
{title: '创建时间',dataIndex: 'createTime',key: 'createTime',scopedSlots: { customRender: 'createTime' },},
{title: '操作',dataIndex: 'id',align:'center',key:'id',width:'100px',scopedSlots: { customRender: 'id' },},
// {title: '文件',dataIndex: 'files',key: 'files',width:'300px',scopedSlots: { customRender: 'files' },},
], ],
tableData:[], tableData:[],
} }
@@ -118,5 +134,7 @@ export default {
</script> </script>


<style scoped> <style scoped>

i.star{background-color: #f90; color:#fff; border-radius:50%; padding:0 .3em; text-align: center; font-style: normal; display: inline-block; margin-right:.3em}
i.star:before{content:'v'; display: inline-block; transform: scale(.8)}
i.star.s0{background-color: #ccc}
</style> </style>

+ 24
- 3
src/services/Common.js View File

@@ -62,13 +62,26 @@ function padLeftZero (str) {
//订单类型:orderType //订单类型:orderType
//订单状态:orderStatus //订单状态:orderStatus
//解析状态:parseStatue //解析状态:parseStatue
//平台类别:platformType
export function resSelects(type='',val=''){ export function resSelects(type='',val=''){
// console.log(type,val) // console.log(type,val)
let list = []; let list = [];
if (type==='orderType'){ if (type==='orderType'){
list = [ list = [
{value:'1',text:'打样'},
{value:'2',text:'批量'},
{value:'0',text:'内贸'},
{value:'1',text:'外贸'},
{value:'2',text:'精密'},
{value:'3',text:'铝基板'},
{value:'4',text:'调度中心'},
]
}
else if (type==='sourceType'){
list = [
{value:'0',text:'内贸'},
{value:'1',text:'外贸'},
{value:'2',text:'精密'},
{value:'3',text:'铝基板'},
{value:'4',text:'调度中心'},
] ]
} }
else if (type==='orderStatus'){ else if (type==='orderStatus'){
@@ -88,9 +101,17 @@ export function resSelects(type='',val=''){
{value:'3',text:'解析失败'}, {value:'3',text:'解析失败'},
] ]
} }
else if (type==='platformType'){
list = [
{value:'1',text:'内贸'},
{value:'2',text:'外贸'},
{value:'3',text:'调度平台'},
{value:'4',text:'精密铝基板'},
]
}
else return false; else return false;
//返回内容 //返回内容
if(val!=='' && typeof val=='number'){
if(val!==''){
for(let i in list){ for(let i in list){
if (val.toString() === list[i].value) return list[i].text; if (val.toString() === list[i].value) return list[i].text;
} }


+ 3
- 8
src/services/Merchants/Merchants.js View File

@@ -1,14 +1,9 @@
import { requestApi, METHOD } from '@/utils/request'; import { requestApi, METHOD } from '@/utils/request';


//新增商户 //新增商户
export function NewMerchants(name) {
return new Promise((resolve, reject) => {
requestApi('/api/app/access-manager-server/insert?description='+name, METHOD.POST).then(res => {
resolve(res);
}).catch(err=>{
reject(err);
})
})
export function NEMerchants(params) {
if (params?.id) return requestApi('/api/app/access-manager-server/update', METHOD.PUT, params)
else return requestApi('/api/app/access-manager-server/insert', METHOD.POST, params)
} }


//获取开放接口列表 //获取开放接口列表


+ 9
- 0
src/utils/axios-interceptors.js View File

@@ -118,6 +118,15 @@ const resCommon = {
*/ */
onFulfilled(response, options) { onFulfilled(response, options) {
const { message } = options; const { message } = options;
// if (response?.success&&!response.success){
// console.log(response);
// }
if (response.code === 40008){
message.error('认证 token 已过期,请重新登录');
Cookie.remove(xsrfHeaderName);
router.push('/loginjmp');
return Promise.reject(error);
}
if (response.code === 200 || response.code === 204) { if (response.code === 200 || response.code === 204) {
if (!response.isSuccess) { if (!response.isSuccess) {
message.error(response.message); message.error(response.message);


Loading…
Cancel
Save