Browse Source

fix:配合后端修改 以前的模块

feat:开发商城新模块
confidence
杜贤金 3 years ago
parent
commit
32691bc4fb
  1. 3
      package.json
  2. 30
      public/index.html
  3. 50
      src/api/mallmanagement/banner.js
  4. 50
      src/api/mallmanagement/classify.js
  5. 46
      src/api/mallmanagement/expressage.js
  6. 50
      src/api/mallmanagement/shopmanagement.js
  7. 8
      src/api/operator/statisticalsms.js
  8. 106
      src/api/ordermanage/mallorders.js
  9. 23
      src/api/wel/administrator.js
  10. 29
      src/main.js
  11. 9
      src/util/global.js
  12. 7
      src/util/them.js
  13. 16
      src/util/util.js
  14. 33
      src/views/communicationmanage/basiccard/basiccard.vue
  15. 26
      src/views/communicationmanage/channel/channel.vue
  16. 22
      src/views/communicationmanage/flowpool/flowpool.vue
  17. 3
      src/views/communicationmanage/outbound/outbound.vue
  18. 28
      src/views/communicationmanage/targetflowpool/targetflowpool.vue
  19. 229
      src/views/informationmanage/sim/index.vue
  20. 279
      src/views/mallmanagement/banner/index.vue
  21. 203
      src/views/mallmanagement/classify/index.vue
  22. 303
      src/views/mallmanagement/expressage/index.vue
  23. 465
      src/views/mallmanagement/shopmanagement/index.vue
  24. 782
      src/views/ordermanage/mallorders/index.vue
  25. 25
      src/views/original/targetpackagegroupmanage/index.vue
  26. 25
      src/views/original/targetpackagemanage/index.vue
  27. 22
      src/views/package/basicpackage/index.vue
  28. 22
      src/views/package/packagegroup/index.vue
  29. 103
      src/views/util/test.vue

3
package.json

