Files
ZangShiQi/addon/cashier/source/os/pages/scale/add.vue
2026-04-04 17:27:12 +08:00

379 lines
9.8 KiB
Vue
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<base-page>
<view class="common-wrap common-form body-overhide">
<view class="common-title">电子秤设置</view>
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
电子秤名称
</label>
<view class="form-input-inline"><input type="text" v-model="formData.name" class="form-input" /></view>
<text class="form-word-aux"></text>
</view>
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
秤类型
</label>
<view class="form-input-inline border-none">
<view class="scale-type">
<view :class="{ active: formData.type == 'barcode' }" @click="formData.type = 'barcode'">条码秤</view>
<view :class="{ active: formData.type == 'cashier' }" @click="formData.type = 'cashier'">收银秤</view>
</view>
</view>
</view>
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
电子秤品牌
</label>
<view class="form-input-inline border-none">
<uni-data-select v-model="formData.brand" :localdata="brandList" label=""></uni-data-select>
</view>
</view>
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
电子秤型号
</label>
<view class="form-input-inline border-none">
<uni-data-select v-model="formData.model" :localdata="modelList"></uni-data-select>
</view>
</view>
<view class="common-form-item">
<label class="form-label">通讯方式</label>
<view class="form-inline">
<radio-group @change="networkTypeChange" class="form-radio-group">
<label class="radio form-radio-item">
<radio value="tcp" :checked="formData.network_type == 'tcp'" />
TCP
</label>
<label class="radio form-radio-item">
<radio value="serialport" :checked="formData.network_type == 'serialport'" />
串口
</label>
</radio-group>
</view>
</view>
<view class="scale-tips" v-if="formData.brand == 'dahua' && formData.model == 'TM'">
<view>使用大华电子秤前需先配置一下电子秤条码格式配置方式为</view>
<view>
使用大华电子秤厂官方提供的大华电子秤上位机软件TMA4.0连接到设备后打开基础设置 -> 系统参数设置条码格式为 FFWWWWWNNNNNC
FFWWWWWNNNNNEEEEEC设置好之后点击下载下载成功之后即配置完成
</view>
</view>
<view class="scale-tips" v-if="formData.brand == 'aclas' && formData.model == 'LS'">
<view>使用顶尖电子秤需将电子秤默认条码类型配置为7 或者 87</view>
</view>
<view v-show="formData.network_type == 'tcp'">
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
设备ip地址
</label>
<view class="form-input-inline">
<input type="text" v-model="formData.config.ip" class="form-input" />
</view>
<text class="form-word-aux"></text>
</view>
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
设备端口号
</label>
<view class="form-input-inline">
<input type="text" v-model="formData.config.port" class="form-input" />
</view>
<text class="form-word-aux"></text>
</view>
</view>
<view v-show="formData.network_type == 'serialport'">
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
串口名称
</label>
<view class="form-input-inline">
<input type="text" v-model="formData.config.serialport" class="form-input" />
</view>
<text class="form-word-aux"></text>
</view>
<view class="common-form-item">
<label class="form-label">
<text class="required">*</text>
串口波特率
</label>
<view class="form-input-inline">
<input type="text" v-model="formData.config.baudrate" class="form-input" />
</view>
<text class="form-word-aux"></text>
</view>
</view>
<view class="common-btn-wrap">
<button type="primary" class="screen-btn" @click="saveFn">保存</button>
<button type="default" class="screen-btn" @click="back">返回</button>
</view>
</view>
</base-page>
</template>
<script>
import uniDataSelect from '@/components/uni-data-select/uni-data-select.vue';
import {
getScaleDetail,
getScaleBrand,
addScale,
editScale
} from '@/api/scale.js'
export default {
components: {
uniDataSelect
},
data() {
return {
brandList: [],
modelList: [],
formData: {
type: 'barcode',
name: "",
brand: "",
model: "",
config: {
ip: '',
port: '',
serialport: '',
baudrate: ''
},
network_type: 'tcp'
},
flag: false,
scaleId: 0,
scaleBrand: {}
};
},
async onLoad(option) {
await this.getScaleBrandFn();
if (option.scale_id) {
this.scaleId = option.scale_id;
this.getDetailFn();
}
},
onShow() {},
watch: {
'formData.brand': {
handler: function(nval) {
if (nval) {
let modelList = this.scaleBrand[nval].model_list
this.modelList = Object.keys(modelList).map(key => {
return {
value: key,
text: modelList[key].model_name
}
})
if (this.formData.model && !Object.keys(modelList).includes(this.formData.model)) this.formData
.model = '';
} else {
this.formData.model = '';
this.modelList = []
}
},
immediate: true
}
},
methods: {
async getScaleBrandFn() {
if (!this.addon.includes('scale')) {
this.$util.showToast({
title: '未安装电子秤插件'
});
return;
}
let res = await getScaleBrand()
if (res.code == 0) {
this.scaleBrand = res.data
let brandList = [];
Object.keys(this.scaleBrand).forEach(key => {
brandList.push({
text: this.scaleBrand[key].brand_name,
value: key
})
})
this.brandList = brandList
}
},
bradnChange(e) {
this.formData.model = e.detail.value;
},
selectBrand(e) {
this.formData.brand = e;
},
saveFn() {
if (!this.addon.includes('scale')) {
this.$util.showToast({
title: '未安装电子秤插件'
});
return;
}
if (this.check()) {
if (this.flag) return false;
this.flag = true;
let data = this.$util.deepClone(this.formData)
data.config = JSON.stringify(this.formData.config)
data.scale_id = this.scaleId
let action = '';
if (this.scaleId) {
action = editScale(data)
} else {
action = addScale(data)
}
action.then(res => {
this.flag = false;
this.$util.showToast({
title: res.message
});
if (res.code >= 0) {
setTimeout(() => {
this.$util.redirectTo('/pages/scale/list');
}, 1500);
}
});
}
},
back() {
this.$util.redirectTo('/pages/scale/list');
},
check() {
if (!this.formData.name) {
this.$util.showToast({
title: '请输入电子秤名称'
});
return false;
}
if (!this.formData.model) {
this.$util.showToast({
title: '请选择电子秤型号'
});
return false;
}
if (this.formData.network_type == 'tcp') {
if (!this.formData.config.ip) {
this.$util.showToast({
title: '请输入设备IP地址'
});
return false;
}
if (!this.formData.config.port) {
this.$util.showToast({
title: '请输入设备端口号'
});
return false;
}
}
if (this.formData.network_type == 'serialport') {
if (!this.formData.config.serialport) {
this.$util.showToast({
title: '请输入串口名称'
});
return false;
}
if (!this.formData.config.baudrate) {
this.$util.showToast({
title: '请输入串口波特率'
});
return false;
}
}
return true;
},
getDetailFn() {
if (!this.addon.includes('scale')) {
this.$util.showToast({
title: '未安装电子秤插件'
});
return;
}
getScaleDetail({
"scale_id": this.scaleId
}).then(res => {
if (res.code >= 0) {
if (res.data) {
this.formData = res.data
}
}
})
},
networkTypeChange(e) {
this.formData.network_type = e.detail.value
}
}
};
</script>
<style lang="scss" scoped>
.common-wrap {
padding: 30rpx;
background-color: #fff;
@extend %body-overhide;
}
.common-title {
font-size: 0.18rem;
margin-bottom: 0.2rem;
}
.scale-type {
display: flex;
align-items: center;
view {
width: 1rem;
height: 0.35rem;
line-height: 0.35rem;
text-align: center;
font-size: 0.14rem;
border: 0.01rem solid #e6e6e6;
border-left-width: 0;
transition: all 0.3s;
cursor: pointer;
&:hover,
&.active {
border-color: $primary-color;
color: $primary-color;
background-color: var(--primary-color-light-9);
box-shadow: -0.01rem 0 0 0 $primary-color;
}
&:first-child {
border-left-width: 0.01rem;
box-shadow: none;
}
}
}
.border-none {
border: none !important;
}
/deep/ .uni-select {
border-radius: 0;
}
.scale-tips {
display: inline-block;
padding: .1rem;
border-radius: .05rem;
color: $primary-color !important;
border: .01rem solid $primary-color !important;
background-color: var(--primary-color-light-9) !important;
margin-left: 1.1rem;
margin-bottom: 0.1rem;
}
</style>