Browse Source

Merge branch 'dev' into pre-production

fix_bug_pro20231227
pref_mail@163.com 2 years ago
parent
commit
c4eda4764b
  1. BIN
      public/favicon.png
  2. BIN
      public/img/bg/img-logo.png
  3. BIN
      public/img/bg/logo.png
  4. BIN
      public/img/indexbg.png
  5. BIN
      public/img/logo.png
  6. BIN
      public/img/p-logo.png
  7. 50
      src/api/distribution/distributionParcelNumber.js
  8. 50
      src/api/distribution/distributionReservationZeroPackage.js
  9. 54
      src/components/tablecmt/tablecmt.vue
  10. 2
      src/config/website.js
  11. 2
      src/option/basicdata/basicdataGoodsAllocation.js
  12. 120
      src/option/distribution/distributionParcelNumber.js
  13. 120
      src/option/distribution/distributionReservationZeroPackage.js
  14. 32
      src/page/index/logo.vue
  15. 19
      src/page/login/index.vue
  16. 155
      src/page/login/userlogin.vue
  17. 626
      src/styles/flowStyle.scss
  18. 34
      src/styles/login.scss
  19. 230
      src/views/addvalue/distributionAddvalue.vue
  20. 482
      src/views/basic/deline/basicDeline.vue
  21. 1196
      src/views/basic/forklift/basicForklift.vue
  22. 2
      src/views/basic/material/basicTripartiteMaterial.vue
  23. 6
      src/views/basicdata/brand/basicClient.vue
  24. 927
      src/views/basicdata/warehouse/goodsAllocation/BasicdataGoodsAllocation.vue
  25. 1162
      src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelf.vue
  26. 412
      src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelfView.vue
  27. 1950
      src/views/distribution/deliverylist/distributionDeliveryList.vue
  28. 26
      src/views/distribution/deliverylist/distributionDeliveryListdis.vue
  29. 8
      src/views/distribution/inventory/delivery/distributionStockArticle.vue
  30. 13
      src/views/distribution/inventory/delivery/distributionStockArticleSelf.vue
  31. 2
      src/views/distribution/inventory/distributionStockListDetails.vue
  32. 25
      src/views/distribution/inventory/distrilbutionBillLading.vue
  33. 3469
      src/views/distribution/turndelivery/deliveryDiscuss.vue
  34. 285
      src/views/distribution/zero/distributionParcelNumber.vue
  35. 294
      src/views/distribution/zero/distributionReservationZeroPackage.vue
  36. 2
      src/views/system/topmenu.vue
  37. 5
      src/views/wel/index.vue

BIN
public/favicon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 46 KiB

BIN
public/img/bg/img-logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 64 KiB

BIN
public/img/bg/logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 64 KiB

BIN
public/img/indexbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
public/img/logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 64 KiB

BIN
public/img/p-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

50
src/api/distribution/distributionParcelNumber.js

@ -0,0 +1,50 @@
import request from '@/axios';
export const getList = (current, size, params) => {
return request({
url: '/api/logpm-distribution/distributionParcelNumber/list',
method: 'get',
params: {
...params,
current,
size,
}
})
}
export const getDetail = (id) => {
return request({
url: '/api/logpm-distribution/distributionParcelNumber/detail',
method: 'get',
params: {
id
}
})
}
export const remove = (ids) => {
return request({
url: '/api/logpm-distribution/distributionParcelNumber/remove',
method: 'post',
params: {
ids,
}
})
}
export const add = (row) => {
return request({
url: '/api/logpm-distribution/distributionParcelNumber/submit',
method: 'post',
data: row
})
}
export const update = (row) => {
return request({
url: '/api/logpm-distribution/distributionParcelNumber/submit',
method: 'post',
data: row
})
}

50
src/api/distribution/distributionReservationZeroPackage.js

@ -0,0 +1,50 @@
import request from '@/axios';
export const getList = (current, size, params) => {
return request({
url: '/api/logpm-distribution/distributionReservationZeroPackage/list',
method: 'get',
params: {
...params,
current,
size,
}
})
}
export const getDetail = (id) => {
return request({
url: '/api/logpm-distribution/distributionReservationZeroPackage/detail',
method: 'get',
params: {
id
}
})
}
export const remove = (ids) => {
return request({
url: '/api/logpm-distribution/distributionReservationZeroPackage/remove',
method: 'post',
params: {
ids,
}
})
}
export const add = (row) => {
return request({
url: '/api/logpm-distribution/distributionReservationZeroPackage/submit',
method: 'post',
data: row
})
}
export const update = (row) => {
return request({
url: '/api/logpm-distribution/distributionReservationZeroPackage/submit',
method: 'post',
data: row
})
}

54
src/components/tablecmt/tablecmt.vue