@ -14,6 +14,7 @@
"dependencies": {
"@antv/g2": "^4.1.30",
"@smallwei/avue": "^2.9.11",
"ali-oss": "^6.17.1",
"avue-plugin-ueditor": "^0.1.4",
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
@ -34,7 +35,9 @@
"vue": "^2.6.10",
"vue-axios": "^2.1.2",
"vue-i18n": "^8.7.0",
"vue-json-viewer": "^2.2.22",
"vue-router": "^3.0.1",
"vue-seamless-scroll": "^1.1.23",
"vuex": "^3.1.1"
},
"devDependencies": {

30
public/index.html

@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
@ -18,6 +18,7 @@
<link rel="stylesheet" href="<%= BASE_URL %>cdn/avue/2.8.12/index.css">
<script src="<%= BASE_URL %>cdn/xlsx/FileSaver.min.js"></script>
<script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script>
<script src="https://cdn.staticfile.org/ali-oss/6.10.0/aliyun-oss-sdk.min.js"></script>
<link rel="icon" href="<%= BASE_URL %>favicon.png">
<title>青鸟物联网平台</title>
<style>
@ -53,7 +54,7 @@
padding: 1em 0;
}
.avue-home__footer > a {
.avue-home__footer>a {
font-size: 12px;
color: #ABABAB;
text-decoration: none;
@ -75,16 +76,17 @@
color: #ABABAB;
font-size: 12px;
}
</style>
</head>
<body>
<noscript>
<noscript>
<strong>
很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。
</strong>
</noscript>
<div id="app">
</noscript>
<div id="app">
<div class="avue-home">
<div class="avue-home__main">
<img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading">
@ -100,15 +102,15 @@
https://bladex.vip </a>
</div>
</div>
</div>
<!-- built files will be auto injected -->
<script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/element-ui/2.15.1/index.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/avue/2.8.12/avue.min.js" charset="utf-8"></script>
</div>
<!-- built files will be auto injected -->
<script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/element-ui/2.15.1/index.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/avue/2.8.12/avue.min.js" charset="utf-8"></script>
</body>
</html>

50
src/api/mallmanagement/banner.js

@ -0,0 +1,50 @@
import request from '@/router/axios';
//列表
export const getList = (current, size, params) => {
return request({
url: '/api/iot-sim/banner/page',
method: 'get',
params: {
...params,
current,
size,
}
})
}
//删除
export const remove = (ids) => {
return request({
url: '/api/iot-sim/banner/remove',
method: 'post',
params: {
ids,
}
})
}
//详情
export const getDetail = (id) => {
return request({
url: '/api/iot-sim/banner/detail',
method: 'get',
params: {
id
}
})
}
//新增
export const add = (row) => {
return request({
url: '/api/iot-sim/banner/save',
method: 'post',
data: row
})
}
//修改
export const update = (row) => {
return request({
url: '/api/iot-sim/banner/update',
method: 'post',
data: row
})
}

50
src/api/mallmanagement/classify.js

@ -0,0 +1,50 @@
import request from '@/router/axios';
//列表
export const getList = (current, size, params) => {
return request({
url: '/api/iot-sim/category/page',
method: 'get',
params: {
...params,
current,
size,
}
})
}
//删除
export const remove = (ids) => {
return request({
url: '/api/iot-sim/category/remove',
method: 'post',
params: {
ids,
}
})
}
//详情
export const getDetail = (id) => {
return request({
url: '/api/iot-sim/category/detail',
method: 'get',
params: {
id
}
})
}
//新增
export const add = (row) => {
return request({
url: '/api/iot-sim/category/save',
method: 'post',
data: row
})
}
//修改
export const update = (row) => {
return request({
url: '/api/iot-sim/category/update',
method: 'post',
data: row
})
}

46
src/api/mallmanagement/expressage.js

@ -0,0 +1,46 @@
import request from '@/router/axios';
//列表
export const getList = (current, size, params) => {
return request({
url: '/api/iot-sim/parcel/page',
method: 'get',
params: {
...params,
current,
size,
}
})
}
//删除
export const remove = (ids) => {
return request({
url: '/api/iot-sim/parcel/remove',
method: 'post',
params: {
ids,
}
})
}
//详情
export const getDetail = (id) => {
return request({
url: '/api/iot-sim/parcel/detail',
method: 'get',
params: {
id
}
})
}
//同步信息
export const syncParcel = (id, parcelCode) => {
return request({
url: '/api/iot-sim/parcel/syncParcel',
method: 'get',
params: {
id,
parcelCode
}
})
}

50
src/api/mallmanagement/shopmanagement.js

@ -0,0 +1,50 @@
import request from '@/router/axios';
//列表
export const getList = (current, size, params) => {
return request({
url: '/api/iot-sim/product/page',
method: 'get',
params: {
...params,
current,
size,
}
})
}
//删除
export const remove = (ids) => {
return request({
url: '/api/iot-sim/product/remove',
method: 'post',
params: {
ids,
}
})
}
//详情
export const getDetail = (id) => {
return request({
url: '/api/iot-sim/product/detail',
method: 'get',
params: {
id
}
})
}
//新增
export const add = (row) => {
return request({
url: '/api/iot-sim/product/save',
method: 'post',
data: row
})
}
//修改
export const update = (row) => {
return request({
url: '/api/iot-sim/product/update',
method: 'post',
data: row
})
}

8
src/api/operator/statisticalsms.js

@ -1,13 +1,9 @@
import request from '@/router/axios';
//列表
export const getUserClick = (current, size, params) => {
export const getUserClick = () => {
return request({
url: '/api/iot-sim/orders/getUserClick',
method: 'get',
params: {
...params,
current,
size,
}
})
}

106
src/api/ordermanage/mallorders.js

@ -0,0 +1,106 @@
import request from '@/router/axios';
//列表
export const getList = (current, size, params) => {
return request({
url: '/api/iot-sim/orders/pageOrders',
method: 'get',
params: {
...params,
current,
size,
}
})
}
//删除
export const remove = (ids) => {
return request({
url: '/api/iot-sim/orders/remove',
method: 'post',
params: {
ids,
}
})
}
//详情
export const getDetail = (id) => {
return request({
url: '/api/iot-sim/orders/detail',
method: 'get',
params: {
id
}
})
}
//新增
export const add = (row) => {
return request({
url: '/api/iot-sim/orders/save',
method: 'post',
data: row
})
}
//修改
export const update = (row) => {
return request({
url: '/api/iot-sim/orders/update',
method: 'post',
data: row
})
}
//生成发货单
export const shipment = (parcel, orders, ids, dataPlanId) => {
return request({
url: '/api/iot-sim/orders/shipment',
method: 'post',
params: {
...parcel,
...orders,
ids,
dataPlanId
}
})
}
//商品类型为流量卡,调取设备分页
export const simcardList = (query) => {
return request({
url: '/api/iot-sim/simcard/waitingDeliver',
method: 'get',
params: query
})
}
//商品类型为机卡,调取设备分页
export const deviceDeliver = (query) => {
return request({
url: '/api/iot-sim/device/waitingDeliver',
method: 'get',
params: query
})
}
//接口类型
export const interfaceType = (current, size) => {
return request({
url: '/api/iot-system/dict/dictionary?code=interface_type',
method: 'get',
})
}
//基础套餐
export const dataplan = () => {
return request({
url: '/api/iot-sim/dataplan/fillData?isSource=' + 2,
method: 'get',
})
}
//物流信息
export const getParcel = (id) => {
return request({
url: '/api/iot-sim/orders/getParcel',
method: 'get',
params: {
id
}
})
}

23
src/api/wel/administrator.js

@ -0,0 +1,23 @@
import request from '@/router/axios';
//卡总数
export const cardTotal = () => {
return request({
url: '/api/iot-sim/home/getDeliverNum',
method: 'get',
})
}
//运营商的卡数量
export const operatorCard = () => {
return request({
url: '/api/iot-sim/home/getOperatorSimNum',
method: 'get',
})
}
//出库卡的状态
export const cardStatus = () => {
return request({
url: '/api/iot-sim/home/getSimStatus',
method: 'get',
})
}

29
src/main.js

@ -5,9 +5,15 @@ import App from './App';
import router from './router/router';
import './permission'; // 权限
import './error'; // 日志
import './cache';//页面缓存
import './cache'; //页面缓存
import store from './store';
import {loadStyle} from './util/util'
import {
autoThemeFunc
} from '@/util/global';
import {
loadStyle
} from './util/util'
import * as urls from '@/config/env';
import Element from 'element-ui';
import {
@ -22,7 +28,12 @@ import thirdRegister from './components/third-register/main';
import avueUeditor from 'avue-plugin-ueditor';
import website from '@/config/website';
import crudCommon from '@/mixins/crud';
import {baseUrl,apis} from '@/config/env';
import {
baseUrl,
apis
} from '@/config/env';
import scroll from 'vue-seamless-scroll'
Vue.use(scroll)
// 注册全局crud驱动
window.$crudCommon = crudCommon;
// 加载Vue拓展
@ -31,11 +42,20 @@ Vue.use(VueAxios, axios);
Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value)
});
Vue.use(window.AVUE, {
ali: {
region: 'oss-cn-shanghai',
endpoint: 'oss-cn-shanghai.aliyuncs.com',
accessKeyId: autoThemeFunc().aliAccessKeyId,
accessKeySecret: autoThemeFunc().aliAccessKeySecret,
bucket: autoThemeFunc().aliBucket,
}
});
Vue.use(window.AVUE, {
size: 'small',
tableSize: 'small',
calcHeight: 65,
i18n: (key, value) => i18n.t(key, value)
i18n: (key, value) => i18n.t(key, value),
});
// 注册全局容器
Vue.component('basicContainer', basicContainer);
@ -56,7 +76,6 @@ Vue.prototype.apis = apis;
iconfontVersion.forEach(ele => {
loadStyle(iconfontUrl.replace('$key', ele));
});
Vue.config.productionTip = false;
// 开发环境打开调试工具

9
src/util/global.js

@ -0,0 +1,9 @@
import autoTheme from "./them"
// Vue.prototype.$autoTheme = () => {
// return autoThemeFunc();
// }
export const autoThemeFunc = () => {
return autoTheme.default
}

7
src/util/them.js

@ -0,0 +1,7 @@
export default {
default: {
aliAccessKeyId: "LTAI5tKwjzw9QHDEYYhgt8TT",
aliAccessKeySecret: "BhY3Om78wj8XDSdKJ1XUUWUlNVShYl",
aliBucket: "qn-static-resource",
},
}

16
src/util/util.js

