fix: 🧩 代码迁移出错
This commit is contained in:
@@ -15,6 +15,12 @@ export const getOutStockListApi = (params: Record<string, any>) => {
|
|||||||
export const getDetailsApi = (id: any) => {
|
export const getDetailsApi = (id: any) => {
|
||||||
return http.get<any>(`OutStock/GetInfo/${id}`);
|
return http.get<any>(`OutStock/GetInfo/${id}`);
|
||||||
};
|
};
|
||||||
export const getTaskDetailsApi = (id: any) => {
|
//出库单详情列表
|
||||||
return http.get<any>(`OutStockTask/GetInfo/${id}`);
|
export const getTaskDetailsApi = (params: any) => {
|
||||||
|
return http.post<any>(`OutStockTask/GetInfoByNo`, params);
|
||||||
|
};
|
||||||
|
|
||||||
|
//修改出库箱信息
|
||||||
|
export const getEditBoxInfoApi = (params: Record<string, any>) => {
|
||||||
|
return http.post<any>(`OutStock/EditBoxInfo`, params);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
import { defineStore } from "pinia";
|
import { defineStore } from "pinia";
|
||||||
// import router from "@/routers";
|
// import router from "@/routers";
|
||||||
import { getAuthMenuListApi } from "@/api/modules/login";
|
import { getAuthMenuListApi } from "@/api/modules/login";
|
||||||
import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList, setKeeAliveRoute } from "@/utils";
|
import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList, setKeeAliveRoute, getBtnsAuthList } from "@/utils";
|
||||||
|
// import { setRouterControl } from "@/utils/routerControl";
|
||||||
|
import { boxMarkIndexAdd, subscriptionIndexAdd } from "@/utils/routerControl/constant/index";
|
||||||
|
|
||||||
|
// const TYPES_NUMBER: any = {
|
||||||
|
// boxMarkIndexAdd: 6
|
||||||
|
// };
|
||||||
|
|
||||||
//setKeeAliveRoute
|
//setKeeAliveRoute
|
||||||
export const useAuthStore = defineStore({
|
export const useAuthStore: any = defineStore({
|
||||||
id: "wms-auth",
|
id: "wms-auth",
|
||||||
state: (): Record<string, any> => ({
|
state: (): any => ({
|
||||||
// 菜单权限列表
|
// 菜单权限列表
|
||||||
authMenuList: [],
|
authMenuList: [],
|
||||||
// 当前页面的 router name,用来做按钮权限筛选
|
// 当前页面的 router name,用来做按钮权限筛选
|
||||||
@@ -19,7 +26,9 @@ export const useAuthStore = defineStore({
|
|||||||
// 菜单权限列表 ==> 扁平化之后的一维数组菜单,主要用来添加动态路由
|
// 菜单权限列表 ==> 扁平化之后的一维数组菜单,主要用来添加动态路由
|
||||||
flatMenuListGet: state => getFlatMenuList(state.authMenuList),
|
flatMenuListGet: state => getFlatMenuList(state.authMenuList),
|
||||||
// 递归处理后的所有面包屑导航列表
|
// 递归处理后的所有面包屑导航列表
|
||||||
breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList)
|
breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList),
|
||||||
|
//设置按钮权限
|
||||||
|
btnsAuthList: state => getBtnsAuthList(state.authMenuList)
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
// Get AuthMenuList
|
// Get AuthMenuList
|
||||||
@@ -40,6 +49,16 @@ export const useAuthStore = defineStore({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
// //判断箱唛列表是否有新增按钮
|
||||||
|
let btnName: any = this.authMenuList[6]?.children[0]?.children[0]?.children[0]?.name;
|
||||||
|
let btnName1: any = this.authMenuList[6]?.children[1]?.children[0]?.children[0]?.name;
|
||||||
|
//如果箱唛列表页面有新增按钮就增加该路由!
|
||||||
|
if (btnName === "boxMarkIndexAdd") {
|
||||||
|
this.authMenuList[6]?.children[0]?.children.push(boxMarkIndexAdd);
|
||||||
|
}
|
||||||
|
if (btnName1 === "subscriptionIndexAdd") {
|
||||||
|
this.authMenuList[6]?.children[1]?.children.push(subscriptionIndexAdd);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// Set RouteName
|
// Set RouteName
|
||||||
async setRouteName(name: string) {
|
async setRouteName(name: string) {
|
||||||
|
|||||||
@@ -307,3 +307,25 @@ export function findItemNested(enumData: any, callValue: any, value: string, chi
|
|||||||
if (current[children]) return findItemNested(current[children], callValue, value, children);
|
if (current[children]) return findItemNested(current[children], callValue, value, children);
|
||||||
}, null);
|
}, null);
|
||||||
}
|
}
|
||||||
|
//递归将按钮取出
|
||||||
|
function recursiveExtractNames(menuList: any) {
|
||||||
|
let names: any[] = [];
|
||||||
|
for (let item of menuList) {
|
||||||
|
if (item.type === 0) {
|
||||||
|
names.push(item.name);
|
||||||
|
}
|
||||||
|
if (item.children && item.children.length > 0) {
|
||||||
|
names = names.concat(recursiveExtractNames(item.children));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
//按钮权限
|
||||||
|
export function getBtnsAuthList(menuList: any) {
|
||||||
|
let length = menuList.length;
|
||||||
|
if (!length) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
let obj: any = recursiveExtractNames(menuList);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,4 +5,14 @@ import { integerRexg } from "./integerRexg";
|
|||||||
import { unitMultipleInputRexg } from "./unitMultipleInputRexg";
|
import { unitMultipleInputRexg } from "./unitMultipleInputRexg";
|
||||||
import { numberRexg1 } from "./numberRexg1";
|
import { numberRexg1 } from "./numberRexg1";
|
||||||
import { numberDecimalSeparatorRexg } from "./numberDecimalSeparatorRexg";
|
import { numberDecimalSeparatorRexg } from "./numberDecimalSeparatorRexg";
|
||||||
export { numberRexg, inputEnterRexg, productRexg, integerRexg, unitMultipleInputRexg, numberRexg1, numberDecimalSeparatorRexg };
|
import { numberDecimalSeparatorRexg5 } from "./numberDecimalSeparatorRexg5";
|
||||||
|
export {
|
||||||
|
numberRexg,
|
||||||
|
inputEnterRexg,
|
||||||
|
productRexg,
|
||||||
|
integerRexg,
|
||||||
|
unitMultipleInputRexg,
|
||||||
|
numberRexg1,
|
||||||
|
numberDecimalSeparatorRexg,
|
||||||
|
numberDecimalSeparatorRexg5
|
||||||
|
};
|
||||||
|
|||||||
@@ -7,5 +7,6 @@ export const numberDecimalSeparatorRexg = (value: any) => {
|
|||||||
value = value.replace(/[^\d.]/g, ""); // 清除"数字"和"."以外的字符 只能输入数字和小数点
|
value = value.replace(/[^\d.]/g, ""); // 清除"数字"和"."以外的字符 只能输入数字和小数点
|
||||||
value = value.replace(/\.{2,}/g, "."); // 不能连续输入两个及以上小数点
|
value = value.replace(/\.{2,}/g, "."); // 不能连续输入两个及以上小数点
|
||||||
value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); // 只保留第一个".", 清除多余的"."
|
value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); // 只保留第一个".", 清除多余的"."
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|||||||
22
src/utils/rexg/numberDecimalSeparatorRexg5.ts
Normal file
22
src/utils/rexg/numberDecimalSeparatorRexg5.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
//只允许输入数字和小数点(小数点后面5位)
|
||||||
|
export const numberDecimalSeparatorRexg5 = (value: any) => {
|
||||||
|
if (!value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除"数字"和"."以外的字符,只能输入数字和小数点
|
||||||
|
value = value.replace(/[^\d.]/g, "");
|
||||||
|
// 不能连续输入两个及以上小数点
|
||||||
|
value = value.replace(/\.{2,}/g, ".");
|
||||||
|
// 只保留第一个".", 清除多余的"."
|
||||||
|
value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
|
||||||
|
|
||||||
|
// 限制小数点后最多 5 位
|
||||||
|
const parts = value.split(".");
|
||||||
|
if (parts.length > 1 && parts[1].length > 5) {
|
||||||
|
parts[1] = parts[1].slice(0, 5);
|
||||||
|
value = parts.join(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
};
|
||||||
22
src/utils/routerControl/constant/boxMark.ts
Normal file
22
src/utils/routerControl/constant/boxMark.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
export const boxMarkIndexAdd = {
|
||||||
|
id: 938,
|
||||||
|
pid: 936,
|
||||||
|
module: 25,
|
||||||
|
title: "箱唛详情",
|
||||||
|
name: "boxMarkDetails",
|
||||||
|
path: "/setUp/boxMark/details",
|
||||||
|
component: "/setUp/boxMark/details",
|
||||||
|
icon: "",
|
||||||
|
redirect: "",
|
||||||
|
sort: 1,
|
||||||
|
type: 1,
|
||||||
|
hidden: true,
|
||||||
|
closed: false,
|
||||||
|
disable: false,
|
||||||
|
children: [],
|
||||||
|
meta: {
|
||||||
|
title: "箱唛详情",
|
||||||
|
icon: "",
|
||||||
|
isKeepAlive: true
|
||||||
|
}
|
||||||
|
};
|
||||||
3
src/utils/routerControl/constant/index.ts
Normal file
3
src/utils/routerControl/constant/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { boxMarkIndexAdd } from "./boxMark";
|
||||||
|
import { subscriptionIndexAdd } from "./subscription";
|
||||||
|
export { boxMarkIndexAdd, subscriptionIndexAdd };
|
||||||
21
src/utils/routerControl/constant/subscription.ts
Normal file
21
src/utils/routerControl/constant/subscription.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
export const subscriptionIndexAdd = {
|
||||||
|
id: 949,
|
||||||
|
pid: 947,
|
||||||
|
module: 25,
|
||||||
|
title: "订阅详情",
|
||||||
|
name: "subscriptionDetails",
|
||||||
|
path: "/setUp/subscription/details",
|
||||||
|
component: "/setUp/subscription/details",
|
||||||
|
icon: "",
|
||||||
|
redirect: "",
|
||||||
|
sort: 1,
|
||||||
|
type: 1,
|
||||||
|
hidden: true,
|
||||||
|
closed: false,
|
||||||
|
disable: false,
|
||||||
|
children: [],
|
||||||
|
meta: {
|
||||||
|
title: "订阅详情",
|
||||||
|
icon: ""
|
||||||
|
}
|
||||||
|
};
|
||||||
13
src/utils/routerControl/index.ts
Normal file
13
src/utils/routerControl/index.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { boxMarkIndexAdd } from "./constant/index";
|
||||||
|
import { useAuthStore } from "@/stores/modules/auth";
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
const ROUTERS: any = {
|
||||||
|
boxMarkIndexAdd
|
||||||
|
};
|
||||||
|
const TYPES_NUMBER: any = {
|
||||||
|
boxMarkIndexAdd: 6
|
||||||
|
};
|
||||||
|
export const setRouterControl = (type: string) => {
|
||||||
|
let authMenuListIndex = TYPES_NUMBER[type];
|
||||||
|
authStore.authMenuList[authMenuListIndex].children[0].children.push(ROUTERS[type]);
|
||||||
|
};
|
||||||
@@ -1,9 +1,41 @@
|
|||||||
//明细信息
|
//明细信息
|
||||||
export const COLUMNS = [
|
export const COLUMNS = [
|
||||||
|
{
|
||||||
|
label: "",
|
||||||
|
align: "center",
|
||||||
|
prop: "indexNumber",
|
||||||
|
disabled: false,
|
||||||
|
width: "60px"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: "箱号",
|
label: "箱号",
|
||||||
prop: "boxBillNo",
|
prop: "boxBillNo",
|
||||||
disabled: false
|
disabled: false,
|
||||||
|
width: "200px"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "长CM",
|
||||||
|
prop: "boxLength",
|
||||||
|
disabled: false,
|
||||||
|
width: "140px"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "宽CM",
|
||||||
|
prop: "boxWide",
|
||||||
|
disabled: false,
|
||||||
|
width: "140px"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "高CM",
|
||||||
|
prop: "boxHigh",
|
||||||
|
disabled: false,
|
||||||
|
width: "140px"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "重量KG",
|
||||||
|
prop: "boxWeight",
|
||||||
|
disabled: false,
|
||||||
|
width: "140px"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "规格型号",
|
label: "规格型号",
|
||||||
@@ -42,6 +74,7 @@ export const COLUMNS = [
|
|||||||
{
|
{
|
||||||
label: "出库时间",
|
label: "出库时间",
|
||||||
prop: "createTime",
|
prop: "createTime",
|
||||||
disabled: false
|
disabled: false,
|
||||||
|
width: "200px"
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -21,12 +21,20 @@
|
|||||||
|
|
||||||
<el-tabs v-model="activeName" class="demo-tabs" id="myElement">
|
<el-tabs v-model="activeName" class="demo-tabs" id="myElement">
|
||||||
<el-tab-pane label="箱信息" name="outboundTaskListDetails">
|
<el-tab-pane label="箱信息" name="outboundTaskListDetails">
|
||||||
|
<div
|
||||||
|
:class="datas.isBtn ? 'edit-btn-box1' : 'edit-btn-box'"
|
||||||
|
@click="handleEditClick"
|
||||||
|
v-if="authStore.btnsAuthList.includes('outboundTaskListDetailsEdit')"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</div>
|
||||||
<el-table :data="datas.ruleForm.details" style="width: 100%" :height="datas.tableHeight" border>
|
<el-table :data="datas.ruleForm.details" style="width: 100%" :height="datas.tableHeight" border>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:show-overflow-tooltip="true"
|
:show-overflow-tooltip="true"
|
||||||
:prop="item.prop"
|
:prop="item.prop"
|
||||||
|
:align="item.align ?? 'center'"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:width="item.width ? item.width : ''"
|
:width="item.width ? item.width : 120"
|
||||||
v-for="(item, index) in datas.columns"
|
v-for="(item, index) in datas.columns"
|
||||||
:key="index"
|
:key="index"
|
||||||
/>
|
/>
|
||||||
@@ -34,6 +42,52 @@
|
|||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 编辑窗口 -->
|
||||||
|
<el-dialog v-model="datas.isEdit" title="编辑" width="900" align-center @close="handleDiaLog">
|
||||||
|
<div>
|
||||||
|
<div style="display: flex; padding: 10px">
|
||||||
|
<div style="flex: 2">箱号</div>
|
||||||
|
<div style="flex: 1; padding-left: 20px">长CM</div>
|
||||||
|
<div style="flex: 1; padding-left: 20px">宽CM</div>
|
||||||
|
<div style="flex: 1; padding-left: 20px">高CM</div>
|
||||||
|
<div style="flex: 1; padding-left: 20px">重量KG</div>
|
||||||
|
<div style="flex: 4; padding-left: 20px">规格型号</div>
|
||||||
|
</div>
|
||||||
|
<div style="max-height: 200px; overflow: auto">
|
||||||
|
<div v-for="item in datas.editList.details" :key="item.id" style="display: flex; padding: 0 10px 10px">
|
||||||
|
<el-input v-model="item.boxBillNo" disabled style="flex: 2" />
|
||||||
|
<el-input
|
||||||
|
v-model="item.boxLength"
|
||||||
|
style="flex: 1; padding-left: 20px"
|
||||||
|
@input="handleInput(item, 'boxLength')"
|
||||||
|
/>
|
||||||
|
<el-input
|
||||||
|
v-model="item.boxWide"
|
||||||
|
style="flex: 1; padding-left: 20px"
|
||||||
|
@input="handleInput(item, 'boxWide')"
|
||||||
|
/>
|
||||||
|
<el-input
|
||||||
|
v-model="item.boxHigh"
|
||||||
|
style="flex: 1; padding-left: 20px"
|
||||||
|
@input="handleInput(item, 'boxHigh')"
|
||||||
|
/>
|
||||||
|
<el-input
|
||||||
|
v-model="item.boxWeight"
|
||||||
|
style="flex: 1; padding-left: 20px"
|
||||||
|
@input="handleInput(item, 'boxWeight')"
|
||||||
|
/>
|
||||||
|
<el-input v-model="item.specifications" style="flex: 4; padding-left: 20px" disabled />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="datas.isEdit = false">取消</el-button>
|
||||||
|
<el-button type="primary" v-throttle="handleEditCommit"> 确认 </el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -41,8 +95,12 @@
|
|||||||
import DetailsSearch from "@/components/DetailsSearch/index.vue";
|
import DetailsSearch from "@/components/DetailsSearch/index.vue";
|
||||||
import { FORMDATA, RULEFORM, COLUMNS } from "./constant/details/index";
|
import { FORMDATA, RULEFORM, COLUMNS } from "./constant/details/index";
|
||||||
import { cloneDeep } from "lodash-es";
|
import { cloneDeep } from "lodash-es";
|
||||||
import { getTaskDetailsApi } from "@/api/modules/deliveryAndOutbound";
|
import { getTaskDetailsApi, getEditBoxInfoApi } from "@/api/modules/deliveryAndOutbound";
|
||||||
|
import { useMsg } from "@/hooks/useMsg";
|
||||||
|
import { numberDecimalSeparatorRexg5 } from "@/utils/rexg/index";
|
||||||
|
import { useAuthStore } from "@/stores/modules/auth";
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
console.log(authStore, "============authStore=============");
|
||||||
let labelWidth = "107px";
|
let labelWidth = "107px";
|
||||||
|
|
||||||
const tableRef = ref<any>(null);
|
const tableRef = ref<any>(null);
|
||||||
@@ -52,39 +110,95 @@ const datas = reactive<any>({
|
|||||||
columns: COLUMNS, //明细信息列表配置项
|
columns: COLUMNS, //明细信息列表配置项
|
||||||
ruleForm: cloneDeep(RULEFORM), // 表单
|
ruleForm: cloneDeep(RULEFORM), // 表单
|
||||||
formData: cloneDeep(FORMDATA), //表头配置项
|
formData: cloneDeep(FORMDATA), //表头配置项
|
||||||
tableHeight: 0
|
tableHeight: 0, //表格高度
|
||||||
|
isBtn: false, //控制编辑按钮显示
|
||||||
|
isEdit: false, //控制编辑弹窗
|
||||||
|
editList: [], //表格编辑数据
|
||||||
|
pageSize: 1000, //默认请求1000条数据(现在一个单最多300条,需做分页优化,暂无该需求)
|
||||||
|
pageNo: 1
|
||||||
});
|
});
|
||||||
const $route = useRoute();
|
const $route = useRoute();
|
||||||
|
|
||||||
let activeName = ref<any>("outboundTaskListDetails");
|
let activeName = ref<any>("outboundTaskListDetails");
|
||||||
let formActiveName = ref<any>("infoBasic");
|
let formActiveName = ref<any>("infoBasic");
|
||||||
//获取详情
|
//获取详情
|
||||||
const getDetails = async (id: any) => {
|
const getDetails = async (billNo: any) => {
|
||||||
if (!id) {
|
if (!billNo) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const result = await getTaskDetailsApi(id);
|
console.log("12323");
|
||||||
|
const result = await getTaskDetailsApi({
|
||||||
|
billNo,
|
||||||
|
pageSize: datas.pageSize,
|
||||||
|
pageNo: datas.pageNo
|
||||||
|
});
|
||||||
if (result.status === 200) {
|
if (result.status === 200) {
|
||||||
const { data } = result;
|
const { data } = result;
|
||||||
datas.ruleForm = data;
|
datas.ruleForm = cloneDeep(data);
|
||||||
|
datas.isBtn = !datas.ruleForm.details.length;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
getDetails($route.query.id);
|
getDetails($route.query.billNo);
|
||||||
//动态计算表格高度
|
//动态计算表格高度
|
||||||
const handleResize = () => {
|
const handleResize = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
datas.tableHeight = tableRef.value.clientHeight - 280;
|
datas.tableHeight = tableRef.value.clientHeight - 350;
|
||||||
if (datas.tableHeight <= 92) {
|
if (datas.tableHeight <= 92) {
|
||||||
datas.tableHeight = 92;
|
datas.tableHeight = 92;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
//限制input输入
|
||||||
|
const handleInput = (item: any, type: any) => {
|
||||||
|
item[type] = numberDecimalSeparatorRexg5(item[type]);
|
||||||
|
};
|
||||||
|
//窗口关闭
|
||||||
|
const handleDiaLog = () => {
|
||||||
|
datas.editList = [];
|
||||||
|
};
|
||||||
|
//编辑
|
||||||
|
const handleEditClick = () => {
|
||||||
|
if (datas.isBtn) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//赋值
|
||||||
|
datas.editList = cloneDeep(datas.ruleForm);
|
||||||
|
//打开编辑窗口
|
||||||
|
datas.isEdit = true;
|
||||||
|
};
|
||||||
|
//编辑确认
|
||||||
|
const handleEditCommit = async () => {
|
||||||
|
let params: any = [];
|
||||||
|
datas.editList.details.forEach((item: any) => {
|
||||||
|
params.push({
|
||||||
|
boxHigh: item.boxHigh,
|
||||||
|
boxLength: item.boxLength,
|
||||||
|
boxWeight: item.boxWeight,
|
||||||
|
boxWide: item.boxWide,
|
||||||
|
outStockBoxDetailsId: item.outStockBoxDetailsId,
|
||||||
|
outStockId: item.outStockId
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const result = await getEditBoxInfoApi(params);
|
||||||
|
const { isSuccess, message } = result;
|
||||||
|
if (result.status === 200) {
|
||||||
|
if (isSuccess) {
|
||||||
|
useMsg("success", "数据修改成功 !");
|
||||||
|
getDetails($route.query.billNo);
|
||||||
|
datas.isEdit = false;
|
||||||
|
datas.editList = [];
|
||||||
|
} else {
|
||||||
|
useMsg("error", message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
useMsg("error", message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
handleResize();
|
handleResize();
|
||||||
});
|
});
|
||||||
// 详情
|
// 详情
|
||||||
onActivated(() => {
|
onActivated(() => {
|
||||||
getDetails($route.query.id);
|
|
||||||
window.addEventListener("resize", handleResize);
|
window.addEventListener("resize", handleResize);
|
||||||
});
|
});
|
||||||
onDeactivated(() => {
|
onDeactivated(() => {
|
||||||
@@ -94,3 +208,52 @@ onBeforeUnmount(() => {
|
|||||||
window.removeEventListener("resize", handleResize);
|
window.removeEventListener("resize", handleResize);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.edit-btn-box {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 50px;
|
||||||
|
height: 30px;
|
||||||
|
margin-right: 12px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1;
|
||||||
|
color: #ffffff;
|
||||||
|
cursor: pointer;
|
||||||
|
background: #4178d5;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.edit-btn-box:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #7aa1e2;
|
||||||
|
border: 1px solid rgb(65 120 213 / 10%);
|
||||||
|
}
|
||||||
|
.edit-btn-box1 {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 50px;
|
||||||
|
height: 30px;
|
||||||
|
margin-right: 12px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1;
|
||||||
|
color: #ffffff;
|
||||||
|
cursor: not-allowed;
|
||||||
|
background: #4178d5;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
:deep(.el-dialog__body) {
|
||||||
|
padding: 10px 10px 18px;
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
/* color: red; */
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
:deep(.el-dialog__title) {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ const handleToDetail = (row: any) => {
|
|||||||
$router.push({
|
$router.push({
|
||||||
path: "/deliveryAndOutbound/outboundTaskList/details",
|
path: "/deliveryAndOutbound/outboundTaskList/details",
|
||||||
query: {
|
query: {
|
||||||
id: row.id
|
billNo: row.billNo
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
132
src/views/login/index5.vue
Normal file
132
src/views/login/index5.vue
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
<template>
|
||||||
|
<el-main></el-main>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
//useRouter
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import { useMsg } from "@/hooks/useMsg";
|
||||||
|
//登录请求接口
|
||||||
|
import { loginApi } from "@/api/modules/login";
|
||||||
|
//全局状态
|
||||||
|
|
||||||
|
import { getGlobalStatusApi } from "@/api/modules/global";
|
||||||
|
//全局仓库
|
||||||
|
import { getStockApi } from "@/api/modules/global";
|
||||||
|
//用户信息存储
|
||||||
|
import { useUserStore } from "@/stores/modules/user";
|
||||||
|
import { usePathUrl } from "@/hooks/usePathUrl";
|
||||||
|
//全局状态
|
||||||
|
import { useStatusStore } from "@/stores/modules/status";
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const statusStore = useStatusStore();
|
||||||
|
// 路由
|
||||||
|
const $route = useRoute();
|
||||||
|
const $router = useRouter();
|
||||||
|
|
||||||
|
const getGlobalStatus = async () => {
|
||||||
|
const result = await getGlobalStatusApi();
|
||||||
|
if (result.status === 200) {
|
||||||
|
const { data } = result;
|
||||||
|
//设置全局状态
|
||||||
|
statusStore.setGlobalStatus(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const getStock = async () => {
|
||||||
|
const result = await getStockApi();
|
||||||
|
if (result.status === 200) {
|
||||||
|
const { data } = result;
|
||||||
|
data.forEach((item: any) => {
|
||||||
|
item.code = item.code + "_" + "$" + item.erpOrgCode;
|
||||||
|
});
|
||||||
|
//设置全局仓库
|
||||||
|
userStore.setWarehouse(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const getUcOnline = (phpToken: any, refreshToken: any) => {
|
||||||
|
let httpUrl = import.meta.env.VITE_SINGLE_URL + "uc/online";
|
||||||
|
fetch(httpUrl, {
|
||||||
|
method: "POST",
|
||||||
|
credentials: "include",
|
||||||
|
keepalive: true,
|
||||||
|
headers: {
|
||||||
|
Authorization: phpToken,
|
||||||
|
"Refresh-Authorization": refreshToken
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getUcOffline = (redirectUrl: any) => {
|
||||||
|
let httpUrl = import.meta.env.VITE_SINGLE_URL + "uc/offline";
|
||||||
|
fetch(httpUrl, {
|
||||||
|
method: "POST",
|
||||||
|
credentials: "include",
|
||||||
|
keepalive: true,
|
||||||
|
headers: {
|
||||||
|
Authorization: userStore.phpToken,
|
||||||
|
"Refresh-Authorization": userStore.refreshToken
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((res: any) => {
|
||||||
|
if (res.status === 200) {
|
||||||
|
useMsg("success", "退出登录成功 !");
|
||||||
|
setTimeout(() => {
|
||||||
|
location.href = redirectUrl;
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
useMsg("error", "退出登录失败,请稍后再试 !");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 设置用户数据
|
||||||
|
const setUserData = (data: any) => {
|
||||||
|
// 组装token
|
||||||
|
let newUserToken = data.tokenInfo.tokenType + " " + data.tokenInfo.token;
|
||||||
|
let RefreshToken = data.tokenInfo.tokenType + " " + data.tokenInfo.refreshToken;
|
||||||
|
let phpToken = data.tokenInfo.tokenType + " " + data.tokenInfo.phpToken;
|
||||||
|
// 设置token
|
||||||
|
userStore.setToken(newUserToken);
|
||||||
|
userStore.setRefreshToken(RefreshToken);
|
||||||
|
userStore.setPhpToken(phpToken);
|
||||||
|
// 设置用户信息
|
||||||
|
userStore.setUserInfo(data.userInfo);
|
||||||
|
// 设置组织id
|
||||||
|
userStore.setOrgId(data.userInfo.orgId);
|
||||||
|
getUcOnline(phpToken, RefreshToken);
|
||||||
|
getGlobalStatus();
|
||||||
|
getStock();
|
||||||
|
//跳转
|
||||||
|
setTimeout(() => {
|
||||||
|
$router.push({ path: "/" });
|
||||||
|
}, 500);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 登录
|
||||||
|
const loginHttp = async (code: any) => {
|
||||||
|
const result: Record<string, any> = await loginApi({ code: code });
|
||||||
|
if (result.status === 200) {
|
||||||
|
setUserData(result.data);
|
||||||
|
} else {
|
||||||
|
getUcOffline(usePathUrl());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 登录前的判断
|
||||||
|
const login = () => {
|
||||||
|
const { code } = $route.query;
|
||||||
|
// 没有code直接跳转到登录页
|
||||||
|
if (!code) {
|
||||||
|
getUcOffline(usePathUrl());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 有code就登录请求
|
||||||
|
loginHttp(code);
|
||||||
|
};
|
||||||
|
login();
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.el-main {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user