@ -91,8 +91,12 @@
v-if="Number(column.type) < 6 && Number(column.type) > 0"
>{{ scope.row[column.prop] }}</el-text
>
<el-switch @change="makeCargo(scope.row,column)" v-if="column.type == 11" v-model="scope.row[column.prop]" />
<el-switch
@change="makeCargo(scope.row, column)"
v-if="column.type == 11"
v-model="scope.row[column.prop]"
/>
<!-- <el-text
class="mx-2 tabculconte"
v-for="item in column.checkarr"
@ -114,6 +118,7 @@
v-model="scope.row[column.prop]"
type="number"
:min="0"
:max="scope.row.residueNumber"
></el-input>
<div class="slotbuts" v-if="column.type == 6">
<slot v-if="column.type == 6" :scope="scope"> </slot>
@ -287,7 +292,7 @@ const tableRowClassName = ({ row, rowIndex }: { row: TableDataType; rowIndex: nu
}
return '';
};
let emit = defineEmits(['inputTxt', 'timeCheck', 'selectCheck', 'selection','makeCargo']);
let emit = defineEmits(['inputTxt', 'timeCheck', 'selectCheck', 'selection', 'makeCargo']);
let newcolumnList = ref<TableColumnType[]>([]);
watchEffect(() => {
newcolumnList.value = [];
@ -344,21 +349,43 @@ function handleNumberRange(column: TableColumnType, row: TableDataType) {
//
row[column.prop] = parseInt(row[column.prop]); //
}
if (column.lessThanNum) {
if (row[column.prop] > row[column.lessThanNum]) {
row[column.prop] = row[column.lessThanNum];
// if (column.lessThanNum) {
// if (row[column.prop] > row[column.lessThanNum]) {
// row[column.prop] = row[column.lessThanNum];
// proxy.$message({
// type: 'error',
// message: '',
// });
// }
// }
//
if (row.residueNumber) {
if (row.enterNum > row.residueNumber) {
proxy.$message({
type: 'error',
message: '数量不能大于可用数量',
message: '数量不能大于可上架总数,已调整为最大数量!',
});
row.enterNum = row.residueNumber;
}
}
console.log(column, row);
//
if (row.num) {
if (row.enterNum > row.num) {
proxy.$message({
type: 'error',
message: '数量不能大于可下架总数,已调整为最大数量!',
});
row.enterNum = row.num;
}
}
console.log(row, 'row');
}
function handleEdit(index: number, row: TableDataType) {
console.log(index, row);
}
function makeCargo(value,column: TableColumnType){
function makeCargo(value, column: TableColumnType) {
emit('makeCargo', value, column);
}
function inputchange(value, column: TableColumnType) {
@ -493,7 +520,7 @@ function copyContent(content: string) {
}
}
</script>
<style lang="scss">
<style lang="scss" scope>
// :root{
// --el-checkbox-checked-bg-color:'#D3832A';
// --el-checkbox-checked-input-border-color:'#D3832A';
@ -641,7 +668,10 @@ function copyContent(content: string) {
align-items: center;
}
.el-table .el-popper{
max-width:20% !important;
.el-table .el-popper {
max-width: 20% !important;
}
.el-input {
// width: 200px !important;
}
</style>

2
src/config/website.js

@ -2,7 +2,7 @@
* 全局配置文件
*/
export default {
title: 'TWMS',
title: '货无忧物流信息平台',
logo: 'S',
key: 'TWMS', //配置主键,目前用于存储
indexTitle: '货无优 Admin',

2
src/option/basicdata/basicdataGoodsAllocation.js

@ -2,7 +2,7 @@ export default {
height: 'auto',
calcHeight: 30,
tip: false,
searchShow: true,
searchShow: false, //搜索展开
searchMenuSpan: 6,
border: true,
index: true,

120
src/option/distribution/distributionParcelNumber.js

@ -0,0 +1,120 @@
export default {
expand: false,
index: true,
border: true,
selection: true,
column: [
{
label: "主键",
prop: "id",
display: false,
hide: true,
},
{
label: "租户号",
prop: "tenantId",
display: false,
hide: true,
},
{
label: "创建人",
prop: "createUser",
display: false,
hide: true,
},
{
label: "创建时间",
prop: "createTime",
display: false,
hide: true,
},
{
label: "更新人",
prop: "updateUser",
display: false,
hide: true,
},
{
label: "更新时间",
prop: "updateTime",
display: false,
hide: true,
},
{
label: "状态",
prop: "status",
display: false,
hide: true,
},
{
label: "是否已删除",
prop: "isDeleted",
display: false,
hide: true,
},
{
label: "创建部门",
prop: "createDept",
display: false,
hide: true,
},
{
label: "预留1",
prop: "reserve1",
display: false,
hide: true,
},
{
label: "预留2",
prop: "reserve2",
display: false,
hide: true,
},
{
label: "预留3",
prop: "reserve3",
display: false,
hide: true,
},
{
label: "预留4",
prop: "reserve4",
display: false,
hide: true,
},
{
label: "预留5",
prop: "reserve5",
display: false,
hide: true,
},
{
label: "订单ID",
prop: "stockArticleId",
display: false,
hide: true,
},
{
label: "预约ID",
prop: "parcelListId",
display: false,
hide: true,
},
{
label: "总数量",
prop: "quantity",
},
{
label: "在库数量",
prop: "handQuantity",
},
{
label: "配送数量",
prop: "deliveryQuantity",
},
{
label: "签收数量",
prop: "signinQuantity",
},
]
}

120
src/option/distribution/distributionReservationZeroPackage.js

@ -0,0 +1,120 @@
export default {
expand: false,
index: true,
border: true,
selection: true,
column: [
{
label: "主键",
prop: "id",
display: false,
hide: true,
},
{
label: "租户号",
prop: "tenantId",
display: false,
hide: true,
},
{
label: "创建人",
prop: "createUser",
display: false,
hide: true,
},
{
label: "创建时间",
prop: "createTime",
display: false,
hide: true,
},
{
label: "更新人",
prop: "updateUser",
display: false,
hide: true,
},
{
label: "更新时间",
prop: "updateTime",
display: false,
hide: true,
},
{
label: "状态",
prop: "status",
display: false,
hide: true,
},
{
label: "是否已删除",
prop: "isDeleted",
display: false,
hide: true,
},
{
label: "创建部门",
prop: "createDept",
display: false,
hide: true,
},
{
label: "预留1",
prop: "reserve1",
display: false,
hide: true,
},
{
label: "预留2",
prop: "reserve2",
display: false,
hide: true,
},
{
label: "预留3",
prop: "reserve3",
display: false,
hide: true,
},
{
label: "预留4",
prop: "reserve4",
display: false,
hide: true,
},
{
label: "预留5",
prop: "reserve5",
display: false,
hide: true,
},
{
label: " 10 自提",
prop: "typesOf",
},
{
label: "订单ID",
prop: "stockArticleId",
},
{
label: "数量",
prop: "quantity",
},
{
label: "预约ID",
prop: "reservationId",
},
{
label: "零担包件状态;1-正常 ; 2 -取消 ; 3-新增",
prop: "zeroPackageStatus",
},
{
label: "品类名称",
prop: "categoryName",
},
{
label: "零担包件类型;1-商配 2-市配 3-自提",
prop: "type",
},
]
}

32
src/page/index/logo.vue

@ -1,15 +1,21 @@
<template>
<div class="avue-logo">
<transition name="fade">
<div class="logo-x">
<div class="logo-img">
<img src="../../../public/img/p-logo.png" />
</div>
<!-- <transition name="fade">
<span v-if="getScreen(isCollapse)" class="avue-logo_subtitle" key="0">
{{ website.logo }}
</span>
</transition>
<transition-group name="fade">
<template v-if="getScreen(!isCollapse)">
<span class="avue-logo_title" key="1">{{ website.indexTitle }} </span>
</template>
</transition-group>
</transition> -->
<transition-group name="fade">
<template v-if="getScreen(!isCollapse)">
<span class="avue-logo_title" key="1">{{ website.indexTitle }} </span>
</template>
</transition-group>
</div>
</div>
</template>
@ -28,3 +34,15 @@ export default {
methods: {},
};
</script>
<style lang="scss" scope>
.logo-img {
img {
width: 60px;
height: 60px;
margin-top: -5px;
}
}
.logo-x {
display: flex;
}
</style>

19
src/page/login/index.vue

@ -5,25 +5,26 @@
<div class="login-time">
{{ time }}
</div>
<p class="title">{{ $t('login.info') }}</p>
<!-- <img class="img" src="/img/logo.png" alt=""> -->
<img src="../../../public/img/indexbg.png" />
<!-- <p class="title">{{ $t('login.info') }}</p> -->
<!-- <img class="img" src="/img/logo.png" alt="" /> -->
</div>
<div class="login-border">
<div class="login-main">
<h4 class="login-title">
{{ $t('login.title') }}{{ website.title }}
<top-lang></top-lang>
<!-- {{ $t('login.title') }} -->
{{ website.title }}
<!-- <top-lang></top-lang> -->
<!-- 语言转换 -->
</h4>
<userLogin v-if="activeName === 'user'"></userLogin>
<codeLogin v-else-if="activeName === 'code'"></codeLogin>
<thirdLogin v-else-if="activeName === 'third'"></thirdLogin>
<div class="login-menu">
<!-- <a href="#" @click.stop="activeName = 'user'">{{ $t('login.userLogin') }}</a> -->
<!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>-->
<!-- <a href="#" @click.stop="activeName = 'code'">{{ $t('login.phoneLogin') }}</a> -->
<!-- <a href="#" @click.stop="activeName = 'third'">{{ $t('login.thirdLogin') }}</a> -->
<!-- <a :href="website.ssoUrl + website.redirectUri">{{ $t('login.ssoLogin') }}</a> -->
</div>

155
src/page/login/userlogin.vue

@ -1,4 +1,7 @@
<template>
<div class="login-logo">
<img src="../../../public/img/p-logo.png" />
</div>
<el-form
class="login-form"
status-icon
@ -8,45 +11,57 @@
label-width="0"
>
<el-form-item v-if="tenantMode" prop="tenantId">
<el-input
@keyup.enter="handleLogin"
v-model="loginForm.tenantId"
auto-complete="off"
:placeholder="$t('login.tenantId')"
>
<template #prefix>
<i class="icon-quanxian" />
</template>
</el-input>
<div class="inputLog">
<span class="login-tit">租户密钥</span>
<el-input
@keyup.enter="handleLogin"
v-model="loginForm.tenantId"
auto-complete="off"
:placeholder="$t('login.tenantId')"
>
<!-- <template #prefix>
<i class="icon-quanxian" />
</template> -->
</el-input>
</div>
</el-form-item>
<el-form-item prop="username">
<el-input
@keyup.enter="handleLogin"
v-model="loginForm.username"
auto-complete="off"
:placeholder="$t('login.username')"
>
<template #prefix>
<i class="icon-yonghu" />
</template>
</el-input>
<div class="inputLog">
<span class="login-tit">用户账号</span>
<el-input
@keyup.enter="handleLogin"
v-model="loginForm.username"
auto-complete="off"
:placeholder="$t('login.username')"
>
<!-- <template #prefix>
<i class="icon-yonghu" />
</template> -->
</el-input>
</div>
</el-form-item>
<el-form-item prop="password">
<el-input
@keyup.enter="handleLogin"
:type="passwordType"
v-model="loginForm.password"
auto-complete="off"
:placeholder="$t('login.password')"
>
<template #suffix>
<i class="el-icon-view el-input__icon" @click="showPassword" />
</template>
<template #prefix>
<i class="icon-mima" />
</template>
</el-input>
<div class="inputLog">
<span class="login-tit">登录密码</span>
<el-input
@keyup.enter="handleLogin"
:type="passwordType"
v-model="loginForm.password"
auto-complete="off"
:placeholder="$t('login.password')"
>
<!-- <template #suffix>
<i class="el-icon-view el-input__icon" @click="showPassword" />
</template> -->
<!-- <template #prefix>
<i class="icon-mima" />
</template> -->
</el-input>
</div>
</el-form-item>
<el-checkbox v-model="checked2">记住密码</el-checkbox>
<el-form-item v-if="this.website.captchaMode" prop="code">
<el-row :span="24">
<el-col :span="16">
@ -171,6 +186,7 @@ export default {
],
},
};
const checked2 = ref(true);
},
created() {
this.getTenant();
@ -198,7 +214,7 @@ export default {
},
},
computed: {
...mapGetters(['tagWel', 'userInfo','setting']),
...mapGetters(['tagWel', 'userInfo', 'setting']),
},
props: [],
methods: {
@ -240,7 +256,7 @@ export default {
if (this.website.switchMode) {
const deptId = this.userInfo.dept_id;
const roleId = this.userInfo.role_id;
if (deptId.includes(',') || roleId.includes(',')) {
this.loginForm.deptId = deptId;
this.loginForm.roleId = roleId;
@ -279,4 +295,69 @@ export default {
};
</script>
<style></style>
<style lang="scss" scope>
.inputLog {
display: flex;
color: #002e55;
font-weight: bold;
span {
width: 100px;
display: flex;
align-items: center;
justify-content: center;
letter-spacing: 2px;
}
}
.el-input__inner {
border-radius: 6px;
background-color: #f4f8fb;
padding: 0 10px;
color: #002e55;
font-weight: 700;
letter-spacing: 2px;
}
.el-checkbox {
margin-left: 24%;
}
.el-input__wrapper {
padding-bottom: 0 !important;
border: 0 !important ;
}
.el-button {
border-radius: 8px;
}
.el-checkbox__input.is-checked + .el-checkbox__label {
font-weight: 500;
color: #002e55 !important;
}
.el-input__wrapper {
background-color: #f4f8fb !important;
border-radius: 4px;
}
.login-main {
position: reactive;
}
.login-logo {
position: absolute;
right: 60px;
top: 82px;
img {
width: 60px;
height: 60px;
}
}
.login-title {
padding-right: 16px;
}
.inputLog span {
justify-content: flex-end;
}
.login-tit {
display: flex;
justify-content: flex-start !important;
}
.el-form-item__error {
color: #ff0000;
}
</style>

626
src/styles/flowStyle.scss

@ -1,339 +1,343 @@
.bx {
position: relative;
.ztjk {
position: relative;
margin-left: 7.5%;
margin-top: 2%;
.ztjk {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
top: 235px;
left: 680px;
> img {
width: 62px;
height: 62px;
}
}
.left {
width: 640px !important;
height: 500px;
background: #ffffff;
box-shadow: 0px 6px 0 #f3e2cc, 0px 0px 20px #f3e2cc;
border-radius: 32px;
opacity: 1;
box-sizing: border-box;
position: absolute;
left: 20px;
top: 10px;
padding: 30px 44px;
.tptitl {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
top: 235px;
left: 680px;
> img {
width: 62px;
height: 62px;
width: 32px;
height: 22px;
margin-right: 8px;
}
}
.left {
width: 640px !important;
height: 500px;
background: #ffffff;
box-shadow: 0px 0px 16px 0px rgba(211, 131, 42, 0.1);
border-radius: 32px;
opacity: 1;
box-sizing: border-box;
position: absolute;
left: 20px;
top: 10px;
padding: 30px 44px;
.tptitl {
.onebx1 {
width: 100%;
height: 100%;
position: relative;
margin-top: 30px;
> div {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
> img {
width: 32px;
height: 22px;
margin-right: 8px;
width: 62px;
height: 62px;
}
}
.onebx1 {
width: 100%;
height: 100%;
position: relative;
margin-top: 30px;
> div {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
> img {
width: 62px;
height: 62px;
}
}
.item1 {
top: 10px;
left: 0px;
}
.item2 {
top: 140px;
left: 0px;
}
.item3 {
top: 10px;
left: 140px;
}
.item4 {
top: 140px;
left: 140px;
}
.item5 {
top: 270px;
left: 140px;
}
.item6 {
top: 10px;
left: 330px;
}
.item7 {
top: 140px;
left: 330px;
}
.item8 {
top: 140px;
left: 450px;
}
.upimg {
width: 15px;
height: 40px;
position: absolute;
left: 355px;
top: 100px;
}
.rigth1 {
width: 40px;
height: 15px;
position: absolute;
left: 80px;
top: 40px;
}
.rigth2 {
width: 40px;
height: 15px;
position: absolute;
left: 80px;
top: 180px;
}
.rigth3 {
width: 40px;
height: 15px;
position: absolute;
left: 400px;
top: 180px;
}
.rigth4 {
width: 40px;
height: 15px;
position: absolute;
left: 530px;
top: 180px;
}
.rigthall {
width: 40px;
height: 270px;
position: absolute;
left: 250px;
top: 50px;
}
.item1 {
top: 10px;
left: 0px;
}
.item2 {
top: 140px;
left: 0px;
}
.item3 {
top: 10px;
left: 140px;
}
.item4 {
top: 140px;
left: 140px;
}
.item5 {
top: 270px;
left: 140px;
}
.item6 {
top: 10px;
left: 330px;
}
.item7 {
top: 140px;
left: 330px;
}
.item8 {
top: 140px;
left: 450px;
}
.upimg {
width: 15px;
height: 40px;
position: absolute;
left: 355px;
top: 100px;
}
.rigth1 {
width: 40px;
height: 15px;
position: absolute;
left: 80px;
top: 40px;
}
.rigth2 {
width: 40px;
height: 15px;
position: absolute;
left: 80px;
top: 180px;
}
.rigth3 {
width: 40px;
height: 15px;
position: absolute;
left: 400px;
top: 180px;
}
.rigth4 {
width: 40px;
height: 15px;
position: absolute;
left: 530px;
top: 180px;
}
.rigthall {
width: 40px;
height: 270px;
position: absolute;
left: 250px;
top: 50px;
}
}
}
.rigth {
width: 640px;
height: 500px;
background: #ffffff;
box-shadow: 0px 6px 0 #d3f6ef, 0px 0px 20px #d3f6ef;
border-radius: 32px;
opacity: 1;
box-sizing: border-box;
position: absolute;
left: 760px;
top: 10px;
padding: 30px 44px;
.tptitl {
display: flex;
align-items: center;
> img {
width: 32px;
height: 22px;
margin-right: 8px;
}
}
.rigth {
width: 640px;
height: 500px;
background: #ffffff;
box-shadow: 0px 0px 16px 0px rgba(58, 216, 188, 0.102);
border-radius: 32px;
opacity: 1;
box-sizing: border-box;
position: absolute;
left: 760px;
top: 10px;
padding: 30px 44px;
.tptitl {
.onebx1 {
width: 100%;
height: 100%;
position: relative;
margin-top: 30px;
> div {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
> img {
width: 32px;
height: 22px;
margin-right: 8px;
width: 62px;
height: 62px;
}
}
.onebx1 {
width: 100%;
height: 100%;
position: relative;
margin-top: 30px;
> div {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
> img {
width: 62px;
height: 62px;
}
}
.item1 {
top: 140px;
left: 50px;
}
.item2 {
top: 140px;
left: 170px;
}
.item3 {
top: 270px;
left: 170px;
}
.item4 {
top: 10px;
left: 300px;
}
.item5 {
top: 140px;
left: 300px;
}
.item6 {
top: 10px;
left: 430px;
}
.item7 {
top: 140px;
left: 430px;
}
.item8 {
top: 270px;
left: 430px;
}
.upimg {
width: 15px;
height: 40px;
position: absolute;
left: 190px;
top: 230px;
}
.rigth1 {
width: 40px;
height: 15px;
position: absolute;
left: 0px;
top: 180px;
}
.rigth2 {
width: 40px;
height: 15px;
position: absolute;
left: 120px;
top: 180px;
}
.rigth3 {
width: 40px;
height: 15px;
position: absolute;
left: 375px;
top: 180px;
}
.rigth4 {
width: 40px;
height: 15px;
position: absolute;
left: 375px;
top: 50px;
}
.leftall {
width: 182px;
height: 540px;
position: absolute;
left: 350px;
top: 50px;
z-index: 99;
}
.rigthall {
width: 165px;
height: 270px;
position: absolute;
left: 250px;
top: 50px;
}
.item1 {
top: 140px;
left: 50px;
}
.item2 {
top: 140px;
left: 170px;
}
.item3 {
top: 270px;
left: 170px;
}
.item4 {
top: 10px;
left: 300px;
}
.item5 {
top: 140px;
left: 300px;
}
.item6 {
top: 10px;
left: 430px;
}
.item7 {
top: 140px;
left: 430px;
}
.item8 {
top: 270px;
left: 430px;
}
.upimg {
width: 15px;
height: 40px;
position: absolute;
left: 190px;
top: 230px;
}
.rigth1 {
width: 40px;
height: 15px;
position: absolute;
left: 0px;
top: 180px;
}
.rigth2 {
width: 40px;
height: 15px;
position: absolute;
left: 120px;
top: 180px;
}
.rigth3 {
width: 40px;
height: 15px;
position: absolute;
left: 375px;
top: 180px;
}
.rigth4 {
width: 40px;
height: 15px;
position: absolute;
left: 375px;
top: 50px;
}
.leftall {
width: 182px;
height: 540px;
position: absolute;
left: 350px;
top: 50px;
z-index: 99;
}
.rigthall {
width: 165px;
height: 270px;
position: absolute;
left: 250px;
top: 50px;
}
}
.buts {
width: 1380px;
height: 234px;
background: #ffffff;
box-shadow: 0 0 16px 0 rgba(0, 134, 241, 0.102);
border-radius: 32px;
opacity: 1;
position: absolute;
box-sizing: border-box;
left: 20px;
top: 540px;
padding: 30px 44px;
.tptitl {
}
.buts {
width: 1380px;
height: 234px;
background: #ffffff;
box-shadow: 0px 6px 0 #c5e5fa, 0px 0px 20px #c5e5fa;
border-radius: 32px;
opacity: 1;
position: absolute;
box-sizing: border-box;
left: 20px;
top: 540px;
padding: 30px 44px;
.tptitl {
display: flex;
align-items: center;
> img {
width: 32px;
height: 22px;
margin-right: 8px;
}
}
.onebx1 {
width: 100%;
height: 100%;
position: relative;
margin-top: 30px;
> div {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
> img {
width: 32px;
height: 22px;
margin-right: 8px;
width: 62px;
height: 62px;
}
}
.onebx1{
width: 100%;
height: 100%;
position: relative;
margin-top: 30px;
> div {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
font-size: 14px;
font-size: #747474;
> img {
width: 62px;
height: 62px;
}
}
.item1{
left: 1000px;
top:10px;
}
.item2{
left: 800px;
top:10px;
}
.item3{
left: 600px;
top:10px;
}
.item4{
left: 400px;
top:10px;
}
.left1{
width: 60px;
height: 15px;
position: absolute;
left: 900px;
top: 50px;
transform: rotate(180deg);
}
.left2{
width: 60px;
height: 15px;
position: absolute;
left: 700px;
top: 50px;
transform: rotate(180deg);
}
.left3{
width: 60px;
height: 15px;
position: absolute;
left: 500px;
top: 50px;
transform: rotate(180deg);
}
.item1 {
left: 1000px;
top: 10px;
}
.item2 {
left: 800px;
top: 10px;
}
.item3 {
left: 600px;
top: 10px;
}
.item4 {
left: 400px;
top: 10px;
}
.left1 {
width: 60px;
height: 15px;
position: absolute;
left: 900px;
top: 50px;
transform: rotate(180deg);
}
.left2 {
width: 60px;
height: 15px;
position: absolute;
left: 700px;
top: 50px;
transform: rotate(180deg);
}
.left3 {
width: 60px;
height: 15px;
position: absolute;
left: 500px;
top: 50px;
transform: rotate(180deg);
}
}
}
.tptitl{
color: #172E60;
}
.bx{
user-select: none;
}
}
.tptitl {
color: #172e60;
}
.bx {
user-select: none;
}

34
src/styles/login.scss

@ -5,14 +5,14 @@
width: 100%;
height: 100%;
margin: 0 auto;
background-image: url("/img/bg/bg.jpg");
background-image: url('/img/bg/bg.jpg');
background-size: 100% 100%;
}
.login-weaper {
margin: 0 auto;
width: 1000px;
box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4);
box-shadow: 1px 1px 4px #d9d9d9;
.el-input-group__append {
border: none;
@ -32,7 +32,7 @@
border-bottom-left-radius: 5px;
justify-content: center;
flex-direction: column;
background-color: #8b9aac;
background-color: #fff;
color: #fff;
float: left;
width: 50%;
@ -48,8 +48,8 @@
left: 25px;
top: 25px;
width: 100%;
color: #fff;
font-weight: 200;
color: #002e55;
font-weight: 500;
opacity: 0.9;
font-size: 18px;
overflow: hidden;
@ -76,7 +76,7 @@
.login-main {
margin: 0 auto;
width: 65%;
width: 100%;
box-sizing: border-box;
}
@ -89,10 +89,10 @@
}
.login-title {
color: #333;
color: #002e55;
margin-bottom: 40px;
font-weight: 500;
font-size: 22px;
font-weight: 600;
font-size: 30px;
text-align: center;
letter-spacing: 4px;
}
@ -112,20 +112,24 @@
.login-submit {
width: 100%;
height: 45px;
border: 1px solid #172e60;
// border: 1px solid #172e60;
border: 0;
background: none;
font-size: 18px;
letter-spacing: 2px;
font-weight: 300;
color: #172e60;
color: #fff;
cursor: pointer;
margin-top: 30px;
font-family: "neo";
font-family: 'neo';
transition: 0.25s;
background-color: #d3822a !important;
}
.login-form {
margin: 10px 0;
width: 65%;
margin: 0 auto;
i {
color: #333;
@ -181,3 +185,9 @@
text-align: center;
cursor: pointer !important;
}
.el-input__suffix {
// width: 5px !important;
}
.inputLog span.el-input__suffix-inner {
width: 5px !important;
}

230
src/views/addvalue/distributionAddvalue.vue

@ -1,7 +1,7 @@
<template>
<basic-container>
<div class="avue-crud">
<el-row :hidden="!search" style="padding:6px 18px">
<el-row :hidden="!search" style="padding: 6px 18px">
<!-- 查询模块 -->
<el-form :inline="true" :model="query">
<!-- 查询按钮 -->
@ -16,7 +16,9 @@
<!-- 头部左侧按钮模块 -->
<div class="avue-crud__left">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"> </el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain
> </el-button
>
</div>
<!-- 头部右侧按钮模块 -->
<div class="avue-crud__right">
@ -27,93 +29,121 @@
</el-row>
<el-row>
<!-- 列表模块 -->
<el-table ref="table" v-loading="loading"
@selection-change="selectionChange"
:data="data"
:height="height"
style="width: 100%"
:border="option.border">
<el-table-column type="selection" v-if="option.selection" width="55" align="center"></el-table-column>
<el-table
ref="table"
v-loading="loading"
@selection-change="selectionChange"
:data="data"
:height="height"
style="width: 100%"
:border="option.border"
>
<el-table-column
type="selection"
v-if="option.selection"
width="55"
align="center"
></el-table-column>
<el-table-column type="expand" v-if="option.expand" align="center"></el-table-column>
<el-table-column v-if="option.index" label="#" type="index" width="50" align="center">
</el-table-column>
<template v-for="(item,index) in option.column">
<template v-for="(item, index) in option.column">
<!-- table字段 -->
<el-table-column v-if="item.hide!==true"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="index">
<el-table-column
v-if="item.hide !== true"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="index"
>
</el-table-column>
</template>
<!-- 操作栏模块 -->
<el-table-column prop="menu" label="操作" :width="220" align="center">
<template #="{row}">
<el-button type="primary" text icon="el-icon-view" @click="handleView(row)">查看</el-button>
<el-button type="primary" text icon="el-icon-edit" @click="handleEdit(row)">编辑</el-button>
<el-button type="primary" text icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
<template #="{ row }">
<el-button type="primary" text icon="el-icon-view" @click="handleView(row)"
>查看</el-button
>
<el-button type="primary" text icon="el-icon-edit" @click="handleEdit(row)"
>编辑</el-button
>
<el-button type="primary" text icon="el-icon-delete" @click="rowDel(row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<div class="avue-crud__pagination" style="width:100%">
<div class="avue-crud__pagination" style="width: 100%">
<!-- 分页模块 -->
<el-pagination align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
<el-pagination
align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total"
>
</el-pagination>
</div>
</el-row>
<!-- 表单模块 -->
<el-dialog :title="title"
v-model="box"
width="50%"
:before-close="beforeClose"
append-to-body>
<el-dialog
:title="title"
v-model="box"
width="50%"
:before-close="beforeClose"
append-to-body
>
<el-form :disabled="view" ref="form" :model="form" label-width="80px">
<!-- 表单字段 -->
<el-form-item label="增值服务关联码表;码表;1-上楼、2-超区、3-拆样、4-平移、5-分拣、6-搬运、7-返货;" prop="addvalueId">
<el-input v-model="form.addvalueId" placeholder="请输入增值服务关联码表;码表;1-上楼、2-超区、3-拆样、4-平移、5-分拣、6-搬运、7-返货;"/>
<el-form-item
label="增值服务关联码表;码表;1-上楼、2-超区、3-拆样、4-平移、5-分拣、6-搬运、7-返货;"
prop="addvalueId"
>
<el-input
v-model="form.addvalueId"
placeholder="请输入增值服务关联码表;码表;1-上楼、2-超区、3-拆样、4-平移、5-分拣、6-搬运、7-返货;"
/>
</el-form-item>
<el-form-item label="关联表ID" prop="refId">
<el-input v-model="form.refId" placeholder="请输入关联表ID"/>
<el-input v-model="form.refId" placeholder="请输入关联表ID" />
</el-form-item>
<el-form-item label="关联类型 1 预约单 2 配送单 3 ." prop="refType">
<el-input v-model="form.refType" placeholder="请输入关联类型 1 预约单 2 配送单 3 ."/>
<el-input v-model="form.refType" placeholder="请输入关联类型 1 预约单 2 配送单 3 ." />
</el-form-item>
<el-form-item label="编号" prop="code">
<el-input v-model="form.code" placeholder="请输入编号"/>
<el-input v-model="form.code" placeholder="请输入编号" />
</el-form-item>
<el-form-item label="预留1" prop="reserve1">
<el-input v-model="form.reserve1" placeholder="请输入预留1"/>
<el-input v-model="form.reserve1" placeholder="请输入预留1" />
</el-form-item>
<el-form-item label="预留2" prop="reserve2">
<el-input v-model="form.reserve2" placeholder="请输入预留2"/>
<el-input v-model="form.reserve2" placeholder="请输入预留2" />
</el-form-item>
<el-form-item label="预留3" prop="reserve3">
<el-input v-model="form.reserve3" placeholder="请输入预留3"/>
<el-input v-model="form.reserve3" placeholder="请输入预留3" />
</el-form-item>
<el-form-item label="预留4" prop="reserve4">
<el-input v-model="form.reserve4" placeholder="请输入预留4"/>
<el-input v-model="form.reserve4" placeholder="请输入预留4" />
</el-form-item>
<el-form-item label="预留5" prop="reserve5">
<el-input v-model="form.reserve5" placeholder="请输入预留5"/>
<el-input v-model="form.reserve5" placeholder="请输入预留5" />
</el-form-item>
<el-form-item label="费用" prop="fee">
<el-input v-model="form.fee" placeholder="请输入费用"/>
<el-input v-model="form.fee" placeholder="请输入费用" />
</el-form-item>
</el-form>
<!-- 表单按钮 -->
<template #footer>
<span v-if="!view" class="dialog-footer">
<el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit"> </el-button>
<el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit"
> </el-button
>
<el-button icon="el-icon-circle-close" @click="box = false"> </el-button>
</span>
</template>
@ -123,12 +153,12 @@
</template>
<script>
import { getList, getDetail, add, update, remove } from "@/api/addvalue/distributionAddvalue";
import option from "@/option/addvalue/distributionAddvalue";
import { mapGetters } from "vuex";
import { getList, getDetail, add, update, remove } from '@/api/addvalue/distributionAddvalue';
import option from '@/option/addvalue/distributionAddvalue';
import { mapGetters } from 'vuex';
export default {
data () {
data() {
return {
height: 0,
//
@ -147,7 +177,7 @@ export default {
page: {
currentPage: 1,
pageSize: 10,
total: 40
total: 40,
},
//
form: {},
@ -157,45 +187,45 @@ export default {
option: option,
//
data: [],
}
};
},
mounted () {
mounted() {
this.init();
this.onLoad(this.page);
},
computed: {
...mapGetters(["permission"]),
ids () {
...mapGetters(['permission']),
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
}
return ids.join(',');
},
},
methods: {
init () {
init() {
this.height = this.setPx(document.body.clientHeight - 340);
},
searchHide () {
searchHide() {
this.search = !this.search;
},
searchChange () {
searchChange() {
this.onLoad(this.page);
},
searchReset () {
searchReset() {
this.query = {};
this.page.currentPage = 1;
this.onLoad(this.page);
},
handleSubmit () {
handleSubmit() {
if (!this.form.id) {
add(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
type: 'success',
message: '操作成功!',
});
});
} else {
@ -203,41 +233,41 @@ export default {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
type: 'success',
message: '操作成功!',
});
})
});
}
},
handleAdd () {
this.title = '新增'
this.form = {}
this.box = true
handleAdd() {
this.title = '新增';
this.form = {};
this.box = true;
},
handleEdit (row) {
this.title = '编辑'
this.box = true
handleEdit(row) {
this.title = '编辑';
this.box = true;
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleView (row) {
this.title = '查看'
handleView(row) {
this.title = '查看';
this.view = true;
this.box = true;
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleDelete () {
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
this.$message.warning('请选择至少一条数据');
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
return remove(this.ids);
@ -246,16 +276,16 @@ export default {
this.selectionClear();
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
type: 'success',
message: '操作成功!',
});
});
},
rowDel (row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
rowDel(row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
return remove(row.id);
@ -263,32 +293,32 @@ export default {
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
type: 'success',
message: '操作成功!',
});
});
},
beforeClose (done) {
done()
beforeClose(done) {
done();
this.form = {};
this.view = false;
},
selectionChange (list) {
selectionChange(list) {
this.selectionList = list;
},
selectionClear () {
selectionClear() {
this.selectionList = [];
this.$refs.table.clearSelection();
},
currentChange (currentPage) {
currentChange(currentPage) {
this.page.currentPage = currentPage;
this.onLoad(this.page);
},
sizeChange (pageSize) {
sizeChange(pageSize) {
this.page.pageSize = pageSize;
this.onLoad(this.page);
},
onLoad (page, params = {}) {
onLoad(page, params = {}) {
this.loading = true;
getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
const data = res.data.data;
@ -297,7 +327,7 @@ export default {
this.loading = false;
this.selectionClear();
});
}
}
},
},
};
</script>

482
src/views/basic/deline/basicDeline.vue

@ -1,278 +1,286 @@
<template>
<basic-container>
<avue-crud v-if="edit"
<avue-crud
v-if="edit"
:option="option"
v-model:search="search"
v-model:page="page"
v-model="form"
:table-loading="loading"
:data="data"
:permission="permissionList"
:before-open="beforeOpen"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad">
v-model:search="search"
v-model:page="page"
v-model="form"
:table-loading="loading"
:data="data"
:permission="permissionList"
:before-open="beforeOpen"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template #menu-left>
<el-button type="danger"
icon="el-icon-delete"
plain
v-if="permission.basicDeline_delete"
@click="handleDelete">
<el-button
type="danger"
icon="el-icon-delete"
plain
v-if="permission.basicDeline_delete"
@click="handleDelete"
>
</el-button>
<el-button type="primary" icon="el-icon-plus" @click="addEditDeline()"> </el-button>
<el-button type="primary" @click="nodeManagement()"> </el-button>
<!-- <el-button type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- @click="handleExport"> -->
<!-- </el-button>-->
<el-button type="primary" icon="el-icon-plus" @click="addEditDeline()"> </el-button>
<el-button type="primary" @click="nodeManagement()"> </el-button>
<!-- <el-button type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- @click="handleExport"> -->
<!-- </el-button>-->
</template>
<template #menu="{size,row,index}">
<el-button type="primary" text icon="el-icon-view" @click="addEditDeline(row)"> </el-button>
<el-button type="primary" text icon="el-icon-view" @click="viewDeline(row)"> </el-button>
<template #menu="{ size, row, index }">
<el-button type="primary" text icon="el-icon-view" @click="addEditDeline(row)"
> </el-button
>
<el-button type="primary" text icon="el-icon-view" @click="viewDeline(row)"
> </el-button
>
</template>
</avue-crud>
<basicDeLineform v-if="!edit" @returnDeline ="returnDeline" :delineformdata="delineformdata" />
<basicDeLineform v-if="!edit" @returnDeline="returnDeline" :delineformdata="delineformdata" />
</basic-container>
</template>
<script>
import {getList, getDetail, add, update, remove} from "@/api/basic/basicDeline";
import option from "@/option/basic/basicDeline";
import {mapGetters} from "vuex";
import {exportBlob} from "@/api/common";
import {getToken} from '@/utils/auth';
import {downloadXls} from "@/utils/util";
import {dateNow} from "@/utils/date";
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import basicDeLineform from '/src/views/basic/deline/basicdeLineform.vue'
export default {
components: { basicDeLineform },
data() {
import { getList, getDetail, add, update, remove } from '@/api/basic/basicDeline';
import option from '@/option/basic/basicDeline';
import { mapGetters } from 'vuex';
import { exportBlob } from '@/api/common';
import { getToken } from '@/utils/auth';
import { downloadXls } from '@/utils/util';
import { dateNow } from '@/utils/date';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import basicDeLineform from '/src/views/basic/deline/basicdeLineform.vue';
export default {
components: { basicDeLineform },
data() {
return {
form: {},
query: {},
search: {},
loading: true,
edit: true,
delineformdata: {},
page: {
pageSize: 30,
currentPage: 1,
total: 0,
},
selectionList: [],
option: option,
data: [],
};
},
computed: {
...mapGetters(['permission']),
permissionList() {
return {
form: {},
query: {},
search: {},
loading: true,
edit:true,
delineformdata:{},
page: {
pageSize: 30,
currentPage: 1,
total: 0
},
selectionList: [],
option: option,
data: []
addBtn: this.validData(this.permission.basicDeline_add, false),
viewBtn: this.validData(this.permission.basicDeline_view, false),
delBtn: this.validData(this.permission.basicDeline_delete, false),
editBtn: this.validData(this.permission.basicDeline_edit, false),
};
},
computed: {
...mapGetters(["permission"]),
permissionList() {
return {
addBtn: this.validData(this.permission.basicDeline_add, false),
viewBtn: this.validData(this.permission.basicDeline_view, false),
delBtn: this.validData(this.permission.basicDeline_delete, false),
editBtn: this.validData(this.permission.basicDeline_edit, false)
};
},
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(',');
},
},
methods: {
//
nodeManagement() {
this.$router.push({
path: '/basic/delinenode/basicDelineNode',
query: {},
});
},
returnDeline(val) {
console.log('取消>>>>>', val);
this.edit = true;
},
addEditDeline(row) {
console.log('row>>>>>>>>>>>>>>>>>>>>', row);
this.delineformdata = {};
this.delineformdata.view = false;
if (!!row) {
this.delineformdata = row;
this.delineformdata.view = false;
this.delineformdata.delinenode = [{}];
this.delineformdata.end = [{}];
}
this.edit = false;
},
methods: {
//
nodeManagement(){
this.$router.push({
path: '/basic/delinenode/basicDelineNode',
query: {
}
});
},
returnDeline(val){
console.log("取消>>>>>",val);
this.edit = true;
},
addEditDeline(row){
console.log("row>>>>>>>>>>>>>>>>>>>>",row);
this.delineformdata={}
this.delineformdata.view =false;
if (!!row){
this.delineformdata = row
this.delineformdata.view =false;
this.delineformdata.delinenode = [{}]
this.delineformdata.end = [{}]
}
this.edit =false
},
viewDeline(row){
console.log("row>>>>>>>>>>>>>>>>>>>>",row);
this.delineformdata={}
viewDeline(row) {
console.log('row>>>>>>>>>>>>>>>>>>>>', row);
this.delineformdata = {};
// if (!!row){
this.delineformdata = row
this.delineformdata.view =true;
this.delineformdata.delinenode = [{}]
this.delineformdata.end = [{}]
// }
this.edit =false
},
rowSave(row, done, loading) {
add(row).then(() => {
this.delineformdata = row;
this.delineformdata.view = true;
this.delineformdata.delinenode = [{}];
this.delineformdata.end = [{}];
// }
this.edit = false;
},
rowSave(row, done, loading) {
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
type: 'success',
message: '操作成功!',
});
done();
}, error => {
},
error => {
loading();
window.console.log(error);
});
},
rowUpdate(row, index, done, loading) {
update(row).then(() => {
}
);
},
rowUpdate(row, index, done, loading) {
update(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
type: 'success',
message: '操作成功!',
});
done();
}, error => {
},
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: "操作成功!"
});
});
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
);
},
rowDel(row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
return remove(row.id);
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
this.$refs.crud.toggleSelection();
.then(() => {
this.onLoad(this.page);
this.$message({
type: 'success',
message: '操作成功!',
});
},
handleExport() {
let downloadUrl = `/basic/basicDeline/export-basicDeline?${this.website.tokenHeader}=${getToken()}`;
const {
warehouseId,
} = this.query;
let values = {
warehouseId_equal: warehouseId,
};
this.$confirm("是否导出数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
NProgress.start();
exportBlob(downloadUrl, values).then(res => {
downloadXls(res.data, `提货路线${dateNow()}.xlsx`);
NProgress.done();
})
});
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then(res => {
this.form = res.data.data;
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning('请选择至少一条数据');
return;
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: 'success',
message: '操作成功!',
});
}
done();
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.crud.toggleSelection();
},
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;
this.$refs.crud.toggleSelection();
});
},
handleExport() {
let downloadUrl = `/basic/basicDeline/export-basicDeline?${
this.website.tokenHeader
}=${getToken()}`;
const { warehouseId } = this.query;
let values = {
warehouseId_equal: warehouseId,
};
this.$confirm('是否导出数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
NProgress.start();
exportBlob(downloadUrl, values).then(res => {
downloadXls(res.data, `提货路线${dateNow()}.xlsx`);
NProgress.done();
});
});
},
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();
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.crud.toggleSelection();
},
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;
const {
warehouseId,
} = this.query;
const { warehouseId } = this.query;
let values = {
warehouseId_equal: warehouseId,
};
let values = {
warehouseId_equal: warehouseId,
};
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
this.selectionClear();
});
}
}
};
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
this.selectionClear();
});
},
},
};
</script>
<style>
</style>
<style></style>

1196
src/views/basic/forklift/basicForklift.vue

File diff suppressed because it is too large Load Diff

2
src/views/basic/material/basicTripartiteMaterial.vue

@ -207,7 +207,7 @@ export default {
option: option,
//
data: [],
drawerShow:false,
drawerShow: false,
};
},
mounted() {

6
src/views/basicdata/brand/basicClient.vue

@ -691,7 +691,7 @@ export default {
{ type: 'date', required: true, message: '请选择合同开始时间', trigger: 'change' },
],
bladeRegionProvinceId: [{ required: true, message: '请选择地址', trigger: 'change' }],
leaseAccessories: [{ required: true, message: '请上传合同文件', trigger: 'blur' }],
// leaseAccessories: [{ required: true, message: '', trigger: 'blur' }],
},
bianji: false,
@ -1049,7 +1049,7 @@ export default {
});
this.form.leaseAccessories = li.length > 0 ? li.join(',') : null;
} else {
return this.$message.warning('请上传文件!');
// return this.$message.warning('');
}
} else {
if (this.fileList.length > 0) {
@ -1060,7 +1060,7 @@ export default {
});
this.form.leaseAccessories = li.length > 0 ? li.join(',') : null;
} else {
return this.$message.warning('请上传文件!');
// return this.$message.warning('');
}
}