@ -1,4 +1,6 @@
import {validatenull} from './validate'
import {
validatenull
} from './validate'
//表单序列化
export const serialize = data => {
let list = [];
@ -201,7 +203,8 @@ export const diff = (obj1, obj2) => {
delete obj1.close;
var o1 = obj1 instanceof Object;
var o2 = obj2 instanceof Object;
if (!o1 || !o2) { /* 判断不是对象 */
if (!o1 || !o2) {
/* 判断不是对象 */
return obj1 === obj2;
}
@ -369,3 +372,12 @@ export const downloadFileBase64 = (path, name) => {
export const isEmptyObject = (obj) => {
return Object.prototype.toString.call(obj) === '[object Object]' && Object.keys(obj).length === 0;
};
export const substr = (image) => {
let result = '';
result = image.substr(
image.lastIndexOf("/") + 1,
image.length
);
return result;
}

33
src/views/communicationmanage/basiccard/basiccard.vue

@ -61,7 +61,7 @@
<template slot-scope="scope" slot="menuBtn">
<el-dropdown-item v-if="scope.row.isDeliver != 2">
<i class="el-icon-sell"></i>
<span @click="handleAllocate(3,scope)">&nbsp;</span>
<span @click="handleAllocate(3, scope)">&nbsp;</span>
</el-dropdown-item>
</template>
</avue-crud>
@ -397,7 +397,6 @@ export default {
searchMenuSpan: 6,
border: true,
index: true,
indexWidth: 70,
dialogDrag: true, //
addBtn: true,
viewBtn: true,
@ -455,7 +454,7 @@ export default {
display: true,
dicUrl: "/api/iot-sim/flowpool/fillData?isSource=" + 1,
formatter: (val, value, label) => {
if (value == -1) {
if (value == null) {
return "-";
} else {
return `${label}`;
@ -630,7 +629,7 @@ export default {
],
},
data: [],
deliverId:"",//id
deliverId: "", //id
};
},
computed: {
@ -734,22 +733,13 @@ export default {
//
rowSave(row, done, loading) {
add(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -760,22 +750,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -902,7 +883,7 @@ export default {
});
},
//
handleAllocate(e,row) {
handleAllocate(e, row) {
if (e == 1) {
this.distitle = "分拨";
} else if (e == 2) {
@ -910,7 +891,6 @@ export default {
} else if (e == 3) {
this.distitle = "出库";
this.deliverId = row.row.id;
}
this.dialogVisible = true;
},
@ -968,7 +948,6 @@ export default {
}
});
} else if (this.distitle == "出库") {
deliver(
this.distribution.tenantId,
this.distribution.dataPlanId,

26
src/views/communicationmanage/channel/channel.vue

@ -51,7 +51,7 @@ export default {
border: true,
index: true,
addBtn: true,
dialogDrag:true,//
dialogDrag: true, //
viewBtn: true,
delBtn: true,
columnBtn: false,
@ -125,7 +125,7 @@ export default {
}
},
rules: [
{ required: true, message: "请输入apiUrl", trigger: "blur" },
{ required: false, message: "请输入apiUrl", trigger: "blur" },
],
},
],
@ -165,22 +165,13 @@ export default {
//
rowSave(row, done, loading) {
add(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -191,22 +182,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);

22
src/views/communicationmanage/flowpool/flowpool.vue

@ -316,22 +316,13 @@ export default {
//
rowSave(row, done, loading) {
add(Object.assign(row, this.isSources)).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -342,22 +333,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);

3
src/views/communicationmanage/outbound/outbound.vue

@ -253,10 +253,11 @@ export default {
dialogClickModal: false,
dialogWidth: "60%",
menuType: "menu",
rowKey: "xx",
menuWidth: "120",
column: [
{
label: "主键id",
label: "id",
prop: "id",
width: 180,
addDisplay: false,

28
src/views/communicationmanage/targetflowpool/targetflowpool.vue

@ -50,9 +50,7 @@ import { mapGetters } from "vuex";
export default {
data() {
return {
form: {
},
form: {},
query: {},
loading: false,
page: {
@ -268,10 +266,10 @@ export default {
label: "管理员名称",
prop: "account",
span: 12,
search: false,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
hide: true,
formslot: true,
rules: [
@ -319,22 +317,13 @@ export default {
//
rowSave(row, done, loading) {
add(Object.assign(row, this.isSources)).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -345,22 +334,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);

229
src/views/informationmanage/sim/index.vue

@ -229,6 +229,7 @@ export default {
dialogWidth: "60%",
menuType: "menu",
menuWidth: "120",
rowKey: "xx",
column: [
{
label: "id",
@ -236,6 +237,40 @@ export default {
search: true,
addDisplay: false,
editDisplay: false,
width: 150,
labelWidth: 130,
},
{
label: "iccid",
prop: "iccid",
width: 150,
span: 12,
labelWidth: 130,
search: true,
rules: [
{
required: true,
message: "请输入iccid",
trigger: "blur",
},
],
},
{
label: "msisdn",
prop: "msisdn",
span: 12,
width: 150,
labelWidth: 130,
addDisplay: false,
search: true,
rules: [
{
required: true,
message: "请输入msisdn",
trigger: "blur",
},
],
},
{
label: "基础套餐",
@ -250,7 +285,6 @@ export default {
span: 12,
labelWidth: 130,
searchLabelWidth: 110,
search: true,
rules: [
{
@ -283,24 +317,24 @@ export default {
},
],
},
{
label: "卡类型",
prop: "cardType",
type: "select",
dicUrl: "/api/iot-system/dict/dictionary?code=card_type",
props: {
label: "dictValue",
value: "dictKey",
},
dataType: "number",
span: 12,
labelWidth: 130,
// {
// label: "",
// prop: "cardType",
// type: "select",
// dicUrl: "/api/iot-system/dict/dictionary?code=card_type",
// props: {
// label: "dictValue",
// value: "dictKey",
// },
// dataType: "number",
// span: 12,
// labelWidth: 130,
search: true,
rules: [
{ required: true, message: "请选择卡类型", trigger: "change" },
],
},
// search: true,
// rules: [
// { required: true, message: "", trigger: "change" },
// ],
// },
{
label: "是否断网",
prop: "offNetStatus",
@ -319,32 +353,32 @@ export default {
{ required: true, message: "请选择是否断网", trigger: "change" },
],
},
{
label: "断网类型",
prop: "offNetType",
type: "select",
dicUrl: "/api/iot-system/dict/dictionary?code=off_netType",
props: {
label: "dictValue",
value: "dictKey",
},
dataType: "number",
display: true,
span: 12,
formatter: (val, value, label) => {
if (value == -1) {
return "-";
} else {
return `${label}`;
}
},
labelWidth: 130,
width: 70,
search: false,
rules: [
{ required: true, message: "请选择断网类型", trigger: "change" },
],
},
// {
// label: "",
// prop: "offNetType",
// type: "select",
// dicUrl: "/api/iot-system/dict/dictionary?code=off_netType",
// props: {
// label: "dictValue",
// value: "dictKey",
// },
// dataType: "number",
// display: true,
// span: 12,
// formatter: (val, value, label) => {
// if (value == -1) {
// return "-";
// } else {
// return `${label}`;
// }
// },
// labelWidth: 130,
// search: false,
// rules: [
// { required: true, message: "", trigger: "change" },
// ],
// },
{
label: "实名状态",
prop: "realNameStats",
@ -363,27 +397,26 @@ export default {
{ required: true, message: "请选择实名状态", trigger: "change" },
],
},
{
label: "达量断网阙值(M)",
prop: "offNetThreshold",
span: 12,
labelWidth: 130,
searchLabelWidth: 124,
search: false,
rules: [
{
required: true,
message: "请输入达量断网阙值",
trigger: "blur",
},
{
pattern: /^\d+(\.\d+)?$/,
message: "请输入正确的阙值",
trigger: "blur",
},
],
},
// {
// label: "(M)",
// prop: "offNetThreshold",
// span: 12,
// labelWidth: 130,
// searchLabelWidth: 124,
// search: false,
// rules: [
// {
// required: true,
// message: "",
// trigger: "blur",
// },
// {
// pattern: /^\d+(\.\d+)?$/,
// message: "",
// trigger: "blur",
// },
// ],
// },
{
label: "批次号",
prop: "batchNum",
@ -400,53 +433,6 @@ export default {
},
],
},
// {
// label: "iccid",
// prop: "iccid",
// width: 150,
// span: 12,
// labelWidth: 130,
// search: true,
// rules: [
// {
// required: true,
// message: "iccid",
// trigger: "blur",
// },
// ],
// },
// {
// label: "imsi",
// prop: "imsi",
// span: 12,
// width: 150,
// labelWidth: 130,
// search: true,
// addDisplay: false,
// rules: [
// {
// required: true,
// message: "imsi",
// trigger: "blur",
// },
// ],
// },
// {
// label: "msisdn",
// prop: "msisdn",
// span: 12,
// width: 150,
// labelWidth: 130,
// addDisplay: false,
// search: true,
// rules: [
// {
// required: true,
// message: "msisdn",
// trigger: "blur",
// },
// ],
// },
{
label: "总量(M)",
prop: "total",
@ -527,23 +513,7 @@ export default {
created() {
this.exportTypelistlists(); //
},
computed: {
...mapGetters(["permission"]),
permissionList() {
return {
// viewBtn: this.vaildData(this.permission.sourceApi_view, false),
// editBtn: this.vaildData(this.permission.sourceApi_edit, false),
// delBtn: this.vaildData(this.permission.sourceApi_delete, false),
};
},
// ids() {
// let ids = [];
// this.selectionList.forEach((ele) => {
// ids.push(ele.id);
// });
// return ids.join(",");
// },
},
methods: {
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
@ -555,6 +525,7 @@ export default {
},
searchReset() {
this.query = {};
console.log(this.query, "this.query999");
this.onLoad(this.page);
},
searchChange(params, done) {

279
src/views/mallmanagement/banner/index.vue

@ -0,0 +1,279 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
:permission="permissionList"
:before-open="beforeOpen"
:upload-before="uploadBefore"
v-model="form"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
</avue-crud>
</basic-container>
</template>
<script>
import {
add,
getDetail,
getList,
remove,
update,
} from "@/api/mallmanagement/banner";
import { substr } from "@/util/util";
export default {
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
columnBtn: true,
addBtn: true,
dialogClickModal: false,
dialogWidth: "59%",
labelWidth: 125,
column: [
{
label: "名称",
prop: "name",
search: true,
rules: [
{
required: true,
message: "请输入名称",
trigger: "blur",
},
],
},
{
label: "排序号",
prop: "sort",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "轮播图位置",
prop: "position",
type: "select",
search: true,
searchLabelWidth: 110,
dicData: [
{
label: "商城首页",
value: 2,
},
{
label: "平台首页",
value: 1,
},
],
rules: [
{
required: true,
message: "请选择是否显示",
trigger: "change",
},
],
},
{
label: "是否显示",
prop: "isShow",
search: true,
type: "select",
dicData: [
{
label: "是",
value: 2,
},
{
label: "否",
value: 1,
},
],
rules: [
{
required: true,
message: "请选择是否显示",
trigger: "change",
},
],
},
{
label: "图片列表",
prop: "images",
type: "upload",
accept: "png/jpg",
loadText: "图片上传中,请稍等",
dataType: "string",
span: 24,
hide: true,
oss: "ali",
listType: "picture-card",
tip: "只能上传jpg/png文件,且不超过500kb",
rules: [
{
required: true,
message: "请上传图片",
trigger: "change",
},
],
},
],
},
data: [],
};
},
methods: {
rowSave(row, done, loading) {
let imgArr = [];
row.images.split(",").forEach((element) => {
imgArr.push(substr(element));
});
row.images = imgArr.toString();
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
window.console.log(error);
}
);
},
rowUpdate(row, index, done, loading) {
let imgArr = [];
row.images.split(",").forEach((element) => {
imgArr.push(substr(element));
});
row.images = imgArr.toString();
update(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
console.log(error);
}
);
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
});
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then((res) => {
this.form = res.data.data;
});
}
done();
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
this.loading = true;
getList(
page.currentPage,
page.pageSize,
Object.assign(params, this.query)
).then((res) => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
uploadBefore(file, done, loading) {
if (file.size > 500 * 1024) {
this.$message.warning("图片大小切勿大于500kb");
loading();
} else if (
file.type !== "image/jpg" &&
file.type !== "image/jpeg" &&
file.type !== "image/png"
) {
this.$message.warning("上传图片只能是 JPG/JPEG/PNG 格式");
loading();
} else {
var timestamp = Date.parse(new Date());
let newFile = new File([file], "/sim/banner/" + timestamp + ".jpg", {
type: file.type,
});
done(newFile);
}
},
},
};
</script>
<style></style>

203
src/views/mallmanagement/classify/index.vue

@ -0,0 +1,203 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
:permission="permissionList"
:before-open="beforeOpen"
v-model="form"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
</avue-crud>
</basic-container>
</template>
<script>
import {
add,
getDetail,
getList,
remove,
update,
} from "@/api/mallmanagement/classify";
export default {
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
columnBtn: true,
addBtn: true,
dialogClickModal: false,
dialogWidth: "59%",
labelWidth: 125,
column: [
{
label: "分类名称",
prop: "name",
search: true,
rules: [
{
required: true,
message: "请输入分类名称",
trigger: "blur",
},
],
},
{
label: "排序号",
prop: "sort",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "是否显示",
prop: "isShow",
type: "select",
search: false,
dicData: [
{
label: "是",
value: 2,
},
{
label: "否",
value: 1,
},
],
rules: [
{
required: true,
message: "请选择是否显示",
trigger: "change",
},
],
},
],
},
data: [],
};
},
methods: {
rowSave(row, done, loading) {
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
window.console.log(error);
}
);
},
rowUpdate(row, index, done, loading) {
update(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
console.log(error);
}
);
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
});
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then((res) => {
this.form = res.data.data;
});
}
done();
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
this.loading = true;
getList(
page.currentPage,
page.pageSize,
Object.assign(params, this.query)
).then((res) => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
},
};
</script>
<style></style>

303
src/views/mallmanagement/expressage/index.vue

@ -0,0 +1,303 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
:permission="permissionList"
:before-open="beforeOpen"
v-model="form"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template slot-scope="{ type, size, row }" slot="infoForm">
<el-timeline :reverse="reverse">
<el-timeline-item
v-for="(activity, index) in JSON.parse(row.info)"
:key="index"
:timestamp="activity.time"
:color="index == 0 ? 'blue' : ''"
>
{{ activity.status }}
</el-timeline-item>
</el-timeline>
</template>
<template slot-scope="{ type, size, row }" slot="menu">
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="您确认要同步数据吗?"
@confirm="confirm(row)"
>
<el-button
slot="reference"
icon="el-icon-refresh-right"
:size="size"
:type="type"
>同步数据</el-button
>
</el-popconfirm>
</template>
</avue-crud>
</basic-container>
</template>
<script>
import {
syncParcel,
getDetail,
getList,
remove,
} from "@/api/mallmanagement/expressage";
import JsonViewer from "vue-json-viewer";
export default {
components: {
JsonViewer,
},
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
columnBtn: true,
addBtn: false,
editBtn: false,
dialogClickModal: false,
dialogWidth: "59%",
labelWidth: 120,
column: [
{
label: "快递公司",
prop: "expName",
},
{
label: "快递单号",
prop: "parcelCode",
search: true,
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "快递类型",
prop: "type",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "快递状态",
prop: "status",
type: "select",
search: true,
dicData: [
{
label: "快递收件(揽件)",
value: 0,
},
{
label: "运输中",
value: 1,
},
{
label: "正在派件",
value: 2,
},
{
label: "已签收",
value: 3,
},
{
label: "派送失败",
value: 4,
},
{
label: "疑难件",
value: 5,
},
{
label: "退件签收",
value: 6,
},
],
},
{
label: "快递运费",
prop: "freight",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "快递重量",
prop: "kg",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "快递运费",
prop: "freight",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "寄件人手机号",
prop: "senderPhone",
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "收件人手机号",
prop: "consigneePhone",
searchLabelWidth: 125,
search: true,
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
{
label: "快递详细信息",
prop: "info",
hide: true,
formslot: true,
span: 24,
rules: [
{
required: true,
message: "请输入排序号",
trigger: "blur",
},
],
},
],
},
data: [],
};
},
methods: {
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
});
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then((res) => {
this.form = res.data.data;
});
}
done();
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
this.loading = true;
getList(
page.currentPage,
page.pageSize,
Object.assign(params, this.query)
).then((res) => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
//
confirm(row) {
syncParcel(row.id, row.parcelCode).then((res) => {
if (res.data.code == 200) {
this.$message.success("操作成功!");
}
});
},
},
};
</script>
<style scoped></style>

465
src/views/mallmanagement/shopmanagement/index.vue

@ -0,0 +1,465 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
:permission="permissionList"
:before-open="beforeOpen"
:upload-before="uploadBefore"
v-model="form"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
</avue-crud>
</basic-container>
</template>
<script>
import {
add,
getDetail,
getList,
remove,
update,
} from "@/api/mallmanagement/shopmanagement";
import { substr } from "@/util/util";
export default {
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
columnBtn: true,
addBtn: true,
dialogClickModal: false,
dialogWidth: "59%",
labelWidth: 125,
column: [
{
label: "商品名称",
prop: "name",
search: true,
rules: [
{
required: true,
message: "请输入商品名称",
trigger: "blur",
},
],
},
{
label: "商品分类",
prop: "categoryId",
type: "select",
search: true,
// editDisplay: false,
dicUrl: "/api/iot-sim/category/fillData",
props: {
label: "name",
value: "id",
},
dataType: "String",
rules: [
{
required: true,
message: "请选择商品类型",
trigger: "blur",
},
],
},
{
label: "商品类型",
prop: "type",
type: "select",
search: true,
// editDisplay: false,
dicUrl: "/api/iot-system/dict/dictionary?code=shop_type",
props: {
label: "dictValue",
value: "dictKey",
},
dataType: "number",
control: (val, form) => {
if (val == "2") {
return {
dataPlanId: {
display: false,
},
};
} else {
return {
dataPlanId: {
display: true,
},
};
}
},
rules: [
{
required: true,
message: "请选择商品类型",
trigger: "blur",
},
],
},
{
label: "基础套餐",
prop: "dataPlanId",
type: "select",
dicUrl: "/api/iot-sim/dataplan/fillData?isSource=" + 2,
props: {
label: "name",
value: "id",
},
dataType: "String",
span: 12,
labelWidth: 130,
searchLabelWidth: 110,
width: 110,
search: true,
rules: [
{
required: false,
message: "请选择基础套餐",
trigger: "change",
},
],
},
{
label: "商品排序",
prop: "sort",
rules: [
{
required: true,
message: "请输入商品排序",
trigger: "blur",
},
],
},
{
label: "商品单价",
prop: "price",
rules: [
{
required: true,
message: "请输入商品单价",
trigger: "blur",
},
],
},
{
label: "促销价格",
prop: "promotionPrice",
rules: [
{
required: true,
message: "请输入促销价格",
trigger: "blur",
},
],
},
{
label: "关键字",
prop: "keywords",
rules: [
{
required: true,
message: "请输入关键字",
trigger: "blur",
},
],
},
{
label: "是否上架",
prop: "isShow",
type: "select",
search: true,
dicData: [
{
label: "上架",
value: 2,
},
{
label: "下架",
value: 1,
},
],
rules: [
{
required: true,
message: "请选择是否上架",
trigger: "change",
},
],
},
{
label: "是否推荐",
prop: "isRecommend",
type: "select",
search: true,
dicData: [
{
label: "是",
value: 2,
},
{
label: "否",
value: 1,
},
],
rules: [
{
required: true,
message: "请选择是否推荐",
trigger: "change",
},
],
},
{
label: "库存",
prop: "stock",
rules: [
{
required: true,
message: "请输入库存",
trigger: "blur",
},
],
},
{
label: "详情标题",
prop: "detailTitle",
hide: true,
rules: [
{
required: true,
message: "请输入详情标题",
trigger: "blur",
},
],
},
{
label: "商品描述",
prop: "description",
hide: true,
rules: [
{
required: true,
message: "请输入详情标题",
trigger: "blur",
},
],
},
{
label: "销量",
prop: "sale",
hide: true,
rules: [
{
required: true,
message: "请输入销量",
trigger: "blur",
},
],
},
{
label: "图片列表",
prop: "images",
type: "upload",
accept: "png/jpg",
loadText: "图片上传中,请稍等",
hide: true,
dataType: "string",
span: 24,
oss: "ali",
listType: "picture-card",
tip: "只能上传jpg/png文件,且不超过500kb",
rules: [
{
required: true,
message: "请上传图片",
trigger: "change",
},
],
},
{
label: "缩略图",
prop: "thumb",
type: "upload",
accept: "png/jpg",
loadText: "图片上传中,请稍等",
listType: "picture-img",
dataType: "string",
oss: "ali",
hide: true,
rules: [
{
required: true,
message: "请上传图片",
trigger: "change",
},
],
tip: "只能上传jpg/png文件",
},
],
},
data: [],
};
},
watch: {
"form.type"() {
if (this.form.type == 2) {
this.form.dataPlanId = "";
}
},
},
methods: {
rowSave(row, done, loading) {
let imgArr = [];
row.images.split(",").forEach((element) => {
imgArr.push(substr(element));
});
row.images = imgArr.toString();
row.thumb = substr(row.thumb);
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
window.console.log(error);
}
);
},
rowUpdate(row, index, done, loading) {
let imgArr = [];
row.images.split(",").forEach((element) => {
imgArr.push(substr(element));
});
row.images = imgArr.toString();
row.thumb = substr(row.thumb);
update(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
console.log(error);
}
);
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
});
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then((res) => {
this.form = res.data.data;
});
}
done();
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
this.loading = true;
getList(
page.currentPage,
page.pageSize,
Object.assign(params, this.query)
).then((res) => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
uploadBefore(file, done, loading) {
if (file.size > 500 * 1024) {
this.$message.warning("图片大小切勿大于500kb");
loading();
} else if (
file.type !== "image/jpg" &&
file.type !== "image/jpeg" &&
file.type !== "image/png"
) {
this.$message.warning("上传图片只能是 JPG/JPEG/PNG 格式");
loading();
} else {
var timestamp = Date.parse(new Date());
let newFile = new File([file], "/sim/product/" + timestamp + ".jpg", {
type: file.type,
});
done(newFile);
}
},
},
};
</script>
<style></style>

782
src/views/ordermanage/mallorders/index.vue

@ -0,0 +1,782 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
:permission="permissionList"
:before-open="beforeOpen"
v-model="form"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template slot-scope="scope" slot="menu">
<el-button
@click="handleShiporder(scope.row)"
type="text"
size="mini"
v-if="scope.row.status != 2"
><span class="el-icon-document"></span> &nbsp;生成发货单</el-button
>
<el-button
@click="handleExpressage(scope.row.id)"
type="text"
size="mini"
v-if="scope.row.status == 3"
><span class="el-icon-document"></span> &nbsp;物流信息</el-button
>
</template>
</avue-crud>
<el-dialog
title="发货单"
v-dialogDrag
:visible.sync="shiporder"
class="avue-dialog avue-dialog--top"
append-to-body
:close-on-click-modal="false"
:before-close="handleShipClose"
>
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="120px"
class="demo-ruleForm"
>
<el-row :gutter="24">
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span>快递模块</span>
</div>
<el-col :span="12">
<el-form-item label="快递单号" prop="parcelCode">
<el-input
v-model="ruleForm.parcelCode"
size="small"
placeholder="请输入快递单号"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="快递运费" prop="freight">
<el-input
v-model="ruleForm.freight"
size="small"
placeholder="请输入快递运费"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="寄件人手机号" prop="senderPhone">
<el-input
v-model="ruleForm.senderPhone"
size="small"
placeholder="请输入寄件人手机号"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收件人手机号" prop="consigneePhone">
<el-input
v-model="ruleForm.consigneePhone"
size="small"
placeholder="请输入收件人手机号"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="快递重量" prop="kg">
<el-input
v-model="ruleForm.kg"
size="small"
placeholder="请输入快递重量"
></el-input>
</el-form-item>
</el-col>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span>出库模块</span>
</div>
<el-col :span="12">
<el-form-item label="出库商品" prop="ids">
<el-popover placement="right" width="70%" trigger="click">
<div>
<el-form
:inline="true"
:model="simcardArrPage"
class="demo-form-inline"
>
<!-- ---流量卡--- -->
<el-form-item
label="通道名称"
v-if="this.productTypes == 1"
>
<el-select
v-model="simcardArrPage.interfaceType"
placeholder="请选择"
size="small"
clearable
>
<el-option
v-for="(item, index) in interfaceType"
:key="index"
:label="item.dictValue"
:value="item.dictKey"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="iccid" v-if="this.productTypes == 1">
<el-input
v-model="simcardArrPage.iccid"
placeholder="iccid"
size="small"
clearable
></el-input>
</el-form-item>
<el-form-item
label="msisdn"
v-if="this.productTypes == 1"
>
<el-input
v-model="simcardArrPage.msisdn"
placeholder="msisdn"
size="small"
clearable
></el-input>
</el-form-item>
<!-- ---流量卡--- -->
<!-- ---机卡--- -->
<el-form-item label="sn" v-if="this.productTypes == 4">
<el-input
v-model="simcardArrPage.sn"
placeholder="sn"
size="small"
clearable
></el-input>
</el-form-item>
<el-form-item label="imei" v-if="this.productTypes == 4">
<el-input
v-model="simcardArrPage.imei"
placeholder="imei"
size="small"
clearable
></el-input>
</el-form-item>
<!-- ---机卡--- -->
<el-form-item>
<el-button
type="primary"
@click="onSubmitsimcard"
size="small"
>查询</el-button
>
</el-form-item>
</el-form>
<el-table
:row-key="rowKey"
ref="multipleTable"
:data="simcardArr"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
:reserve-selection="true"
width="50"
>
</el-table-column>
<el-table-column
v-for="(item, index) in arrLabel"
:label="item.label"
:prop="item.prop"
:key="index"
>
</el-table-column>
</el-table>
<el-pagination
background
layout="prev, pager, next"
:total="simcardArrPage.total"
:page-size="10"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
style="text-align: center; margin: top 6px"
>
</el-pagination>
</div>
<el-input
style="width: 90%"
type="textarea"
v-model="ruleForm.ids"
:rows="2"
slot="reference"
size="small"
placeholder="请点击选择出库商品"
readonly="readonly"
>
</el-input>
</el-popover>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="基础套餐" prop="dataPlanId">
<el-select
v-model="ruleForm.dataPlanId"
placeholder="请选择基础套餐"
size="mini"
style="width: 90%"
>
<el-option
v-for="(item, index) in basicpackge"
:label="item.name"
:value="item.id"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-card>
</el-row>
</el-form>
<div class="avue-dialog__footer">
<el-button type="primary" size="small" @click="handleShipAdd">
<span class="el-icon-circle-plus-outline" />&nbsp;
</el-button>
<el-button @click="handleShipClose" size="small">
<span class="el-icon-circle-close" />&nbsp;
</el-button>
</div>
</el-dialog>
<el-dialog
title="物流信息"
v-dialogDrag
:visible.sync="expressage"
class="avue-dialog avue-dialog--top"
append-to-body
:close-on-click-modal="false"
:before-close="handleExpressageclose"
>
<el-timeline :reverse="reverse">
<el-timeline-item
v-for="(activity, index) in expressagelist"
:key="index"
:timestamp="activity.time"
:color="index == 0 ? 'blue' : ''"
>
{{ activity.status }}
</el-timeline-item>
</el-timeline>
</el-dialog>
</basic-container>
</template>
<script>
import {
remove,
getDetail,
add,
update,
getList,
shipment,
deviceDeliver,
simcardList,
interfaceType,
dataplan,
getParcel,
} from "@/api/ordermanage/mallorders";
export default {
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
shiporder: false, //
expressage: false, //
expressagelist: {}, //
productTypes: "", // ......
option: {
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
columnBtn: true,
addBtn: true,
dialogClickModal: false,
dialogWidth: "45%",
labelWidth: 110,
// searchLabelWidth: 100,
column: [
{
label: "订单编号",
prop: "id",
search: true,
addDisplay: false,
rules: [
{
required: true,
message: "请输入订单编号",
trigger: "blur",
},
],
},
{
label: "商品名称",
prop: "productName",
search: true,
editDisplay: false,
rules: [
{
required: true,
message: "请输入商品名称",
trigger: "blur",
},
],
},
{
label: "商品类型",
prop: "productType",
type: "select",
search: true,
editDisplay: false,
dicUrl: "/api/iot-system/dict/dictionary?code=shop_type",
props: {
label: "dictValue",
value: "dictKey",
},
dataType: "number",
rules: [
{
required: true,
message: "请选择商品类型",
trigger: "blur",
},
],
},
{
label: "订购数量",
prop: "itemnum",
search: true,
rules: [
{
required: true,
message: "请输入订购数量",
trigger: "blur",
},
],
},
{
label: "下单用户",
prop: "shippingName",
search: true,
rules: [
{
required: true,
message: "请输入下单用户",
trigger: "blur",
},
],
},
{
label: "是否需要发货",
prop: "isDelivery",
type: "select",
search: false,
dataType: "number",
dicData: [
{
label: "不需要",
value: 1,
},
{
label: "需要发货",
value: 2,
},
],
rules: [
{
required: true,
message: "请选择是否需要发货",
trigger: "change",
},
],
},
{
label: "订单状态",
prop: "status",
type: "select",
search: true,
dicUrl: "/api/iot-system/dict/dictionary?code=order_status",
props: {
label: "dictValue",
value: "dictKey",
},
dataType: "number",
rules: [
{
required: true,
message: "请选择订单状态",
trigger: "change",
},
],
},
{
label: "订单金额",
prop: "price",
search: true,
rules: [
{
required: true,
message: "请输入订单金额",
trigger: "blur",
},
],
},
],
},
data: [],
ruleForm: {
parcelCode: "", //
freight: "", //
senderPhone: "", //
consigneePhone: "", //
kg: "", //
ids: "", //
dataPlanId: "", //
},
orderForm: {}, //
simcardArr: [], //
simcardArrPage: {
size: 5,
current: 1,
total: "0",
//
iccid: "",
msisdn: "",
interfaceType: "",
//
sn: "",
imei: "",
},
arrLabel: [], //forlabel
interfaceType: [], //
basicpackge: [], //
rules: {
parcelCode: [
{ required: true, message: "请输入快递单号", trigger: "blur" },
],
freight: [
{ required: true, message: "请输入快递运费", trigger: "blur" },
],
senderPhone: [
{ required: true, message: "请输入寄件人手机号", trigger: "blur" },
],
consigneePhone: [
{ required: true, message: "请输入收件人手机号", trigger: "blur" },
],
kg: [{ required: true, message: "请输入快递重量", trigger: "blur" }],
ids: [{ required: true, message: "请选择出库商品", trigger: "blur" }],
dataPlanId: [
{ required: false, message: "请选择出库商品", trigger: "blur" },
],
},
};
},
methods: {
rowSave(row, done, loading) {
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
window.console.log(error);
}
);
},
rowUpdate(row, index, done, loading) {
update(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
},
(error) => {
loading();
console.log(error);
}
);
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
});
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then((res) => {
this.form = res.data.data;
});
}
done();
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
this.loading = true;
getList(
page.currentPage,
page.pageSize,
Object.assign(params, this.query)
).then((res) => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
//
handleExpressage(id) {
this.expressage = true;
getParcel(id).then((res) => {
if (res.data.code == 200 && res.data != null) {
this.expressagelist = JSON.parse(res.data.data.info);
}
});
},
//
handleExpressageclose() {
this.expressage = false;
this.expressagelist = {};
},
//
handleShiporder(row) {
this.shiporder = true;
this.orderForm = {};
this.productTypes = row.productType;
this.basicpackges(); //
getDetail(row.id).then((res) => {
this.orderForm = res.data.data;
});
this.simcardArr.forEach((row) => {
this.$refs.multipleTable.toggleRowSelection(row, false);
});
if (row.productType == 1) {
(this.arrLabel = [
{
label: "id",
prop: "id",
},
{
label: "iccid",
prop: "iccid",
},
{
label: "msisdn",
prop: "msisdn",
},
]),
this.interfaceTypes();
this.getsimcardList();
} else if (row.productType == 4) {
(this.arrLabel = [
{
label: "id",
prop: "id",
},
{
label: "sn",
prop: "sn",
},
{
label: "imei",
prop: "imei",
},
]),
this.deviceDeliverList();
}
},
//
getsimcardList() {
simcardList({
size: this.simcardArrPage.size,
current: this.simcardArrPage.current,
iccid: this.simcardArrPage.iccid,
msisdn: this.simcardArrPage.msisdn,
interfaceType: this.simcardArrPage.interfaceType,
}).then((res) => {
if (res.data.code == 200) {
this.simcardArr = res.data.data.records;
this.simcardArrPage.total = res.data.data.total;
}
});
},
//
deviceDeliverList() {
deviceDeliver({
size: this.simcardArrPage.size,
current: this.simcardArrPage.current,
sn: this.simcardArrPage.sn,
imei: this.simcardArrPage.imei,
}).then((res) => {
if (res.data.code == 200) {
this.simcardArr = res.data.data.records;
this.simcardArrPage.total = res.data.data.total;
}
});
},
//
basicpackges() {
dataplan().then((res) => {
if (res.data.code == 200) {
this.basicpackge = res.data.data;
}
});
},
//
handleShipClose() {
this.shiporder = false;
this.$refs.ruleForm.resetFields();
},
//
handleShipAdd() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
shipment(
this.ruleForm,
this.orderForm,
this.ruleForm.ids,
this.ruleForm.dataPlanId
)
.then((res) => {
if (res.data.code == 200) {
this.$message.success("提交成功");
this.shiporder = false;
this.$refs.ruleForm.resetFields();
} else {
this.$message.error("提交失败");
this.shiporder = false;
this.$refs.ruleForm.resetFields();
}
})
.catch(() => {
this.$message.error("提交失败");
this.shiporder = false;
this.$refs.ruleForm.resetFields();
});
} else {
return false;
}
});
},
//
interfaceTypes() {
interfaceType().then((res) => {
if (res.data.code == 200) {
this.interfaceType = res.data.data;
}
});
},
//
handleSelectionChange(val) {
let arr = [];
val.forEach((res) => {
arr.push(res.id);
});
this.ruleForm.ids = arr.toString();
},
//
handleSizeChange(val) {
this.simcardArrPage.size = val;
if (this.productTypes == 1) {
this.getsimcardList();
} else if (this.productTypes == 4) {
this.deviceDeliverList();
}
},
handleCurrentChange(val) {
this.simcardArrPage.current = val;
if (this.productTypes == 1) {
this.getsimcardList();
} else if (this.productTypes == 4) {
this.deviceDeliverList();
}
},
//1 4
onSubmitsimcard() {
if (this.productTypes == 1) {
this.getsimcardList();
} else if (this.productTypes == 4) {
this.deviceDeliverList();
}
},
rowKey(row) {
return row.id;
},
},
};
</script>
<style scoped>
.avue-dialog__footer {
display: flex;
justify-content: flex-end;
margin-top: 10px;
}
</style>
>

