wms-pda迁移
BIN
static/img/Frame.png
Normal file
|
After Width: | Height: | Size: 506 B |
BIN
static/img/ckgd.png
Normal file
|
After Width: | Height: | Size: 950 B |
BIN
static/img/ckxx.png
Normal file
|
After Width: | Height: | Size: 892 B |
BIN
static/img/copy.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
static/img/deletico.png
Normal file
|
After Width: | Height: | Size: 741 B |
BIN
static/img/headbg.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
static/img/ic_info.png
Normal file
|
After Width: | Height: | Size: 702 B |
BIN
static/img/ic_qcinput.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
static/img/ic_remark.png
Normal file
|
After Width: | Height: | Size: 490 B |
BIN
static/img/inventory.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
static/img/log.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
static/img/logbg.png
Normal file
|
After Width: | Height: | Size: 265 KiB |
BIN
static/img/logo.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
static/img/n_back.png
Normal file
|
After Width: | Height: | Size: 370 B |
BIN
static/img/n_baiback.png
Normal file
|
After Width: | Height: | Size: 488 B |
BIN
static/img/out.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
static/img/outbound.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
static/img/qtrk_m1.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
static/img/qtrk_m2.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
static/img/qtrk_m3.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
static/img/qtrk_m4.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
static/img/qtrk_m5.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
static/img/rk_cgsjico.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
static/img/rk_fcgsjico.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
static/img/rk_shico.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
static/img/searchico.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
static/img/smico.png
Normal file
|
After Width: | Height: | Size: 787 B |
BIN
static/img/sybg.png
Normal file
|
After Width: | Height: | Size: 375 KiB |
BIN
static/img/syico1.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
static/img/syico2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
static/img/syico3.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
static/img/syico4.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
16
static/js/directive.js
Normal file
@@ -0,0 +1,16 @@
|
||||
export default {
|
||||
//自定义节流操作
|
||||
preventReClick: {
|
||||
mounted(el, binding) {
|
||||
el.addEventListener('click', () => {
|
||||
if (!el.disabled) {
|
||||
el.disabled = true
|
||||
setTimeout(() => {
|
||||
el.disabled = false
|
||||
}, binding.value || 2000) //2000ms间隔时间
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
5
static/js/http/baseApi.js
Normal file
@@ -0,0 +1,5 @@
|
||||
const BaseApi = 'https://api.wms.test.f2b211.com/api' //测试
|
||||
//const BaseApi = 'https://wmsapi.f2b211.com/api' // 正式
|
||||
export {
|
||||
BaseApi
|
||||
}
|
||||
114
static/js/http/index.js
Normal file
@@ -0,0 +1,114 @@
|
||||
import http from './interface'
|
||||
export const $http = (url, method, data, json) => {
|
||||
//设置请求前拦截器
|
||||
http.interceptor.request = (config) => {
|
||||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
config.header = {
|
||||
'content-type': json ? 'application/json' : 'application/x-www-form-urlencoded',
|
||||
"Authorization": uni.getStorageSync('token')
|
||||
}
|
||||
}
|
||||
//设置请求结束后拦截器
|
||||
http.interceptor.response = async (response) => {
|
||||
//判断返回状态 执行相应操作
|
||||
uni.hideLoading()
|
||||
// 请根据后端规定的状态码判定
|
||||
if (response.data.status === 401) { //token失效
|
||||
console.log('请根据后端规定的状态码判定', response.data.status, response.data.message)
|
||||
uni.showToast({
|
||||
title: response.data.message,
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
})
|
||||
// return response.data = await doRequest(response, url)//动态刷新token,并重新完成request请求
|
||||
// 登录失效,退回登录也面重新登录
|
||||
uni.reLaunch({
|
||||
url: "/pages/login"
|
||||
})
|
||||
} else {
|
||||
if (response.data.status !== 200 && response.data.message) {
|
||||
uni.showToast({
|
||||
title: response.data.message,
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
})
|
||||
}
|
||||
}
|
||||
return response.data;
|
||||
}
|
||||
return http.request({
|
||||
method: method,
|
||||
url: url,
|
||||
dataType: 'json',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
async function login() {
|
||||
//返回环宇token所需的login code
|
||||
return new Promise(resolve => {
|
||||
uni.login({
|
||||
provider: 'weixin',
|
||||
success(loginRes) {
|
||||
resolve(loginRes.code)
|
||||
},
|
||||
fail() {}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
async function doRequest(response, url) {
|
||||
var code = await login()
|
||||
var res = await post('/Login/RefreshToken', {})
|
||||
if (res && res.data.data.token) {
|
||||
let config = response.config
|
||||
uni.setStorageSync("token", res.data.data.token);
|
||||
config.header['Authorization'] = res.data.data.token
|
||||
let json = config.header["Content-Type"] === 'application/json'
|
||||
const resold = await $http(url, config.method, {
|
||||
...config.data
|
||||
}, json)
|
||||
return resold
|
||||
} else {
|
||||
uni.clearStorage()
|
||||
uni.showToast({
|
||||
title: "授权失效,请重新登录",
|
||||
duration: 1000,
|
||||
})
|
||||
uni.redirectTo({
|
||||
url: '/pages/login'
|
||||
})
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function postJson(url, data) {
|
||||
return $http(url, 'POST', data)
|
||||
}
|
||||
|
||||
function get(url, data) {
|
||||
|
||||
return $http(url, 'GET', data)
|
||||
}
|
||||
|
||||
function post(url, data) {
|
||||
return $http(url, 'POST', data, true)
|
||||
}
|
||||
|
||||
function put(url, data) {
|
||||
return $http(url, 'PUT', data, true)
|
||||
}
|
||||
|
||||
function del(url, data) {
|
||||
return $http(url, 'DELETE', data, true)
|
||||
}
|
||||
|
||||
export default {
|
||||
postJson,
|
||||
get,
|
||||
post,
|
||||
put,
|
||||
del
|
||||
}
|
||||
114
static/js/http/interface.js
Normal file
@@ -0,0 +1,114 @@
|
||||
import {
|
||||
BaseApi
|
||||
} from './baseApi.js'
|
||||
export default {
|
||||
config: {
|
||||
baseUrl: BaseApi,
|
||||
header: {
|
||||
'Content-Type':'application/json;charset=UTF-8',
|
||||
'Content-Type':'application/x-www-form-urlencoded'
|
||||
},
|
||||
data: {},
|
||||
method: "GET",
|
||||
dataType: "json", /* 如设为json,会对返回的数据做一次 JSON.parse */
|
||||
responseType: "text",
|
||||
success() {},
|
||||
fail() {},
|
||||
complete() {}
|
||||
},
|
||||
interceptor: {
|
||||
request: null,
|
||||
response: null
|
||||
},
|
||||
request(options) {
|
||||
if (!options) {
|
||||
options = {}
|
||||
}
|
||||
options.baseUrl = options.baseUrl || this.config.baseUrl
|
||||
options.dataType = options.dataType || this.config.dataType
|
||||
options.url = options.baseUrl + options.url
|
||||
options.data = options.data || {}
|
||||
options.method = options.method || this.config.method
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let _config = null
|
||||
options.complete = (response) => {
|
||||
let statusCode = response.statusCode
|
||||
response.config = _config
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
if (statusCode === 200) {
|
||||
////console.log("【" + _config.requestId + "】 结果:" + JSON.stringify(response.data))
|
||||
}
|
||||
}
|
||||
if (this.interceptor.response) {
|
||||
let newResponse = this.interceptor.response(response)
|
||||
if (newResponse) {
|
||||
response = newResponse
|
||||
}
|
||||
}
|
||||
// 统一的响应日志记录
|
||||
//_reslog(response)
|
||||
if (statusCode === 200) { //成功
|
||||
resolve(response);
|
||||
} else {
|
||||
reject(response)
|
||||
}
|
||||
}
|
||||
_config = Object.assign({}, this.config, options)
|
||||
_config.requestId = new Date().getTime()
|
||||
if (this.interceptor.request) {
|
||||
this.interceptor.request(_config)
|
||||
}
|
||||
// 统一的请求日志记录
|
||||
//_reqlog(_config)
|
||||
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
//console.log("【" + _config.requestId + "】 地址:" + _config.url)
|
||||
if (_config.data) {
|
||||
//console.log("【" + _config.requestId + "】 参数:" + JSON.stringify(_config.data))
|
||||
}
|
||||
}
|
||||
uni.request(_config);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 请求接口日志记录
|
||||
*/
|
||||
function _reqlog(req) {
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
//console.log("【" + req.requestId + "】 地址:" + req.url)
|
||||
if (req.data) {
|
||||
//console.log("【" + req.requestId + "】 请求参数:" + JSON.stringify(req.data))
|
||||
}
|
||||
}
|
||||
//TODO 调接口异步写入日志数据库
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应接口日志记录
|
||||
*/
|
||||
function _reslog(res) {
|
||||
let _statusCode = res.statusCode;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
//console.log("【" + res.config.requestId + "】 地址:" + res.config.url)
|
||||
if (res.config.data) {
|
||||
//console.log("【" + res.config.requestId + "】 请求参数:" + JSON.stringify(res.config.data))
|
||||
}
|
||||
//console.log("【" + res.config.requestId + "】 响应结果:" + JSON.stringify(res))
|
||||
}
|
||||
//TODO 除了接口服务错误外,其他日志调接口异步写入日志数据库
|
||||
switch(_statusCode){
|
||||
case 200:
|
||||
break;
|
||||
case 401:
|
||||
break;
|
||||
case 404:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
374
static/js/public.js
Normal file
@@ -0,0 +1,374 @@
|
||||
function setObjectArry(object) {
|
||||
let arry = []
|
||||
for (let i in object) {
|
||||
arry.push({
|
||||
id: i,
|
||||
name: object[i]
|
||||
})
|
||||
}
|
||||
return arry
|
||||
}
|
||||
//判断两个数组是否完全相等:
|
||||
function arraysHaveSameElements(arr1, arr2) {
|
||||
if (arr1.length !== arr2.length) {
|
||||
return false;
|
||||
}
|
||||
arr1.sort();
|
||||
arr2.sort();
|
||||
|
||||
for (let i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i] !== arr2[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//判断一个数组是否包含另一个数组的所有元素
|
||||
function arrayContainsArray(arr1, arr2) {
|
||||
return arr2.every(val => arr1.includes(val));
|
||||
}
|
||||
//判断两个数组是否完全不相等
|
||||
function arraysAreNotEqual(arr1, arr2) {
|
||||
// 如果数组长度相等,检查是否有元素不相等
|
||||
if (arr1.length === arr2.length) {
|
||||
for (let i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i] !== arr2[i]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false; // 如果所有元素都相等,返回false
|
||||
} else {
|
||||
return true; // 如果数组长度不等,返回true
|
||||
}
|
||||
}
|
||||
// 计算对象数组某个对象值的总和
|
||||
function sumObjectArrayValues(array, valueProperty) {
|
||||
return array.reduce((accumulator, currentObject) => {
|
||||
const value = currentObject[valueProperty];
|
||||
if (value != null && value >= 0) {
|
||||
accumulator += parseInt(value)
|
||||
}
|
||||
return accumulator
|
||||
console.log('总和', accumulator)
|
||||
}, 0);
|
||||
}
|
||||
// 计算对象数组包含对象数组,某个值的总和
|
||||
function sumNestedObjectValues(objArray, outerKey, innerKey, defaultValue = 0) {
|
||||
return objArray.reduce((sum, obj) => {
|
||||
if (obj.hasOwnProperty(outerKey) && Array.isArray(obj[outerKey])) {
|
||||
obj[outerKey].forEach((innerObj) => {
|
||||
if (innerObj.hasOwnProperty(innerKey)) {
|
||||
sum += parseInt(innerObj[innerKey]);
|
||||
} else {
|
||||
sum += defaultValue; // 当值不存在时,加上默认值
|
||||
}
|
||||
});
|
||||
}
|
||||
return sum;
|
||||
}, 0);
|
||||
}
|
||||
// 判断物料在数组那个位置,数组detail那个位置
|
||||
function findMaterialCodePosition(objectArray, materialNumber) {
|
||||
for (let objectIndex = 0; objectIndex < objectArray.length; objectIndex++) {
|
||||
const details = objectArray[objectIndex].details;
|
||||
for (let detailIndex = 0; detailIndex < details.length; detailIndex++) {
|
||||
if (details[detailIndex].materialNumber === materialNumber) {
|
||||
return {
|
||||
objectIndex: objectIndex,
|
||||
detailIndex: detailIndex
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
return null; // 如果没有找到,返回null
|
||||
};
|
||||
// 存在相同物料相同规格相同组织的非采购箱数据进行明细分配
|
||||
function distributeStockForOrder(orderDetails, boxContents, boxTotal) {
|
||||
// 创建一个副本,避免直接修改原始数据
|
||||
const updatedDetails = [...orderDetails];
|
||||
|
||||
// 遍历订单明细
|
||||
for (let detail of updatedDetails) {
|
||||
const {
|
||||
material,
|
||||
quantity
|
||||
} = detail;
|
||||
|
||||
// 如果箱子里的该物料数量小于订单明细中的数量,则提示并不再进行分配
|
||||
if (boxContents[material] < quantity) {
|
||||
console.warn(`警告:箱子里的${material}物料数量不足,无法进行分配!`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 计算可以分配的上架数量
|
||||
const availableToDistribute = Math.min(boxTotal, boxContents[material]);
|
||||
const distributeQuantity = Math.min(availableToDistribute, quantity);
|
||||
|
||||
// 更新上架数量和箱子里的物料数量
|
||||
detail.stockAvailable = distributeQuantity;
|
||||
boxTotal -= distributeQuantity;
|
||||
boxContents[material] -= distributeQuantity;
|
||||
}
|
||||
|
||||
return updatedDetails;
|
||||
}
|
||||
//获取明细数据相同物料id不同数量的,总和
|
||||
function sumByField(data, fieldName) {
|
||||
if (!data || data.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const map = new Map();
|
||||
data.forEach(item => {
|
||||
const {
|
||||
materialNumber
|
||||
} = item;
|
||||
const value = item[fieldName];
|
||||
if (value !== null && value !== undefined && value !== '') {
|
||||
map.set(materialNumber, (map.get(materialNumber) || 0) + value);
|
||||
}
|
||||
});
|
||||
|
||||
return Array.from(map.entries()).map(([materialNumber, value]) => ({
|
||||
materialNumber,
|
||||
'qty': value
|
||||
}));
|
||||
}
|
||||
// 对比两个物料数据有没有数量大于的情况,有就提示
|
||||
function checkQtyExceedsLimit(mxArray, boxArray, materialCodeField, qtyField) {
|
||||
const mxMap = new Map();
|
||||
mxArray.forEach(item => mxMap.set(item[materialCodeField], item[qtyField]));
|
||||
|
||||
for (const boxItem of boxArray) {
|
||||
const boxMaterialCode = boxItem[materialCodeField];
|
||||
const boxQty = boxItem[qtyField];
|
||||
const mxQty = mxMap.get(boxMaterialCode);
|
||||
if (mxQty !== undefined && boxQty > mxQty) {
|
||||
console.log(
|
||||
`Warning: Material ID ${boxMaterialCode} in box has a higher quantity (${boxQty}) than in mx (${mxQty}).`
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// 非采购分配
|
||||
function allocateQty(box, details) {
|
||||
console.log('更配的公共方法', box, details)
|
||||
const boxMap = new Map();
|
||||
for (const item of box) {
|
||||
boxMap.set(item.materialNumber, item.qty);
|
||||
}
|
||||
|
||||
const allocationLog = []; // 记录每个箱子分配给了哪一条明细以及分配的数量
|
||||
|
||||
for (const detail of details) {
|
||||
if (boxMap.has(detail.materialNumber) && boxMap.get(detail.materialNumber) > 0) {
|
||||
const availableBoxQty = boxMap.get(detail.materialNumber);
|
||||
const qtyToAllocate = Math.min(availableBoxQty, detail.availableQty - detail.qty);
|
||||
detail.qty += qtyToAllocate;
|
||||
boxMap.set(detail.materialNumber, availableBoxQty - qtyToAllocate);
|
||||
allocationLog.push({
|
||||
materialNumber: detail.materialNumber,
|
||||
erpDetailId: detail.erpDetailId,
|
||||
qty: qtyToAllocate
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
updatedDetails: details,
|
||||
allocationLog
|
||||
};
|
||||
}
|
||||
// 箱子数量对比以上架的数量进行相减,然后在去判断数量是否有超过
|
||||
function subtractQty(mxArray, boxArray) {
|
||||
const result = [];
|
||||
const materialMap = new Map();
|
||||
// 创建物料ID与数量的映射关系
|
||||
mxArray.forEach(item => {
|
||||
const {
|
||||
materialNumber,
|
||||
qty
|
||||
} = item;
|
||||
materialMap.set(materialNumber, qty);
|
||||
});
|
||||
|
||||
boxArray.forEach(item => {
|
||||
const {
|
||||
materialNumber,
|
||||
qty
|
||||
} = item;
|
||||
const mxQty = materialMap.get(materialNumber);
|
||||
if (mxQty !== undefined) {
|
||||
const subtractedQty = mxQty - qty; // mx的数量减去box的数量
|
||||
result.push({
|
||||
materialNumber,
|
||||
qty: subtractedQty
|
||||
});
|
||||
} else {
|
||||
result.push(item); // 如果box中的物料在mx中不存在,则直接添加到结果中
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
//按照产品分配序列号
|
||||
function scanAndAllocate(arr, materialNumber, serialNumber) {
|
||||
// 遍历数组,按顺序分配序列号
|
||||
for (const item of arr) {
|
||||
if (item.materialNumber === materialNumber) {
|
||||
if (item.xlhList.length == 0) {
|
||||
item.xlhList.push(serialNumber)
|
||||
item.qty = item.xlhList.length
|
||||
return arr
|
||||
break
|
||||
}
|
||||
if (item.xlhList.length > 0) {
|
||||
if (item.xlhList.length < item.availableQty) {
|
||||
item.xlhList.push(serialNumber)
|
||||
item.qty = item.xlhList.length
|
||||
return arr
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
function doScanQrCode() {
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.scanCode({
|
||||
onlyFromCamera: true,
|
||||
success: function(res) {
|
||||
//去除空格
|
||||
let space_str = '\u0000'
|
||||
let code = res.result.replace(space_str, "")
|
||||
res.result = code
|
||||
resolve(res)
|
||||
},
|
||||
fail() {
|
||||
reject('失败')
|
||||
},
|
||||
complete() {
|
||||
console.log("扫码结束,无论失败还是成功都会回调");
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//计算列表的高度
|
||||
function setlistHeight(topclass, bottomclass) {
|
||||
let aa = {
|
||||
top: 0,
|
||||
body: 0
|
||||
}
|
||||
uni.getSystemInfo({
|
||||
success(res) {
|
||||
let screenHeight = res.screenHeight
|
||||
let listheight = 0
|
||||
// console.log('系统高度',screenHeight)
|
||||
//.box获取class为box的元素,如果使用的id= 'box' 则使用'#box'
|
||||
uni.createSelectorQuery().select(topclass).boundingClientRect(data => {
|
||||
aa.top = data.height + 5
|
||||
// console.log('top',aa.top)
|
||||
}).exec()
|
||||
uni.createSelectorQuery().select(bottomclass).boundingClientRect(data => {
|
||||
aa.body = res.screenHeight - aa.top + 5 - data.height - 95
|
||||
// console.log('bottom',aa.body)
|
||||
}).exec()
|
||||
// console.log('系统高度,最终列表高度',screenHeight, aa)
|
||||
}
|
||||
})
|
||||
return aa
|
||||
}
|
||||
// 防止处理多次点击
|
||||
function notMoreTap(means, clickName, ...data) {
|
||||
// means是点击后需要执行的方法
|
||||
// clickName是一个变量的名字控制是否是第一次点击
|
||||
// data是点击需要传的参数:用逗号隔开就可以,...为剩余运算符,除去前两位传的参数,剩下的传的参数都会留在data里
|
||||
let that = this;
|
||||
console.log(this, that[clickName])
|
||||
if (that[clickName]) {
|
||||
// 第一次点击
|
||||
console.log('第一次点击')
|
||||
that[clickName] = false;
|
||||
if (data && data.length > 0) {
|
||||
if (data.length != 0 && data[0] != '') {
|
||||
means(...data);
|
||||
}
|
||||
} else {
|
||||
means();
|
||||
}
|
||||
setTimeout(() => {
|
||||
that[clickName] = true;
|
||||
}, 2000)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '请不要重复点击',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}
|
||||
// app物理键返回
|
||||
function appgoBack(e, type) {
|
||||
|
||||
// 这里可以写自定义的逻辑表示来源是安卓手机的返回键
|
||||
if (e.from == 'backbutton' && type == 'warehousIndex') {
|
||||
uni.navigateTo({
|
||||
url: "/pages/warehous/index"
|
||||
})
|
||||
console.log('物理键返回', e.from, type)
|
||||
}
|
||||
if (e.from == 'backbutton' && type == 'login') {
|
||||
console.log('物理键返回', e.from, type)
|
||||
// 执行自定义操作,比如弹出提示框
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定要退出登录吗?',
|
||||
success: function(res) {
|
||||
if (res.confirm) {
|
||||
// 用户点击确定,执行返回操作
|
||||
uni.navigateTo({
|
||||
url: "/pages/login"
|
||||
});
|
||||
} else if (res.cancel) {
|
||||
// 用户点击取消,不执行返回操作
|
||||
return true; // 阻止页面返回
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if (e.from == 'backbutton' && type == 'index') {
|
||||
console.log('物理键返回', e.from, type)
|
||||
uni.navigateTo({
|
||||
url: "/pages/index"
|
||||
})
|
||||
}
|
||||
if (e.from == 'backbutton' && type == 'otherUnderwearIndex') {
|
||||
console.log('物理键返回', e.from, type)
|
||||
uni.navigateTo({
|
||||
url: "/pages/otherUnderwear/index"
|
||||
})
|
||||
}
|
||||
}
|
||||
export {
|
||||
setObjectArry,
|
||||
arraysHaveSameElements,
|
||||
arrayContainsArray,
|
||||
arraysAreNotEqual,
|
||||
sumObjectArrayValues,
|
||||
sumNestedObjectValues,
|
||||
findMaterialCodePosition,
|
||||
distributeStockForOrder,
|
||||
sumByField,
|
||||
checkQtyExceedsLimit,
|
||||
allocateQty,
|
||||
subtractQty,
|
||||
scanAndAllocate,
|
||||
doScanQrCode,
|
||||
setlistHeight,
|
||||
notMoreTap, //禁止多次点击
|
||||
appgoBack,
|
||||
}
|
||||
67
static/js/scanCode.js
Normal file
@@ -0,0 +1,67 @@
|
||||
let main;
|
||||
let filter;
|
||||
let receiver;
|
||||
let tag = false;
|
||||
/**
|
||||
* 开始广播监听扫码
|
||||
*/
|
||||
const start = () => {
|
||||
/* #ifdef APP-PLUS */
|
||||
main.registerReceiver(receiver, filter);
|
||||
// console.log('开始广播监听扫码init')
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 停止广播监听扫码
|
||||
* that:传this;
|
||||
*/
|
||||
const stop = () => {
|
||||
/* #ifdef APP-PLUS */
|
||||
main.unregisterReceiver(receiver);
|
||||
// console.log('停止广播监听扫码init')
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
|
||||
/** 剩余下个变量已经做了全局变量
|
||||
*
|
||||
* 定义广播
|
||||
* that:传this;
|
||||
*/
|
||||
const init = (onReceive) => {
|
||||
/* #ifdef APP-PLUS */
|
||||
//获取activity
|
||||
main = plus.android.runtimeMainActivity();
|
||||
const IntentFilter = plus.android.importClass('android.content.IntentFilter');
|
||||
filter = new IntentFilter();
|
||||
// 扫描设置的广播名称A(上面指代了)
|
||||
filter.addAction("com.android.server.scannerservice.broadcast");
|
||||
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
|
||||
onReceive: function (context, intent) {
|
||||
plus.android.importClass(intent);
|
||||
// 扫描设置的标签名称B(上面指代了)
|
||||
const code = intent.getStringExtra("scannerdata");
|
||||
if (tag) return;
|
||||
tag = true;
|
||||
setTimeout(function () {
|
||||
tag = false;
|
||||
}, 150);
|
||||
uni.$emit('xwscan', {
|
||||
code: code
|
||||
})
|
||||
//到这里扫描成功了,可以调用自己的业务逻辑,code就是扫描的结果 return出code进行业务处理
|
||||
onReceive
|
||||
|
||||
}
|
||||
});
|
||||
/* #endif */
|
||||
|
||||
}
|
||||
|
||||
export const broadcastScan = {
|
||||
init,
|
||||
start,
|
||||
stop,
|
||||
};
|
||||
BIN
static/logo.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
752
static/public.scss
Normal file
@@ -0,0 +1,752 @@
|
||||
/*登录*/
|
||||
.login {
|
||||
background: #fff;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.logoPage {
|
||||
background: url(@/static/img/logbg.png) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding-top: 70px;
|
||||
|
||||
.logo_from {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
margin-top: 30px;
|
||||
|
||||
.item {
|
||||
margin: 0 32px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.loglabe {
|
||||
font-size: 14px;
|
||||
color: #505050;
|
||||
}
|
||||
|
||||
.loginput {
|
||||
font-size: 18px;
|
||||
color: #222222;
|
||||
padding: 5px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid #dfe3e8;
|
||||
}
|
||||
|
||||
.dlbt {
|
||||
background: #2d53eb;
|
||||
margin: 0 32px;
|
||||
margin-top: 10px;
|
||||
color: #fff;
|
||||
padding: 10px 0;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.imglogo {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*end登录*/
|
||||
/*首頁*/
|
||||
.sy {
|
||||
background: #eef1f5;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
.sybg {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 175px;
|
||||
}
|
||||
.sy_info {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 32px;
|
||||
padding-bottom: 22px;
|
||||
padding-top: 55px;
|
||||
z-index: 1;
|
||||
.sy_txt {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
z-index: 1;
|
||||
.t1 {
|
||||
font-size: 16px;
|
||||
padding-bottom: 3px;
|
||||
color: #fff;
|
||||
}
|
||||
.t2 {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
.syoutico {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
}
|
||||
.sy_meuns {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0 24px;
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
.sy_item {
|
||||
padding: 24px;
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
margin-bottom: 16px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
.symeunico {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
margin-right: 24px;
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
}
|
||||
.t1 {
|
||||
color: #222222;
|
||||
font-size: 16px;
|
||||
margin-left: 66px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*end首頁*/
|
||||
/*入库菜单*/
|
||||
.rkpage {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
background: #eef1f5;
|
||||
|
||||
.rkMuen {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
background: #fff;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
margin: 15px;
|
||||
margin-top: 10px;
|
||||
|
||||
.item {
|
||||
width: 33.3%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.rkico {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.t1 {
|
||||
font-size: 14px;
|
||||
color: #505050;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*end入库菜单*/
|
||||
/*入库-收货*/
|
||||
::v-deep .select-wrap {
|
||||
border: none !important;
|
||||
width: 100% !important;
|
||||
height: 19px !important;
|
||||
}
|
||||
/*按鈕置灰*/
|
||||
.disbt {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.shpage {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: #eef1f5;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
// background: pink;
|
||||
.searchico {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
.sh_gdInfo {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
top: 67px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
z-index: 11;
|
||||
.item {
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
position: relative;
|
||||
.it {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 0 20px;
|
||||
padding: 8px 0;
|
||||
border-bottom: 1px solid #e0e5eb;
|
||||
|
||||
input {
|
||||
flex: 1;
|
||||
margin: 0 2%;
|
||||
}
|
||||
}
|
||||
|
||||
.itsp {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.t1,
|
||||
.t2 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.t2 {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.redtag {
|
||||
color: #d6366e;
|
||||
}
|
||||
}
|
||||
|
||||
.item2 {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 8px 0;
|
||||
|
||||
.it2 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 25%;
|
||||
|
||||
.t1 {
|
||||
font-size: 14px;
|
||||
color: #222222;
|
||||
font-weight: bold;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
.t2 {
|
||||
font-size: 14px;
|
||||
color: #717275;
|
||||
}
|
||||
|
||||
.rednum {
|
||||
color: #f42551;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.itembg2 {
|
||||
background: #f3f6fa;
|
||||
.it {
|
||||
.t1,
|
||||
.t2 {
|
||||
color: #bbbdc1 !important;
|
||||
}
|
||||
.searchico {
|
||||
opacity: 0.6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shlb {
|
||||
height: 35%;
|
||||
// background: #D6366E;
|
||||
position: relative;
|
||||
margin-top: 66%;
|
||||
padding: 10px 6px;
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
margin: 0 6px;
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
.item {
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
margin-bottom: 5px;
|
||||
padding: 5px;
|
||||
z-index: 2;
|
||||
.it {
|
||||
padding: 0 2px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 10px;
|
||||
|
||||
// background: linear-gradient(360deg, #FFFFFF 0%, #EDF3FF 100%);
|
||||
.txt {
|
||||
font-size: 12px;
|
||||
color: #222222;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footbts {
|
||||
display: flex;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
background: #fff;
|
||||
padding: 5px 0px;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
.bt {
|
||||
width: 50%;
|
||||
margin: 0 10px;
|
||||
padding: 10px 0;
|
||||
border-radius: 10px;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.bt1 {
|
||||
background: #f96422;
|
||||
}
|
||||
|
||||
.bt2 {
|
||||
background: linear-gradient(215deg, #122ae1 10%, #3e67fd 100%);
|
||||
}
|
||||
.bt3 {
|
||||
background: #f5bd08;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*end入库-收货*/
|
||||
|
||||
/*标题栏目*/
|
||||
.mianheade {
|
||||
padding: 12px 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding-top: 30px;
|
||||
.blacBackico {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
.pagetitle {
|
||||
text-align: center;
|
||||
color: #222222;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-left: 38%;
|
||||
}
|
||||
}
|
||||
/*标题栏目2*/
|
||||
.mianheade2 {
|
||||
background: url(@/static/img/headbg.png) no-repeat !important;
|
||||
background-size: 100% 100% !important;
|
||||
.blacBackico {
|
||||
width: 25px !important;
|
||||
height: 25px !important;
|
||||
}
|
||||
.pagetitle {
|
||||
color: #fff !important;
|
||||
}
|
||||
}
|
||||
/*采购上架入库*/
|
||||
.cgsjrklb {
|
||||
margin-top: 74%;
|
||||
height: 30%;
|
||||
.item {
|
||||
.it {
|
||||
.titstr {
|
||||
font-weight: bold;
|
||||
color: #222;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cssj_it {
|
||||
background: #f3f6fa;
|
||||
padding: 3px 5px;
|
||||
border-radius: 6px;
|
||||
.tlinb {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.txtNum {
|
||||
font-size: 12px;
|
||||
color: #717275;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.tinput {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
.inpt {
|
||||
width: 100px;
|
||||
height: 15px;
|
||||
font-size: 12px;
|
||||
background: #fff;
|
||||
margin-left: 5px;
|
||||
border: 1px solid #d0d7de;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*非采购上架入库*/
|
||||
.f_cgsjrklb {
|
||||
margin-top: 67.5%;
|
||||
height: 34%;
|
||||
}
|
||||
/*拣货出库*/
|
||||
.jscklb {
|
||||
margin-top: 74%;
|
||||
height: 29%;
|
||||
.titstr {
|
||||
border-bottom: 1px dashed #d2d3d5 !important;
|
||||
padding-bottom: 3px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
}
|
||||
/*快速改箱/装箱*/
|
||||
.gx_zxpage {
|
||||
position: relative;
|
||||
.cxsjdiv {
|
||||
width: 100%;
|
||||
background: #eef1f5;
|
||||
margin-top: 48%;
|
||||
z-index: 10;
|
||||
position: relative;
|
||||
.gxcheckbox {
|
||||
margin-left: 16px;
|
||||
}
|
||||
.checkboxlabel {
|
||||
margin-bottom: 4px !important;
|
||||
span {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.f_cgsjrklb {
|
||||
position: relative;
|
||||
height: 42%;
|
||||
z-index: 1;
|
||||
.titstr {
|
||||
padding-bottom: 2px;
|
||||
border-bottom: 1px dashed #d2d3d5 !important;
|
||||
}
|
||||
.cssj_it {
|
||||
background: #fff;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 整箱移货上架
|
||||
.zxyhsjpage {
|
||||
.jscklb {
|
||||
margin-top: 51%;
|
||||
height: 43%;
|
||||
}
|
||||
}
|
||||
// 出库回退
|
||||
.ckhtsjpage {
|
||||
.f_cgsjrklb {
|
||||
margin-top: 85%;
|
||||
height: 23%;
|
||||
}
|
||||
}
|
||||
// 出库回退xj
|
||||
.ckhtsxjpage {
|
||||
.f_cgsjrklb {
|
||||
margin-top: 65%;
|
||||
height: 35%;
|
||||
}
|
||||
}
|
||||
// 盘点
|
||||
.pdpage {
|
||||
.jscklb {
|
||||
margin-top: 56%;
|
||||
height: 40%;
|
||||
}
|
||||
}
|
||||
// 个别样式
|
||||
.inpt1 {
|
||||
font-size: 14px;
|
||||
color: #222;
|
||||
}
|
||||
.inpt2 {
|
||||
color: #bbbdc1;
|
||||
}
|
||||
.inptbordred {
|
||||
border: 1px solid red !important;
|
||||
}
|
||||
.it50 {
|
||||
width: 50% !important;
|
||||
}
|
||||
.fgx {
|
||||
border-left: 1px solid #e0e5eb;
|
||||
height: 11px;
|
||||
margin: 0 16px;
|
||||
display: inline-flex;
|
||||
} //分割线
|
||||
.txtflexnum {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.ckhtit {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.gxzxlb {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.redtxt {
|
||||
.txt {
|
||||
color: #f42551 !important;
|
||||
}
|
||||
}
|
||||
.greentxt {
|
||||
.txt {
|
||||
color: #1bc9b0 !important;
|
||||
}
|
||||
}
|
||||
.tpleft {
|
||||
padding-left: 8px;
|
||||
}
|
||||
.deletico {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.xlfeview {
|
||||
position: absolute !important;
|
||||
top: 0 !important;
|
||||
z-index: 10;
|
||||
}
|
||||
.wwselectit {
|
||||
margin-left: 20rpx !important;
|
||||
flex: 1 !important;
|
||||
}
|
||||
.inpt {
|
||||
font-size: 12px;
|
||||
}
|
||||
.ckjhTxt {
|
||||
background: #f3f6fa;
|
||||
padding: 2px;
|
||||
border: 1px solid #d0d7de;
|
||||
border-radius: 6px;
|
||||
margin-left: 5px;
|
||||
min-width: 20px;
|
||||
}
|
||||
.cktinput_jh {
|
||||
border: 1px solid #d0d7de;
|
||||
border-radius: 6px;
|
||||
padding: 2px;
|
||||
}
|
||||
.oldxlhboxct {
|
||||
width: 100%;
|
||||
height: 60rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.tkinput {
|
||||
width: 93%;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
padding: 2px 5px !important;
|
||||
}
|
||||
.tkvi {
|
||||
font-size: 14px;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.disInput {
|
||||
background: #edf0f5 !important;
|
||||
}
|
||||
.shpage {
|
||||
.u-input {
|
||||
// padding: 0;
|
||||
height: 20px;
|
||||
}
|
||||
}
|
||||
.ibgt {
|
||||
margin-top: 5px !important;
|
||||
background: #f3f6fa !important;
|
||||
border-radius: 4px !important;
|
||||
padding: 5px 10px 5px 10px !important;
|
||||
.txt {
|
||||
color: #505050 !important;
|
||||
}
|
||||
}
|
||||
.pdpage {
|
||||
position: relative;
|
||||
::v-deep .u-popup__content {
|
||||
margin-top: -30% !important;
|
||||
}
|
||||
}
|
||||
.orgicomain {
|
||||
font-size: 10px;
|
||||
color: orange;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 35%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
A .orgico {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid orange;
|
||||
text-align: center;
|
||||
line-height: 12px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
.icinfo {
|
||||
width: 22px !important;
|
||||
}
|
||||
.boxtkct {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
overflow-y: auto;
|
||||
max-height: 60vh;
|
||||
.c_item {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
}
|
||||
.boxtkct1 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: start;
|
||||
width: 100%;
|
||||
.t1 {
|
||||
font-size: 36rpx !important;
|
||||
color: #333;
|
||||
}
|
||||
.cws {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.cwit {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-weight: bold;
|
||||
.krcwname {
|
||||
font-size: 36rpx !important;
|
||||
color: #333;
|
||||
margin-right: 25rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.txtflexnum {
|
||||
.pl {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
.mxcwdiv {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
max-width: 48%;
|
||||
background: #eef1f5;
|
||||
margin-left: 2%;
|
||||
padding: 0 4px;
|
||||
.cwhitzs {
|
||||
width: 96%;
|
||||
margin: 0 10rpx;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
.ntxtcolor{
|
||||
color: #505050 !important;
|
||||
}
|
||||
.nbtxt{
|
||||
font-weight: blod;
|
||||
}
|
||||
.nwemxflex{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 6rpx 0;
|
||||
.fgline{
|
||||
margin: 0 30rpx;
|
||||
background: #BBBDC1;
|
||||
width: 1px;
|
||||
height: 24rpx;
|
||||
}
|
||||
.txt{
|
||||
color: #505050 !important;
|
||||
}
|
||||
|
||||
}
|
||||
.nslbzflex{
|
||||
margin-bottom: 8rpx;
|
||||
.n-sl-bz{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.tinput{
|
||||
width: 48% !important;
|
||||
}
|
||||
}
|
||||
.remaktinpt{
|
||||
background-color: #fff;
|
||||
font-size: 12px;
|
||||
border: 1px solid #ccc;
|
||||
padding:5px 10px;
|
||||
border-radius: 6px;
|
||||
}
|
||||