927
src/views/basicdata/warehouse/goodsAllocation/BasicdataGoodsAllocation.vue

File diff suppressed because it is too large Load Diff

1162
src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelf.vue

File diff suppressed because it is too large Load Diff

412
src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelfView.vue

@ -33,19 +33,19 @@
<div class="tips">
<el-button icon="el-icon-refresh" @click="checkshelves" circle></el-button>
<div class="exprbuts" @click="handleExportArea">导出</div>
<div>
<div class="ls-box">
总货位:
<span class="def">{{ countnumber.cargoNub }}</span>
</div>
<div>
<div class="ls-box">
占用货位:
<span class="red">{{ countnumber.employNub }}</span>
</div>
<div>
<div class="ls-box">
未用货位:
<span class="green">{{ countnumber.unusedNub }}</span>
</div>
<div>
<div class="ls-box">
禁用货位:
<span class="red">{{ countnumber.disableNub }}</span>
</div>
@ -66,37 +66,42 @@
</div>
</el-scrollbar>
</div>
<div class="tips">
<div>
总货位:
<span class="def">{{ boxdetails.cargoNub }}</span>
</div>
<div>
占用货位:
<span class="red">{{ boxdetails.employNub }}</span>
</div>
<div>
未用货位:
<span class="green">{{ boxdetails.unusedNub }}</span>
</div>
<div>
禁用货位:
<span class="red">{{ boxdetails.disableNub }}</span>
</div>
<div>
货物总数:
<span class="red">{{ boxdetails.goodsNub }}</span>
</div>
<div class="tips tips-Menu">
<div>
总货位:
<span class="def">{{ boxdetails.cargoNub }}</span>
</div>
<div>
占用货位:
<span class="red">{{ boxdetails.employNub }}</span>
</div>
<div>
未用货位:
<span class="green">{{ boxdetails.unusedNub }}</span>
</div>
<div>
禁用货位:
<span class="red">{{ boxdetails.disableNub }}</span>
</div>
<div>
货物总数:
<span class="red">{{ boxdetails.goodsNub }}</span>
</div>
</div>
<div class="mabx">
<el-scrollbar max-height="70vh">
<el-scrollbar max-height="70vh" class="contentbj">
<div class="contentbx" :style="contenbxsty">
<div class="itemwbox" v-for="item in contenarr">
<div class="itemmibox" v-for="ite in item">
<div
:class="ite.enableStatus == 2 ? 'itemmibox rotate' : 'itemmibox'"
v-for="ite in item"
>
<div v-if="ite.enableStatus == 2">禁用货位</div>
<el-tooltip
:disabled="Number(ite.enableStatus) == 2"
placement="bottom"
hide-after="50"
v-else
>
<template #content>
<div v-if="ite.allocationStatus == 1">没有货位信息</div>
@ -131,11 +136,26 @@
: 'itembox'
"
>
<div class="titls">{{ (arrlist[checkselect]?.warehouseGoodsAreaVOList[checkregionselect].headline)+'-'+ite.layerNum + '层' + '-' + ite.columnNum + '列' }}</div>
<div>{{ '包件数:' + ite.packageNum }}</div>
<div>{{ '订单数:' + ite.orderNum }}</div>
<div>{{ '零担数:' + ite.lessNum }}</div>
<div>{{ '库存品数:' + ite.inventoryNum }}</div>
<div class="titls">
{{
arrlist[checkselect]?.warehouseGoodsAreaVOList[checkregionselect].headline +
'-' +
ite.layerNum +
'层' +
'-' +
ite.columnNum +
'列'
}}
</div>
<div
class="tilts-info"
v-if="ite.packageNum || ite.orderNum || ite.lessNum || ite.inventoryNum"
>
<span>包件数:{{ Number(ite.packageNum) }}</span>
<span>订单数:{{ Number(ite.orderNum) }}</span>
<span>零担数:{{ Number(ite.lessNum) }}</span>
<span>库存品数:{{ Number(ite.inventoryNum) }}</span>
</div>
</div>
</el-tooltip>
</div>
@ -188,7 +208,7 @@
</template>
</el-dialog>
<!-- 上架 -->
<el-dialog
<el-dialog
v-model="isshowupt"
:title="
'请选择' +
@ -209,6 +229,7 @@
"
width="80%"
center
class="loadtc"
>
<div class="disbox">
<div class="headtopscan">
@ -228,7 +249,7 @@
/>
</el-select> -->
<div class="inptx">
<div>
<div class="asbor">
{{
isshowupt == 1
? '服务号'
@ -315,15 +336,8 @@
</template> -->
</el-dialog>
<el-dialog
v-model="isshowConfirmedListing"
:title="
'确定上架'
"
width="50%"
center
>
<div style="text-align: center;">
<el-dialog v-model="isshowConfirmedListing" :title="'确定上架'" width="50%" center>
<div style="text-align: center">
<el-button type="primary" @click="confirmedListing">确定</el-button>
<el-button @click="isshowConfirmedListing = false">取消</el-button>
</div>
@ -346,6 +360,7 @@
"
width="80%"
center
class="loadtc"
>
<div class="disbox">
<div class="headtopscan">
@ -411,7 +426,6 @@
</div>
<el-input
style="flex: 1"
v-model="inputtxts1"
:placeholder="
'请输入' +
@ -492,6 +506,7 @@ import { exportBlob } from '@/api/common';
import { downloadXls } from '@/utils/util';
import { dateNow } from '@/utils/date';
const { proxy } = getCurrentInstance();
let loadtc = ref(false);
let details = reactive({
columnList: [],
tablistarr: [],
@ -533,7 +548,7 @@ let details = reactive({
checkselectchangearr: [],
isshowdow: false,
inputtxts1: '',
boxdetails:{}
boxdetails: {},
});
onMounted(() => {
details.contenbxsty['--length'] = details.contenarr[0]?.length || 0;
@ -571,32 +586,35 @@ function initpage() {
// let warehousearr=
}
function handleExportArea() {
let id=details.arrlist[details.checkselect]?.id||0
let name=details.arrlist[details.checkselect]?.name||''
if (id ===0){
let id = details.arrlist[details.checkselect]?.id || 0;
let name = details.arrlist[details.checkselect]?.name || '';
if (id === 0) {
proxy.$message({
type: "success",
message: "无选择仓库!"
type: 'success',
message: '无选择仓库!',
});
return;
}
let downloadUrl = `/logpm-basicdata/goodsArea/export-visualizationwarehouse?${proxy.website.tokenHeader}=${getToken()}`;
console.log("id>>>>>>>>>>>>>>",id);
let downloadUrl = `/logpm-basicdata/goodsArea/export-visualizationwarehouse?${
proxy.website.tokenHeader
}=${getToken()}`;
console.log('id>>>>>>>>>>>>>>', id);
let values = {
areaId:id,
areaId: id,
};
proxy.$confirm("是否导出数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
NProgress.start();
exportBlob(downloadUrl, values).then(res => {
downloadXls(res.data, name+`${dateNow()}.xlsx`);
NProgress.done();
proxy
.$confirm('是否导出数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
});
.then(() => {
NProgress.start();
exportBlob(downloadUrl, values).then(res => {
downloadXls(res.data, name + `${dateNow()}.xlsx`);
NProgress.done();
});
});
}
function currentChange(currentPage) {
@ -608,6 +626,7 @@ function sizeChange(pageSize) {
searchbuts();
}
async function searchbuts() {
loadtc = true; //
let url = '';
let data = null;
// console.log(details.arrlist[details.checkindex].id);
@ -754,7 +773,7 @@ async function checkshelves() {
console.log(res.data, 'res.data.datares.data.datares.data.datares.data.datares.data.data');
let arrs = [];
let maxlength = 0;
details.boxdetails=res.data.data
details.boxdetails = res.data.data;
res.data.data.list.map(item => {
if (item.columnNum > maxlength) {
maxlength = item.columnNum;
@ -787,8 +806,8 @@ async function checkshelves() {
// }
// };
const showupt = value => {
details.inputtxts=''
details.inputtxts1=''
details.inputtxts = '';
details.inputtxts1 = '';
console.log('112312');
details.isshowupt = value;
switch (details.isshowupt) {
@ -849,7 +868,7 @@ const showupt = value => {
},
{
prop: 'customerAddress',
label: '顾客电话',
label: '顾客地址',
type: 1,
values: '',
width: '260',
@ -928,7 +947,7 @@ const showupt = value => {
},
{
prop: 'customerAddress',
label: '顾客电话',
label: '顾客地址',
type: 1,
values: '',
width: '260',
@ -1029,7 +1048,7 @@ const showupt = value => {
},
{
prop: 'customerAddress',
label: '顾客电话',
label: '顾客地址',
type: 1,
values: '',
width: '150',
@ -1247,6 +1266,17 @@ const showupt = value => {
values: '',
width: '200',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'enterNum',
label: '可上架数量',
type: 10,
values: '',
width: '200',
checkarr: [],
fixed: true,
sortable: true,
head: false,
@ -1333,7 +1363,18 @@ const showupt = value => {
{
prop: 'customerAddress',
label: '顾客电话',
label: '顾客地址',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'residueNumber',
label: '可上架数量',
type: 1,
values: '',
width: '150',
@ -1365,7 +1406,7 @@ const alldown = async () => {
let data = {
allocationId: details.checkite.id,
};
if(details.checkselectchangearr.length==0){
if (details.checkselectchangearr.length == 0) {
proxy.$message({
type: 'error',
message: '请先勾选数据',
@ -1385,7 +1426,7 @@ const alldown = async () => {
break;
case 3:
url = 'downStock';
scope.row.stockType=1;
scope.row.stockType = 1;
scope.row.allocationId = details.checkite.id;
data.upShelfStockList = details.checkselectchangearr;
break;
@ -1403,7 +1444,7 @@ const alldown = async () => {
type: 'success',
message: response.data.msg,
});
searchbutdown()
searchbutdown();
// details.tablistarr = response.data.data.records;
// details.total = response.data.data.total;
} else {
@ -1439,7 +1480,7 @@ const downhj = async scope => {
break;
case 3:
url = 'downStock';
scope.row.stockType=1;
scope.row.stockType = 1;
scope.row.allocationId = details.checkite.id;
data.upShelfStockList = [scope.row];
break;
@ -1457,7 +1498,7 @@ const downhj = async scope => {
type: 'success',
message: response.data.msg,
});
searchbutdown()
searchbutdown();
// details.tablistarr = response.data.data.records;
// details.total = response.data.data.total;
} else {
@ -1539,13 +1580,13 @@ const searchbutdown = async () => {
}
};
const showdown = async value => {
details.inputtxts=''
details.inputtxts1=''
details.inputtxts = '';
details.inputtxts1 = '';
if (value == 5) {
let url = 'downAllocation?ids='+details.checkite.id;
let data={
ids:details.checkite.id
}
let url = 'downAllocation?ids=' + details.checkite.id;
let data = {
ids: details.checkite.id,
};
let response = await posturl(url, data);
if (response.data.code == 200) {
console.log(response.data);
@ -1561,7 +1602,7 @@ const showdown = async value => {
message: response.data.msg,
});
}
return
return;
}
details.isshowdow = value;
switch (details.isshowdow) {
@ -1783,7 +1824,7 @@ const showdown = async value => {
values: '',
width: '200',
checkarr: [],
fixed: true,
fixed: false,
sortable: true,
head: false,
},
@ -1822,7 +1863,18 @@ const showdown = async value => {
},
{
prop: 'customerAddress',
label: '顾客电话',
label: '顾客地址',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'num',
label: '可下架数量',
type: 1,
values: '',
width: '150',
@ -1831,6 +1883,7 @@ const showdown = async value => {
sortable: true,
head: false,
},
{
prop: '',
label: '操作',
@ -1888,17 +1941,6 @@ const showdown = async value => {
sortable: true,
head: false,
},
{
prop: 'num',
label: '货位剩余数',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'orderCode',
label: '订单号',
@ -2009,8 +2051,8 @@ const showdown = async value => {
searchbutdown();
};
const addhuoj = async scope => {
details.addhuojData = scope
details.isshowConfirmedListing = true
details.addhuojData = scope;
details.isshowConfirmedListing = true;
console.log(scope.row);
};
//
@ -2018,7 +2060,7 @@ const confirmedListing = async () => {
let data = {
allocationId: details.checkite.id,
};
const scope = details.addhuojData
const scope = details.addhuojData;
let url = '';
switch (details.isshowupt) {
case 1:
@ -2035,12 +2077,12 @@ const confirmedListing = async () => {
break;
case 4:
url = 'upTray';
let obj={
code:scope.row.palletCode,
allocationId:details.checkite.id
}
let obj = {
code: scope.row.palletCode,
allocationId: details.checkite.id,
};
data =obj
data = obj;
break;
case 5:
url = 'upStock';
@ -2057,14 +2099,14 @@ const confirmedListing = async () => {
}
let response = await posturl(url, data);
//
details.isshowConfirmedListing = false
details.isshowConfirmedListing = false;
if (response.data.code == 200) {
console.log(response.data);
proxy.$message({
type: 'success',
message: response.data.msg,
});
searchbuts()
searchbuts();
// details.tablistarr = response.data.data.records;
// details.total = response.data.data.total;
} else {
@ -2073,7 +2115,7 @@ const confirmedListing = async () => {
message: response.data.msg,
});
}
}
};
async function allup() {
// console.log(scope.row);
let data = {
@ -2125,7 +2167,7 @@ async function allup() {
type: 'success',
message: response.data.msg,
});
searchbuts()
searchbuts();
// details.tablistarr = response.data.data.records;
// details.total = response.data.data.total;
} else {
@ -2140,11 +2182,11 @@ const removeinputup = () => {
details.inputtxts1 = '';
searchbuts();
};
const removeinputdown=()=>{
const removeinputdown = () => {
details.inputtxts = '';
details.inputtxts1 = '';
searchbutdown();
}
};
const btnsc = scope => {
console.log(scope);
};
@ -2162,8 +2204,8 @@ const selectionChange = scope => {
details.checkselectchangearr = scope;
};
const checkitem = ite => {
details.inputtxts=''
details.inputtxts1=''
details.inputtxts = '';
details.inputtxts1 = '';
if (Number(ite.allocationStatus) == 2) {
details.isshowcon = 2;
details.checkite = ite;
@ -2228,7 +2270,7 @@ const {
countnumber,
} = toRefs(details);
</script>
<style lang="scss">
<style lang="scss" scope>
.fwhserveNub {
display: flex;
flex-direction: column;
@ -2245,12 +2287,13 @@ const {
display: flex;
align-items: center;
.inptx {
width: 260px;
margin-left: 20px;
display: flex;
align-items: center;
> div {
width: 60px;
.el-input {
margin-left: 10px;
}
.asbor {
width: 100px;
}
}
}
@ -2263,6 +2306,7 @@ const {
}
:root {
--boxcolor: #adadad;
--bordercolor: #ccc;
}
.mabx {
height: 70vh;
@ -2271,12 +2315,17 @@ const {
box-sizing: border-box;
.contentbx {
width: calc(150 * var(--length) * 0.0521vw);
// border: 0 !important;
display: flex;
// flex-direction: column;
align-items: flex-end;
border: 1.5px solid var(--boxcolor);
border: none;
background-color: #fff;
box-sizing: border-box;
align-items: flex-end;
.headtop {
display: flex;
align-items: center;
@ -2285,14 +2334,15 @@ const {
// height: 90px;
width: 150px;
box-sizing: border-box;
border-right: 1.5px solid var(--boxcolor);
margin-right: 2px;
// border-right: 1.5px solid var(--boxcolor);
&:nth-last-child(1) {
border-right: 0;
}
&:nth-last-child(1) {
.itemmibox {
border-bottom: 1.5px solid var(--boxcolor);
// border-bottom: 1.5px solid var(--boxcolor);
}
}
.titls {
@ -2318,8 +2368,9 @@ const {
box-sizing: border-box;
color: rgba(237, 25, 25);
margin-bottom: 2px;
&:nth-last-child(1) {
border-right: 0;
// border-right: 0;
}
}
}
@ -2334,7 +2385,7 @@ const {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
justify-content: flex-start;
flex-direction: column;
// font-size: 14px;
}
@ -2360,15 +2411,16 @@ const {
display: flex;
align-items: center;
justify-content: flex-start;
padding: 20px;
box-sizing: border-box;
background-color: #fff;
width: 99%;
margin: 10px auto;
padding: 4px;
.liebs {
display: flex;
align-items: center;
justify-content: flex-start;
padding-bottom: 15px;
// width: 6000px;
width: 100%;
}
.item {
margin-right: 10px;
@ -2399,7 +2451,8 @@ const {
> .tips {
display: flex;
align-items: center;
.exprbuts{
.exprbuts {
width: 70px;
height: 30px;
color: #666666;
@ -2409,11 +2462,11 @@ const {
display: flex;
align-items: center;
justify-content: center;
border: 1.5px solid #E8E8E8;
border: 1.5px solid #e8e8e8;
cursor: pointer;
}
> div {
margin-left: 20px;
// margin-left: 20px;
}
.def {
color: rgb(30, 159, 255);
@ -2430,35 +2483,84 @@ const {
}
}
.tips {
display: flex;
align-items: center;
.exprbuts {
width: 70px;
height: 30px;
color: #666666;
font-size: 12px;
background-color: #fff;
border-radius: 3px;
display: flex;
align-items: center;
.exprbuts{
width: 70px;
height: 30px;
color: #666666;
font-size: 12px;
background-color: #fff;
border-radius: 3px;
display: flex;
align-items: center;
justify-content: center;
border: 1.5px solid #E8E8E8;
cursor: pointer;
}
> div {
margin-left: 20px;
}
.def {
color: rgb(30, 159, 255);
font-weight: 600;
}
.red {
color: rgb(255, 87, 34);
font-weight: 600;
}
.green {
color: rgb(95, 184, 120);
font-weight: 600;
}
justify-content: center;
border: 1.5px solid #e8e8e8;
cursor: pointer;
}
> div {
padding: 0 8px;
font-weight: 500;
}
.def {
color: rgb(30, 159, 255);
font-weight: 600;
}
.red {
color: rgb(255, 87, 34);
font-weight: 600;
}
.green {
color: rgb(95, 184, 120);
font-weight: 600;
}
}
.tips-Menu {
background-color: #fff;
padding: 8px 0;
width: 99%;
margin: 0 auto;
}
.contentbj {
background-color: #fff;
// border: 1px solid var(--bordercolor);
}
.itemwbox:last-child {
// .itemmibox {
// border-right: 1px solid var(--boxcolor);
// }
}
.itemwbox {
overflow: hidden;
}
.itemwbox {
border-top: none !important;
}
.tilts-info {
display: flex;
flex-direction: column;
align-items: flex-start;
width: 120px;
}
.itemmibox {
border: 0 !important;
}
.mabx .contentbx .itemwbox .rotate {
border: 1px solid #ff0000 !important;
background-color: #bd3a52 !important;
color: #fff;
}
.el-input__inner {
background-color: transparent !important;
}
.loadtc {
margin-top: 2% !important;
}
.el-input__suffix {
width: 16px !important;
}
</style>

1950
src/views/distribution/deliverylist/distributionDeliveryList.vue

File diff suppressed because it is too large Load Diff

26
src/views/distribution/deliverylist/distributionDeliveryListdis.vue

@ -155,20 +155,20 @@
<!-- </el-table>-->
</el-row>
<el-row>
<div class="avue-crud__pagination flex-c-sb" style="width:100%;">
<div style="font-size: 14px;">
勾选数量: {{ selectionList.length }}
</div>
<div class="avue-crud__pagination flex-c-sb" style="width: 100%">
<div style="font-size: 14px">勾选数量: {{ selectionList.length }}</div>
<!-- 分页模块 -->
<el-pagination align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[30, 50,80, 120]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
<el-pagination
align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[30, 50, 80, 120]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total"
>
</el-pagination>
</div>
</el-row>

8
src/views/distribution/inventory/delivery/distributionStockArticle.vue

@ -1111,14 +1111,18 @@ export default {
st = true;
this.$message.warning(i.orderCode+" - 为冻结单,无法转为库存品!!!");
}
if(i.isZero === "1" && i.completeSet === "1"){
st = true;
this.$message.warning(i.orderCode+" - 未齐套,无法转为库存品!!!");
}
if(!st){
//
// console.log("cxcxcxc",i);
let aa = await getListOwn(this.page.currentPage,this.page.pageSize,{ stockArticleId : i.id } ).then();
// console.log("",aa.data.data.records);
aa.data.data.records.forEach( l =>{
console.log(l.materialId , l.materialName , l.materialCode , l.materialUnit);
if(!l.materialId || l.materialId == '-1'){
// console.log(l.materialId , l.materialName , l.materialCode , l.materialUnit);
if(!l.materialId){
lost = true;
}
})

13
src/views/distribution/inventory/delivery/distributionStockArticleSelf.vue

@ -534,6 +534,16 @@ export default {
fixed: false,
sortable: true,
},
{
prop: 'isZero',
label: '零担',
type: 2,
values: '',
width: '130',
checkarr: [],
fixed: false,
sortable: true,
},
{
prop: 'warehouse',
label: '所在仓库',
@ -1425,7 +1435,8 @@ export default {
path: '/distribution/inventory/distrilbutionBillLading',
query:{
id: this.ids,
type: '1'
type: '1',
}
});
},

2
src/views/distribution/inventory/distributionStockListDetails.vue

@ -328,7 +328,7 @@ export default {
head: false,
},
{
prop: 'marketName',
prop: 'descriptionGoods',
label: '货物名称',
type: 2,
values: '',

25
src/views/distribution/inventory/distrilbutionBillLading.vue

@ -181,7 +181,7 @@
<el-form-item label="费用" prop="freightMark">
<el-checkbox-group v-model="form.freightMark" @change="handleCheckedCitiesChange">
<el-checkbox
style="width: 16%; margin-bottom: 3%"
style="min-width: 16%; margin-bottom: 8px;"
v-for="(item, index) in clientType"
:key="item.dictKey"
:label="item.dictKey"
@ -229,6 +229,14 @@
@selection="selectionChange"
>
<template #default="slotProps">
<el-text
v-if="slotProps.scope.row.isZero === '1'"
type="primary"
text
icon="el-icon-delete"
@click="handleZeroOrder(slotProps.scope.row)"
>操作</el-text
>
<el-text
type="primary"
text
@ -455,6 +463,10 @@
</span>
</template>
</el-dialog>
<el-dialog v-model="dialogFormZeroOrderVisible" title="修改零担" style="width: 50%">
</el-dialog>
</basic-container>
</template>
@ -494,6 +506,7 @@ export default {
],
dialogFormVisible: false,
dialogFormOrderVisible: false, //
dialogFormZeroOrderVisible: false, //
height: 0,
//
title: '',
@ -2420,6 +2433,12 @@ export default {
this.selectionClear();
});
},
//
handleZeroOrder(row){
console.log('row :>> ', row);
console.log('row.isZero', row.isZero)
this.dialogFormZeroOrderVisible = true
}
},
watch: {
clientType(newVal, oldVal) {
@ -2463,4 +2482,8 @@ export default {
:deep(.el-date-editor.el-input, .el-date-editor.el-input__wrapper) {
height: 100% !important;
}
.el-checkbox {
margin-left: 0;
}
</style>

3469
src/views/distribution/turndelivery/deliveryDiscuss.vue

File diff suppressed because it is too large Load Diff

285
src/views/distribution/zero/distributionParcelNumber.vue

@ -0,0 +1,285 @@
<template>
<basic-container>
<div class="avue-crud">
<el-row :hidden="!search" style="padding:6px 18px">
<!-- 查询模块 -->
<el-form :inline="true" :model="query">
<!-- 查询按钮 -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> </el-button>
<el-button icon="el-icon-delete" @click="searchReset()"> </el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="avue-crud__header">
<!-- 头部左侧按钮模块 -->
<div class="avue-crud__left">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"> </el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>
</div>
<!-- 头部右侧按钮模块 -->
<div class="avue-crud__right">
<el-button icon="el-icon-refresh" @click="searchChange" circle></el-button>
<el-button icon="el-icon-search" @click="searchHide" circle></el-button>
</div>
</div>
</el-row>
<el-row>
<!-- 列表模块 -->
<el-table ref="table" v-loading="loading"
@selection-change="selectionChange"
:data="data"
:height="height"
style="width: 100%"
:border="option.border">
<el-table-column type="selection" v-if="option.selection" width="55" align="center"></el-table-column>
<el-table-column type="expand" v-if="option.expand" align="center"></el-table-column>
<el-table-column v-if="option.index" label="#" type="index" width="50" align="center">
</el-table-column>
<template v-for="(item,index) in option.column">
<!-- table字段 -->
<el-table-column v-if="item.hide!==true"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="index">
</el-table-column>
</template>
<!-- 操作栏模块 -->
<el-table-column prop="menu" label="操作" :width="220" align="center">
<template #="{row}">
<el-button type="primary" text icon="el-icon-view" @click="handleView(row)">查看</el-button>
<el-button type="primary" text icon="el-icon-edit" @click="handleEdit(row)">编辑</el-button>
<el-button type="primary" text icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<div class="avue-crud__pagination" style="width:100%">
<!-- 分页模块 -->
<el-pagination align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
</el-pagination>
</div>
</el-row>
<!-- 表单模块 -->
<el-dialog :title="title"
v-model="box"
width="50%"
:before-close="beforeClose"
append-to-body>
<el-form :disabled="view" ref="form" :model="form" label-width="80px">
<!-- 表单字段 -->
<el-form-item label="总数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入总数量"/>
</el-form-item>
<el-form-item label="在库数量" prop="handQuantity">
<el-input v-model="form.handQuantity" placeholder="请输入在库数量"/>
</el-form-item>
<el-form-item label="配送数量" prop="deliveryQuantity">
<el-input v-model="form.deliveryQuantity" placeholder="请输入配送数量"/>
</el-form-item>
<el-form-item label="签收数量" prop="signinQuantity">
<el-input v-model="form.signinQuantity" placeholder="请输入签收数量"/>
</el-form-item>
</el-form>
<!-- 表单按钮 -->
<template #footer>
<span v-if="!view" class="dialog-footer">
<el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit"> </el-button>
<el-button icon="el-icon-circle-close" @click="box = false"> </el-button>
</span>
</template>
</el-dialog>
</div>
</basic-container>
</template>
<script>
import { getList, getDetail, add, update, remove } from "@/api/distribution/distributionParcelNumber";
import option from "@/option/distribution/distributionParcelNumber";
import { mapGetters } from "vuex";
export default {
data () {
return {
height: 0,
//
title: '',
//
box: false,
//
search: true,
//
loading: true,
//
view: false,
//
query: {},
//
page: {
currentPage: 1,
pageSize: 10,
total: 40
},
//
form: {},
//
selectionList: [],
//
option: option,
//
data: [],
}
},
mounted () {
this.init();
this.onLoad(this.page);
},
computed: {
...mapGetters(["permission"]),
ids () {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
}
},
methods: {
init () {
this.height = this.setPx(document.body.clientHeight - 340);
},
searchHide () {
this.search = !this.search;
},
searchChange () {
this.onLoad(this.page);
},
searchReset () {
this.query = {};
this.page.currentPage = 1;
this.onLoad(this.page);
},
handleSubmit () {
if (!this.form.id) {
add(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
} else {
update(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
})
}
},
handleAdd () {
this.title = '新增'
this.form = {}
this.box = true
},
handleEdit (row) {
this.title = '编辑'
this.box = true
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleView (row) {
this.title = '查看'
this.view = true;
this.box = true;
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleDelete () {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.selectionClear();
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
rowDel (row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
beforeClose (done) {
done()
this.form = {};
this.view = false;
},
selectionChange (list) {
this.selectionList = list;
},
selectionClear () {
this.selectionList = [];
this.$refs.table.clearSelection();
},
currentChange (currentPage) {
this.page.currentPage = currentPage;
this.onLoad(this.page);
},
sizeChange (pageSize) {
this.page.pageSize = pageSize;
this.onLoad(this.page);
},
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;
this.selectionClear();
});
}
}
};
</script>

294
src/views/distribution/zero/distributionReservationZeroPackage.vue

@ -0,0 +1,294 @@
<template>
<basic-container>
<div class="avue-crud">
<el-row :hidden="!search" style="padding:6px 18px">
<!-- 查询模块 -->
<el-form :inline="true" :model="query">
<!-- 查询按钮 -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> </el-button>
<el-button icon="el-icon-delete" @click="searchReset()"> </el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="avue-crud__header">
<!-- 头部左侧按钮模块 -->
<div class="avue-crud__left">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"> </el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>
</div>
<!-- 头部右侧按钮模块 -->
<div class="avue-crud__right">
<el-button icon="el-icon-refresh" @click="searchChange" circle></el-button>
<el-button icon="el-icon-search" @click="searchHide" circle></el-button>
</div>
</div>
</el-row>
<el-row>
<!-- 列表模块 -->
<el-table ref="table" v-loading="loading"
@selection-change="selectionChange"
:data="data"
:height="height"
style="width: 100%"
:border="option.border">
<el-table-column type="selection" v-if="option.selection" width="55" align="center"></el-table-column>
<el-table-column type="expand" v-if="option.expand" align="center"></el-table-column>
<el-table-column v-if="option.index" label="#" type="index" width="50" align="center">
</el-table-column>
<template v-for="(item,index) in option.column">
<!-- table字段 -->
<el-table-column v-if="item.hide!==true"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="index">
</el-table-column>
</template>
<!-- 操作栏模块 -->
<el-table-column prop="menu" label="操作" :width="220" align="center">
<template #="{row}">
<el-button type="primary" text icon="el-icon-view" @click="handleView(row)">查看</el-button>
<el-button type="primary" text icon="el-icon-edit" @click="handleEdit(row)">编辑</el-button>
<el-button type="primary" text icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<div class="avue-crud__pagination" style="width:100%">
<!-- 分页模块 -->
<el-pagination align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
</el-pagination>
</div>
</el-row>
<!-- 表单模块 -->
<el-dialog :title="title"
v-model="box"
width="50%"
:before-close="beforeClose"
append-to-body>
<el-form :disabled="view" ref="form" :model="form" label-width="80px">
<!-- 表单字段 -->
<el-form-item label=" 10 自提" prop="typesOf">
<el-input v-model="form.typesOf" placeholder="请输入 10 自提"/>
</el-form-item>
<el-form-item label="订单ID" prop="stockArticleId">
<el-input v-model="form.stockArticleId" placeholder="请输入订单ID"/>
</el-form-item>
<el-form-item label="数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入数量"/>
</el-form-item>
<el-form-item label="预约ID" prop="reservationId">
<el-input v-model="form.reservationId" placeholder="请输入预约ID"/>
</el-form-item>
<el-form-item label="零担包件状态;1-正常 ; 2 -取消 ; 3-新增" prop="zeroPackageStatus">
<el-input v-model="form.zeroPackageStatus" placeholder="请输入零担包件状态;1-正常 ; 2 -取消 ; 3-新增"/>
</el-form-item>
<el-form-item label="品类名称" prop="categoryName">
<el-input v-model="form.categoryName" placeholder="请输入品类名称"/>
</el-form-item>
<el-form-item label="零担包件类型;1-商配 2-市配 3-自提" prop="type">
<el-input v-model="form.type" placeholder="请输入零担包件类型;1-商配 2-市配 3-自提"/>
</el-form-item>
</el-form>
<!-- 表单按钮 -->
<template #footer>
<span v-if="!view" class="dialog-footer">
<el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit"> </el-button>
<el-button icon="el-icon-circle-close" @click="box = false"> </el-button>
</span>
</template>
</el-dialog>
</div>
</basic-container>
</template>
<script>
import { getList, getDetail, add, update, remove } from "@/api/distribution/distributionReservationZeroPackage";
import option from "@/option/distribution/distributionReservationZeroPackage";
import { mapGetters } from "vuex";
export default {
data () {
return {
height: 0,
//
title: '',
//
box: false,
//
search: true,
//
loading: true,
//
view: false,
//
query: {},
//
page: {
currentPage: 1,
pageSize: 10,
total: 40
},
//
form: {},
//
selectionList: [],
//
option: option,
//
data: [],
}
},
mounted () {
this.init();
this.onLoad(this.page);
},
computed: {
...mapGetters(["permission"]),
ids () {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
}
},
methods: {
init () {
this.height = this.setPx(document.body.clientHeight - 340);
},
searchHide () {
this.search = !this.search;
},
searchChange () {
this.onLoad(this.page);
},
searchReset () {
this.query = {};
this.page.currentPage = 1;
this.onLoad(this.page);
},
handleSubmit () {
if (!this.form.id) {
add(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
} else {
update(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
})
}
},
handleAdd () {
this.title = '新增'
this.form = {}
this.box = true
},
handleEdit (row) {
this.title = '编辑'
this.box = true
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleView (row) {
this.title = '查看'
this.view = true;
this.box = true;
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleDelete () {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.selectionClear();
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
rowDel (row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
beforeClose (done) {
done()
this.form = {};
this.view = false;
},
selectionChange (list) {
this.selectionList = list;
},
selectionClear () {
this.selectionList = [];
this.$refs.table.clearSelection();
},
currentChange (currentPage) {
this.page.currentPage = currentPage;
this.onLoad(this.page);
},
sizeChange (pageSize) {
this.page.pageSize = pageSize;
this.onLoad(this.page);
},
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;
this.selectionClear();
});
}
}
};
</script>

2
src/views/system/topmenu.vue

@ -357,7 +357,7 @@ export default {
};
</script>
<style>
<style scope>
.none-border {
border: 0;
background-color: transparent !important;

5
src/views/wel/index.vue

@ -127,7 +127,7 @@
</div>
</template>
<script lang="ts" setup></script>
<style lang="scss">
<style lang="scss" scope>
@import '../../styles/flowStyle.scss';
// .bx {
@ -469,6 +469,9 @@
// .bx{
// user-select: none;
// }
#avue-view {
background-color: #fff;
}
</style>
<script>
import { mapGetters } from 'vuex';

Loading…
Cancel
Save