25
src/views/original/targetpackagegroupmanage/index.vue

@ -86,8 +86,7 @@ export default {
searchLabelWidth: 120,
search: true,
labelWidth: 130,
dicUrl:
"/api/iot-system/dict/dictionary?code=dataPlanGroupType",
dicUrl: "/api/iot-system/dict/dictionary?code=dataPlanGroupType",
props: {
label: "dictValue",
value: "dictKey",
@ -138,22 +137,13 @@ export default {
//
rowSave(row, done, loading) {
add(Object.assign(row, this.isSources)).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -164,22 +154,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);

25
src/views/original/targetpackagemanage/index.vue

@ -98,7 +98,7 @@ export default {
searchLabelWidth: 120,
search: true,
labelWidth: 130,
dicUrl: "/api/iot-sim/dataplangroup/fillData?isSource="+2,
dicUrl: "/api/iot-sim/dataplangroup/fillData?isSource=" + 2,
props: {
label: "name",
value: "id",
@ -336,22 +336,13 @@ export default {
//
rowSave(row, done, loading) {
add(Object.assign(row, this.isSources)).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -362,22 +353,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -419,7 +401,6 @@ export default {
this.website.tokenHeader
}=${getToken()}`
);
},
onLoad(page, params = {}) {
this.loading = true;

22
src/views/package/basicpackage/index.vue

@ -313,22 +313,13 @@ export default {
//
rowSave(row, done, loading) {
add(Object.assign(row, this.isSources)).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -339,22 +330,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);

22
src/views/package/packagegroup/index.vue

@ -159,22 +159,13 @@ export default {
//
rowSave(row, done, loading) {
add(Object.assign(row, this.isSources)).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);
@ -185,22 +176,13 @@ export default {
//
rowUpdate(row, index, done, loading) {
update(row).then(
(res) => {
if (res.data.data == 1) {
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
done();
} else {
this.$message({
type: "error",
message: "操作失败!",
});
done(); //
loading(); //
}
},
(error) => {
window.console.log(error);

103
src/views/util/test.vue

@ -18,28 +18,23 @@
@refresh-change="refreshChange"
@on-load="onLoad"
>
<!-- 自定义顶部按钮 -->
<template slot-scope="scope" slot="menuLeft">
<el-button type="danger" icon="el-icon-plus" size="small" @click="next"
>下一页</el-button
<template slot-scope="scope" slot="switch">
<el-switch
size="small"
v-model="scope.row.switch"
@change="handleswitch(scope)"
>
</el-switch>
</template>
<!-- 操作栏是否显示 -->
<template slot-scope="scope" slot="menuBtn">
<el-dropdown-item>
<span class="el-icon-edit">文字按钮</span>
</el-dropdown-item>
<el-dropdown-item>
<el-popconfirm
confirm-button-text="好的"
cancel-button-text="不用了"
icon="el-icon-info"
icon-color="red"
title="这是一段内容确定删除吗?"
placement="top-start"
>
<div slot="reference">删除</div>
</el-popconfirm>
<span class="el-icon-edit">文字按钮</span>
</el-dropdown-item>
<el-dropdown-item>
<span class="el-icon-edit">文字按钮</span>
</el-dropdown-item>
</template>
</avue-crud>
@ -53,7 +48,6 @@ import { mapGetters } from "vuex";
export default {
data() {
return {
visible: false,
form: {},
query: {},
// loading: true,
@ -88,7 +82,7 @@ export default {
searchIcon: true, //
refreshBtn: true, //
filterBtn: false, //
showColumnBtn: false,
showColumnBtn: false, //
dialogType: "dialog", // dialog drawer
dialogFullscreen: false, //
dialogEscape: true, //esc
@ -109,43 +103,83 @@ export default {
size: "mini",
search: true,
span: 12,
labelWidth: 130,
searchLabelWidth: 100,
search: true,
formatter: (val, value, label) => {
if (value == "") {
return "-";
} else {
return `${value}`;
}
},
control: (val, form) => {
//control meetType()
if (val == "1" || val == "2") {
return {
auditingType: {
//
display: false,
},
};
} else {
return {
takePart: {
//
display: false,
},
};
}
},
},
{
label: "年龄",
prop: "age",
type: "input",
search: true,
span: 12,
},
{
label: "年龄",
prop: "age",
type: "input",
label: "地区",
type: "select",
prop: "province",
multiple: true,
filterable: true,
props: {
label: "label",
value: "value",
},
dicData: [
{
label: "字典1",
value: 0,
},
{
label: "字典2",
value: 1,
},
],
search: true,
span: 12,
},
{
label: "年龄",
prop: "age",
type: "input",
label: "照片",
prop: "photo",
alone: true,
type: "img",
search: true,
span: 12,
},
{
label: "年龄",
prop: "age",
type: "input",
label: "switch",
prop: "switch",
type: "switch",
slot: true,
search: true,
span: 12,
},
{
label: "年龄",
label: "formslot",
prop: "age",
type: "input",
search: true,
formslot: true,
span: 12,
},
{
@ -248,13 +282,12 @@ export default {
// },
},
methods: {
//popper
handleSure() {
this.visible = false;
this.$message.success("确定");
handleswitch(e) {
console.log(e, 9999);
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
console.log(done, type, 9988);
getDetail(this.form.id).then((res) => {
this.form = res.data.data;
});

Loading…
Cancel
Save