Browse Source

2312

master
lc18518571399 10 months ago
parent
commit
2476fb76ba
  1. 220
      api/app/model/chanpin.js
  2. 23
      api/app/model/dingdan.js
  3. 4
      api/app/model/user.js
  4. 29
      api/app/service/dingdan.js
  5. 6
      api/package.json
  6. 4
      front/src/main/index.js
  7. 7
      front/src/renderer/src/assets/css/base.css
  8. 1
      front/src/renderer/src/components/dingdanformcomponent.vue
  9. 16
      front/src/renderer/src/components/dingdantablecomponent.vue
  10. 1
      front/src/renderer/src/components/formcomponent.vue
  11. 6
      front/src/renderer/src/components/tablecomponent.vue
  12. 58
      front/src/renderer/src/views/dingdan.vue
  13. 4
      start.bat
  14. BIN
      模版/S6直营销售单导入模板.xls
  15. BIN
      模版/产品信息(模板).xls
  16. BIN
      模版/客户编码文档(1).xls
  17. BIN
      模版/销售订单导入准备表(1).xlsx

220
api/app/model/chanpin.js

@ -51,7 +51,8 @@ module.exports = app => {
// 箱装量 // 箱装量
xiangzhuangliang: { xiangzhuangliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱装单位 // 箱装单位
xiangzhuangdanwei: { xiangzhuangdanwei: {
@ -61,7 +62,8 @@ module.exports = app => {
// 最大单位箱装量 // 最大单位箱装量
zuidadanweixiangzhuangliang: { zuidadanweixiangzhuangliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大箱装单位 // 最大箱装单位
zuidaxiangzhuangdanwei: { zuidaxiangzhuangdanwei: {
@ -91,82 +93,98 @@ module.exports = app => {
// 最高采购价 // 最高采购价
zuigaocaigoujia: { zuigaocaigoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 商超价1 // 商超价1
shangchaojia1: { shangchaojia1: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 现金价 // 现金价
xianjinjia: { xianjinjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 二批流通价 // 二批流通价
erpiliutongjia: { erpiliutongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 商超价 // 商超价
shangchaojia: { shangchaojia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 现金零售价 // 现金零售价
xianjinlingshoujia: { xianjinlingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 商超零售价 // 商超零售价
shangchaolingshoujia: { shangchaolingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 特通价 // 特通价
tetongjia: { tetongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 分公司价 // 分公司价
fengongsijia: { fengongsijia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 零食店价 // 零食店价
shangchaolingshoujia: { shangchaolingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 初中高中价 // 初中高中价
chuzhonggaozhongjia: { chuzhonggaozhongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 车销价 // 车销价
chexiaojia: { chexiaojia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 发货价11 // 发货价11
shangchaolingshoujia: { shangchaolingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 发货价12 // 发货价12
fahuojia12: { fahuojia12: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 进货税率% // 进货税率%
jinhuoshuilv: { jinhuoshuilv: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 发货税率% // 发货税率%
fahuoshuilv: { fahuoshuilv: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 包装 // 包装
baozhuang: { baozhuang: {
@ -176,7 +194,8 @@ module.exports = app => {
// 毛利率 // 毛利率
maolilv: { maolilv: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 主存放仓库 // 主存放仓库
zhucunfangcangku: { zhucunfangcangku: {
@ -191,7 +210,8 @@ module.exports = app => {
// 保质期(天) // 保质期(天)
baozhiqi: { baozhiqi: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 有效? // 有效?
youxiao: { youxiao: {
@ -216,7 +236,8 @@ module.exports = app => {
// 单位重量 // 单位重量
danweizhongliang: { danweizhongliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 品牌 // 品牌
pinpai: { pinpai: {
@ -226,27 +247,32 @@ module.exports = app => {
// 单位体积(立方米) // 单位体积(立方米)
danweitiji: { danweitiji: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 箱重量(kg) // 箱重量(kg)
xiangzhongliang: { xiangzhongliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 最大单位重量(kg) // 最大单位重量(kg)
zuidadanweizhongliang: { zuidadanweizhongliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 箱体积(立方米) // 箱体积(立方米)
xiangtiji: { xiangtiji: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 最大单位体积(立方米) // 最大单位体积(立方米)
zuidadanweitiji: { zuidadanweitiji: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 描述 // 描述
miaoshu: { miaoshu: {
@ -271,22 +297,26 @@ module.exports = app => {
// 标准核算价 // 标准核算价
biaozhunhesuanjia: { biaozhunhesuanjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 建议零售价 // 建议零售价
jianyilingshoujia: { jianyilingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最近一次采购价 // 最近一次采购价
zuijinyicicaigoujia: { zuijinyicicaigoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最近一次销售价 // 最近一次销售价
zuijinyicixiaoshoujia: { zuijinyicixiaoshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱条形码 // 箱条形码
xiangtiaoxingma: { xiangtiaoxingma: {
@ -318,22 +348,26 @@ module.exports = app => {
// 发货产品基数 // 发货产品基数
fahuochanpinjishu: { fahuochanpinjishu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 采购最少数量 // 采购最少数量
caigouzuishaoshuliang: { caigouzuishaoshuliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 采购倍数 // 采购倍数
caigoubeishu: { caigoubeishu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 采购滚动基数 // 采购滚动基数
caigougundongjishu: { caigougundongjishu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最小单位产品 // 最小单位产品
zuixiaodanweichanpin: { zuixiaodanweichanpin: {
@ -343,7 +377,8 @@ module.exports = app => {
// 最小单位倍数 // 最小单位倍数
zuixiaodanweibeishu: { zuixiaodanweibeishu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 产品归类 // 产品归类
chanpinguilei: { chanpinguilei: {
@ -358,142 +393,170 @@ module.exports = app => {
// 箱单位最高采购价 // 箱单位最高采购价
xiangdanweizuigaocaigoujia: { xiangdanweizuigaocaigoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位商超价1 // 箱单位商超价1
xiangdanweishangchaojia1: { xiangdanweishangchaojia1: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位现金价 // 箱单位现金价
xiangdanweixianjinjia: { xiangdanweixianjinjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位二批流通价 // 箱单位二批流通价
xiangdanweierpiliutongjia: { xiangdanweierpiliutongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位商超价 // 箱单位商超价
xiangdanweishangchaojia: { xiangdanweishangchaojia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位现金零售价 // 箱单位现金零售价
xiangdanweixianjinlingshoujia: { xiangdanweixianjinlingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位商超零售价 // 箱单位商超零售价
xiangdanweishangchaolingshoujia: { xiangdanweishangchaolingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位特通价 // 箱单位特通价
xiangdanweitetongjia: { xiangdanweitetongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位分公司价 // 箱单位分公司价
xiangdanweifengongsijia: { xiangdanweifengongsijia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位零食店价 // 箱单位零食店价
xiangdanweilingshidianjia: { xiangdanweilingshidianjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位初中高中价 // 箱单位初中高中价
xiangdanweichuzhonggaozhongjia: { xiangdanweichuzhonggaozhongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位车销价 // 箱单位车销价
xiangdanweichexiaojia: { xiangdanweichexiaojia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位发货价11 // 箱单位发货价11
xiangdanweifahuojia11: { xiangdanweifahuojia11: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱单位发货价12 // 箱单位发货价12
xiangdanweifahuojia12: { xiangdanweifahuojia12: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位最高采购价 // 最大单位最高采购价
zuidadanweizuigaocaigoujia: { zuidadanweizuigaocaigoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位商超价1 // 最大单位商超价1
zuidadanweishangchaojia1: { zuidadanweishangchaojia1: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位现金价 // 最大单位现金价
zuidadanweixianjinjia: { zuidadanweixianjinjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位二批流通价 // 最大单位二批流通价
zuidadanweierpiliutongjia: { zuidadanweierpiliutongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位商超价 // 最大单位商超价
zuidadanweishangchaojia: { zuidadanweishangchaojia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位现金零售价 // 最大单位现金零售价
zuidadanweixianjinlingshoujia: { zuidadanweixianjinlingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位商超零售价 // 最大单位商超零售价
zuidadanweishangchaolingshoujia: { zuidadanweishangchaolingshoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位特通价 // 最大单位特通价
zuidadanweitetongjia: { zuidadanweitetongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位分公司价 // 最大单位分公司价
zuidadanweifengongsijia: { zuidadanweifengongsijia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位零食店价 // 最大单位零食店价
zuidadanweilingshidianjia: { zuidadanweilingshidianjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位初中高中价 // 最大单位初中高中价
zuidadanweichuzhonggaozhongjia: { zuidadanweichuzhonggaozhongjia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位车销价 // 最大单位车销价
zuidadanweichexiaojia: { zuidadanweichexiaojia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位发货价11 // 最大单位发货价11
zuidadanweifahuojia11: { zuidadanweifahuojia11: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单位发货价12 // 最大单位发货价12
zuidadanweifahuojia12: { zuidadanweifahuojia12: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 默认单据单位 // 默认单据单位
morendanjudanwei: { morendanjudanwei: {
@ -523,7 +586,7 @@ module.exports = app => {
// 建档日期 // 建档日期
jiandangriqi: { jiandangriqi: {
type: Date, type: Date,
default: Date.now default: ""
}, },
// 出货是否加工 // 出货是否加工
chuhuoshifujiagong: { chuhuoshifujiagong: {
@ -533,27 +596,31 @@ module.exports = app => {
// 保质期天数需大于 // 保质期天数需大于
baozhiqitianshuxudayu: { baozhiqitianshuxudayu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 单品重量误差 // 单品重量误差
danpinzhongliangwucha: { danpinzhongliangwucha: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大单品重量误差百分比% // 最大单品重量误差百分比%
zuidadanpinzhongliangwuchabaifenbi: { zuidadanpinzhongliangwuchabaifenbi: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大箱重量误差 // 最大箱重量误差
zuidaxiangzhongliangwucha: { zuidaxiangzhongliangwucha: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 价格调整时间 // 价格调整时间
jiagediaozhengshijian: { jiagediaozhengshijian: {
type: Date, type: Date,
default: Date.now default: ""
}, },
// 录入人 // 录入人
lururen: { lururen: {
@ -563,7 +630,8 @@ module.exports = app => {
// 允收天数 // 允收天数
yunshoutianshu: { yunshoutianshu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 强制序列号管理 // 强制序列号管理
qiangzhixuliehaoguanli: { qiangzhixuliehaoguanli: {
@ -578,22 +646,26 @@ module.exports = app => {
// 长(cm) // 长(cm)
chang: { chang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 宽(cm) // 宽(cm)
kuan: { kuan: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 高(cm) // 高(cm)
gao: { gao: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(4)) }
}, },
// 每托盘件数 // 每托盘件数
meituopanjianshu: { meituopanjianshu: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
//数据是否删除 //数据是否删除
isExit: { isExit: {

23
api/app/model/dingdan.js

@ -48,7 +48,8 @@ module.exports = app => {
// 单据单位数量 // 单据单位数量
danjudanweishuliang: { danjudanweishuliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 条码 // 条码
tiaoma: { tiaoma: {
@ -63,22 +64,26 @@ module.exports = app => {
// 修改后销售数量 // 修改后销售数量
xiugaihouxiaoshoushuliang: { xiugaihouxiaoshoushuliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最高采购价 // 最高采购价
zuigaocaigoujia: { zuigaocaigoujia: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 箱装量 // 箱装量
xiangzhuangliang: { xiangzhuangliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 最大箱装量 // 最大箱装量
zuidaxiangzhuangliang: { zuidaxiangzhuangliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 规格型号 // 规格型号
guigexinghao: { guigexinghao: {
@ -128,14 +133,16 @@ module.exports = app => {
// 销售数量 // 销售数量
xiaoshoushuliang: { xiaoshoushuliang: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
// 销售金额 // 销售金额
xiaoshoujine: { xiaoshoujine: {
type: Number, type: Number,
default: 0 default: 0,
set: (val) => { return Number(Number(val).toFixed(2)) }
}, },
//是否售卖 //是否售卖
isNotSale: { isNotSale: {
type: Boolean, type: Boolean,
default: true, default: true,

4
api/app/model/user.js

@ -19,8 +19,8 @@ module.exports = app => {
}, },
// 客户编号 // 客户编号
usercode: { usercode: {
type: Number, type: String,
default: 0, default: "",
index: true, index: true,
unique: true unique: true
}, },

29
api/app/service/dingdan.js

@ -29,14 +29,15 @@ class DingdanService extends Service {
returnData.hasError = false returnData.hasError = false
returnData.msg = "数据删除成功" returnData.msg = "数据删除成功"
} else if (subType === "edit") { } else if (subType === "edit") {
paramsLocal = paramsLocal.list[0] let list = await this.dealList(paramsLocal.list)
paramsLocal["update_at"] = Date.now(); let updateItem = list[0]
let chanpinItemA = await chanpinModel.find({ tiaoxingma: paramsLocal.tiaoma }) updateItem["update_at"] = Date.now();
let chanpinItemB = await chanpinModel.find({ xiangtiaoxingma: paramsLocal.tiaoma }) let chanpinItemA = await chanpinModel.find({ tiaoxingma: updateItem.tiaoma })
let chanpinItemC = await chanpinModel.find({ zuidaxiangzhuangtiaoma: paramsLocal.tiaoma }) let chanpinItemB = await chanpinModel.find({ xiangtiaoxingma: updateItem.tiaoma })
let chanpinItemC = await chanpinModel.find({ zuidaxiangzhuangtiaoma: updateItem.tiaoma })
if (chanpinItemA.length || chanpinItemB.length || chanpinItemC.length) { if (chanpinItemA.length || chanpinItemB.length || chanpinItemC.length) {
paramsLocal = { ...paramsLocal, isNotSale: false } updateItem = { ...updateItem, isNotSale: false }
let res = await modelLocal.updateOne({ _id: paramsLocal._id }, paramsLocal) let res = await modelLocal.updateOne({ _id: updateItem._id }, updateItem)
returnData.hasError = false returnData.hasError = false
returnData.msg = "数据更新成功" returnData.msg = "数据更新成功"
} else { } else {
@ -76,7 +77,9 @@ class DingdanService extends Service {
async dealList(list) { async dealList(list) {
let { ctx } = this let { ctx } = this
let listLocal = [] let listLocal = []
let listCopy = _.cloneDeep(list) let modelLocal = ctx.model.Dingdan
let allList = await modelLocal.find({ isExit: 1 })
let listCopy = _.concat(list, allList)
let pinmingGroup = _.groupBy(listCopy, o => o.tiaoma) let pinmingGroup = _.groupBy(listCopy, o => o.tiaoma)
let pinmingOptionObj = {} let pinmingOptionObj = {}
for (let key in pinmingGroup) { for (let key in pinmingGroup) {
@ -89,7 +92,7 @@ class DingdanService extends Service {
pinmingOptionItem["value"] = element.pinming pinmingOptionItem["value"] = element.pinming
pinmingxuxnaing.push(pinmingOptionItem) pinmingxuxnaing.push(pinmingOptionItem)
} }
pinmingOptionObj[key] = pinmingxuxnaing pinmingOptionObj[key] = _.unionBy(pinmingxuxnaing, "value")
} }
let userModel = ctx.model.User let userModel = ctx.model.User
let chanpinModel = ctx.model.Chanpin let chanpinModel = ctx.model.Chanpin
@ -125,7 +128,7 @@ class DingdanService extends Service {
item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang
} }
item["xiaoshoujine"] = item.xiaoshoujine item["xiaoshoujine"] = item.xiaoshoujine
item["zuigaocaigoujia"] = _.get(chanpinItemA, [0, "zuigaocaigoujia"], "") item["zuigaocaigoujia"] = _.get(chanpinItemA, [0, "zuigaocaigoujia"], 0)
item["xiangzhuangliang"] = _.get(chanpinItemA, [0, "xiangzhuangliang"], "") item["xiangzhuangliang"] = _.get(chanpinItemA, [0, "xiangzhuangliang"], "")
item["zuidaxiangzhuangliang"] = _.get(chanpinItemA, [0, "zuidadanweixiangzhuangliang"], "") item["zuidaxiangzhuangliang"] = _.get(chanpinItemA, [0, "zuidadanweixiangzhuangliang"], "")
item["guigexinghao"] = _.get(chanpinItemA, [0, "guigexinghao"], "") item["guigexinghao"] = _.get(chanpinItemA, [0, "guigexinghao"], "")
@ -142,7 +145,7 @@ class DingdanService extends Service {
let jishu = Number(guigexinghaoArr[1]) let jishu = Number(guigexinghaoArr[1])
item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang * jishu item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang * jishu
item["xiaoshoujine"] = item.xiaoshoujine item["xiaoshoujine"] = item.xiaoshoujine
item["zuigaocaigoujia"] = _.get(chanpinItemB, [0, "zuigaocaigoujia"], "") item["zuigaocaigoujia"] = _.get(chanpinItemB, [0, "zuigaocaigoujia"], 0)
item["xiangzhuangliang"] = _.get(chanpinItemB, [0, "xiangzhuangliang"], "") item["xiangzhuangliang"] = _.get(chanpinItemB, [0, "xiangzhuangliang"], "")
item["zuidaxiangzhuangliang"] = _.get(chanpinItemB, [0, "zuidadanweixiangzhuangliang"], "") item["zuidaxiangzhuangliang"] = _.get(chanpinItemB, [0, "zuidadanweixiangzhuangliang"], "")
item["guigexinghao"] = _.get(chanpinItemB, [0, "guigexinghao"], "") item["guigexinghao"] = _.get(chanpinItemB, [0, "guigexinghao"], "")
@ -159,7 +162,7 @@ class DingdanService extends Service {
let jishu = Number(guigexinghaoArr[1]) let jishu = Number(guigexinghaoArr[1])
item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang * jishu * Number((_.get(chanpinItemC, [0, "xiangzhuangliang"], 1) || 1)) item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang * jishu * Number((_.get(chanpinItemC, [0, "xiangzhuangliang"], 1) || 1))
item["xiaoshoujine"] = item.xiaoshoujine item["xiaoshoujine"] = item.xiaoshoujine
item["zuigaocaigoujia"] = _.get(chanpinItemC, [0, "zuigaocaigoujia"], "") item["zuigaocaigoujia"] = _.get(chanpinItemC, [0, "zuigaocaigoujia"], 0)
item["xiangzhuangliang"] = _.get(chanpinItemC, [0, "xiangzhuangliang"], "") item["xiangzhuangliang"] = _.get(chanpinItemC, [0, "xiangzhuangliang"], "")
item["zuidaxiangzhuangliang"] = _.get(chanpinItemC, [0, "zuidadanweixiangzhuangliang"], "") item["zuidaxiangzhuangliang"] = _.get(chanpinItemC, [0, "zuidadanweixiangzhuangliang"], "")
item["guigexinghao"] = _.get(chanpinItemC, [0, "guigexinghao"], "") item["guigexinghao"] = _.get(chanpinItemC, [0, "guigexinghao"], "")
@ -173,7 +176,7 @@ class DingdanService extends Service {
item["xiaoshoushuliang"] = item.xiaoshoushuliang item["xiaoshoushuliang"] = item.xiaoshoushuliang
item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang item["xiugaihouxiaoshoushuliang"] = item.xiaoshoushuliang
item["xiaoshoujine"] = item.xiaoshoujine item["xiaoshoujine"] = item.xiaoshoujine
item["zuigaocaigoujia"] = "" item["zuigaocaigoujia"] = 0
item["xiangzhuangliang"] = "" item["xiangzhuangliang"] = ""
item["zuidaxiangzhuangliang"] = "" item["zuidaxiangzhuangliang"] = ""
item["guigexinghao"] = "" item["guigexinghao"] = ""

6
api/package.json

@ -25,11 +25,7 @@
"start": "egg-scripts start --daemon --title=egg-server-back", "start": "egg-scripts start --daemon --title=egg-server-back",
"stop": "egg-scripts stop --title=egg-server-back", "stop": "egg-scripts stop --title=egg-server-back",
"dev": "egg-bin dev", "dev": "egg-bin dev",
"test": "npm run lint -- --fix && npm run test:local", "build": "npm install --production && tar -zcvf ../release.tgz ."
"test:local": "egg-bin test",
"cov": "egg-bin cov",
"lint": "eslint .",
"ci": "npm run lint && npm run cov"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

4
front/src/main/index.js

@ -10,8 +10,8 @@ function createWindow() {
mainWindow = new BrowserWindow({ mainWindow = new BrowserWindow({
// fullscreen: true, // fullscreen: true,
// fullscreenable: true, // fullscreenable: true,
width: 960, width: 1280,
height: 540, height: 800,
// width:1080, // width:1080,
// height:1920, // height:1920,
show: false, show: false,

7
front/src/renderer/src/assets/css/base.css

@ -8,13 +8,18 @@ body {
padding: 0 !important; padding: 0 !important;
} }
.el-table .isNotSale { .el-table .blueRow {
background-color: #a0cfff; background-color: #a0cfff;
} }
.el-table .redRow { .el-table .redRow {
background-color: #fab6b6; background-color: #fab6b6;
} }
.el-table .yellowRow { .el-table .yellowRow {
background-color: #f3d19e; background-color: #f3d19e;
} }
.el-table .lightYellowRow {
background-color: #faecd8;
}

1
front/src/renderer/src/components/dingdanformcomponent.vue

@ -27,7 +27,6 @@
</template> </template>
<template v-else-if="formItem.type === 'date'"> <template v-else-if="formItem.type === 'date'">
<el-date-picker v-model="formData[formItem.prop]" type="date" :placeholder="`请选择${formItem.label}`" /> <el-date-picker v-model="formData[formItem.prop]" type="date" :placeholder="`请选择${formItem.label}`" />
<el-input />
</template> </template>
</el-form-item> </el-form-item>
</el-form> </el-form>

16
front/src/renderer/src/components/dingdantablecomponent.vue

@ -5,6 +5,9 @@
<el-table-column type="selection" width="38" :reserve-selection="true" fixed="left"> <el-table-column type="selection" width="38" :reserve-selection="true" fixed="left">
</el-table-column> </el-table-column>
<el-table-column type="index" width="38" :reserve-selection="true" fixed="left" label="序号"> <el-table-column type="index" width="38" :reserve-selection="true" fixed="left" label="序号">
<template #default="scope">
<span>{{ pageSize * (currentPage - 1) + scope.$index + 1 }}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column v-for="(headerItem, headerIndex) in tableHeader" :label="headerItem.label" show-overflow-tooltip <el-table-column v-for="(headerItem, headerIndex) in tableHeader" :label="headerItem.label" show-overflow-tooltip
:key="headerIndex" :min-width="`${headerItem.label.length * 15 + 8}px`"> :key="headerIndex" :min-width="`${headerItem.label.length * 15 + 8}px`">
@ -109,17 +112,20 @@ export default {
}, },
// //
getRowClassName({ row }) { getRowClassName({ row }) {
let rowClassName = ""
if (row.isNotSale) { if (row.isNotSale) {
return 'isNotSale' rowClassName = "blueRow"
} }
if (row.xiaoshoujine < row.zuigaocaigoujia) { if (row.xiaoshoujine < row.zuigaocaigoujia) {
return 'redRow' rowClassName = "redRow"
} }
if ((row.pinmingxuanxiang || []).length > 1) { if ((row.pinmingxuanxiang || []).length > 1) {
return 'yellowRow' rowClassName = "yellowRow"
} }
return '' if (dayjs(row.update_at.slice(0, 19)).valueOf() > dayjs(row.create_at.slice(0, 19)).valueOf()) {
rowClassName = "lightYellowRow"
}
return rowClassName
}, },
}, },

1
front/src/renderer/src/components/formcomponent.vue

@ -21,7 +21,6 @@
</template> </template>
<template v-else-if="formItem.type === 'date'"> <template v-else-if="formItem.type === 'date'">
<el-date-picker v-model="formData[formItem.prop]" type="date" :placeholder="`请选择${formItem.label}`" /> <el-date-picker v-model="formData[formItem.prop]" type="date" :placeholder="`请选择${formItem.label}`" />
<el-input />
</template> </template>
</el-form-item> </el-form-item>
</el-form> </el-form>

6
front/src/renderer/src/components/tablecomponent.vue

@ -1,9 +1,13 @@
<template> <template>
<div class="tableClass"> <div class="tableClass">
<el-table :data="tableData" height="calc(100vh - 84px)" border @select="selectChange" @select-all="selectChange" fit :row-key="getRowKeys"> <el-table :data="tableData" height="calc(100vh - 84px)" border @select="selectChange" @select-all="selectChange" fit
:row-key="getRowKeys">
<el-table-column type="selection" width="38" :reserve-selection="true" fixed="left"> <el-table-column type="selection" width="38" :reserve-selection="true" fixed="left">
</el-table-column> </el-table-column>
<el-table-column type="index" width="38" :reserve-selection="true" fixed="left" label="序号"> <el-table-column type="index" width="38" :reserve-selection="true" fixed="left" label="序号">
<template #default="scope">
<span>{{ pageSize * (currentPage - 1) + scope.$index + 1 }}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column v-for="(headerItem, headerIndex) in tableHeader" :label="headerItem.label" show-overflow-tooltip <el-table-column v-for="(headerItem, headerIndex) in tableHeader" :label="headerItem.label" show-overflow-tooltip
:key="headerIndex" :min-width="`${headerItem.label.length * 15 + 8}px`"> :key="headerIndex" :min-width="`${headerItem.label.length * 15 + 8}px`">

58
front/src/renderer/src/views/dingdan.vue

@ -1,12 +1,12 @@
<template> <template>
<div class="rightClass"> <div class="rightClass">
<div style="margin:0 0 8px 0"> <div style="margin:0 0 8px 0">
<!-- <el-button type="primary" @click="addData"> <el-button type="primary" @click="addData">
<el-icon> <el-icon>
<Plus /> <Plus />
</el-icon> </el-icon>
<span>新增</span> <span>新增</span>
</el-button> --> </el-button>
<el-button type="danger" @click="deleteData(selectionData)" :disabled="selectionData.length == 0"> <el-button type="danger" @click="deleteData(selectionData)" :disabled="selectionData.length == 0">
<el-icon> <el-icon>
<Delete /> <Delete />
@ -30,6 +30,15 @@
</el-icon> </el-icon>
<span>刷新</span> <span>刷新</span>
</el-button> </el-button>
<el-button type="primary" @click="clickColor('blue')" color="#a0cfff">
<span>蓝色</span>
</el-button>
<el-button type="primary" @click="clickColor('red')" color="#fab6b6">
<span>红色</span>
</el-button>
<el-button type="primary" @click="clickColor('yellow')" color="#f3d19e">
<span>黄色</span>
</el-button>
<el-button type="primary" @click="exportxiaoshoudata"> <el-button type="primary" @click="exportxiaoshoudata">
<el-icon> <el-icon>
<Download /> <Download />
@ -225,7 +234,6 @@ export default {
}, },
// //
exportData() { exportData() {
let that = this
window.electron.ipcRenderer.on('Dingdan', (eve, str) => { window.electron.ipcRenderer.on('Dingdan', (eve, str) => {
if (str.hasError) { if (str.hasError) {
ElMessage({ ElMessage({
@ -261,6 +269,15 @@ export default {
} }
this.updateSeach(params) this.updateSeach(params)
}, },
//
async clickColor(color) {
let params = {
blue: { isNotSale: true },
red: { $where: "this.zuigaocaigoujia > this.xiaoshoujine" },
yellow: { $where: "this.pinmingxuanxiang.length>1" }
}
await this.updateSeach(params[color])
},
// //
selectChange(selection) { selectChange(selection) {
this.selectionData = _.cloneDeep(selection) this.selectionData = _.cloneDeep(selection)
@ -386,7 +403,6 @@ export default {
}, },
// //
exportxiaoshoudata() { exportxiaoshoudata() {
let params = { let params = {
subType: "exportxiaoshou", subType: "exportxiaoshou",
url: "/api/exportDingdanInfo", url: "/api/exportDingdanInfo",
@ -425,7 +441,7 @@ export default {
} }
lilstLocal.push(listItem) lilstLocal.push(listItem)
} }
lilstLocal.push({ "销售金额": allMoney }) lilstLocal.push({ "销售金额": `总计:${allMoney}` })
let jsonWorkSheet = this.$XLSX.utils.json_to_sheet(lilstLocal); let jsonWorkSheet = this.$XLSX.utils.json_to_sheet(lilstLocal);
let workBook = { let workBook = {
SheetNames: ["sheet1"], SheetNames: ["sheet1"],
@ -439,6 +455,34 @@ export default {
dealexportS6(list) { dealexportS6(list) {
let lilstLocal = [] let lilstLocal = []
let allMoney = 0 let allMoney = 0
let allObj = {
"厂编": "",
"货号": "",
"Q7平台经销商": "",
"业务员": "",
"业务类型": "",
"主表备注": "",
"仓库": "",
"付款方式": "",
"单价": "",
"单据单位": "",
"单据单位单价": "",
"单据单位数量": "",
"单据类型": "",
"发货地址": "",
"备注": "",
"客户收货日期": "",
"客户订单号": "",
"店号": "",
"批号": "",
"数量": "",
"是否赠品": "",
"理货员": "",
"销售单号": "",
"销售日期": "",
"预计开票日": "",
"预订货编号": "",
}
for (let i = 0; i < list.length; i++) { for (let i = 0; i < list.length; i++) {
let item = list[i]; let item = list[i];
let listItem = {} let listItem = {}
@ -447,9 +491,9 @@ export default {
let headerItem = this.exportS6[j]; let headerItem = this.exportS6[j];
listItem[headerItem.label] = item[headerItem.prop] listItem[headerItem.label] = item[headerItem.prop]
} }
lilstLocal.push(listItem) lilstLocal.push({ ...allObj, ...listItem })
} }
lilstLocal.push({ "单据单位数量": allMoney }) lilstLocal.push({ "单据单位数量": `总计:${allMoney}` })
let jsonWorkSheet = this.$XLSX.utils.json_to_sheet(lilstLocal); let jsonWorkSheet = this.$XLSX.utils.json_to_sheet(lilstLocal);
let workBook = { let workBook = {
SheetNames: ["sheet1"], SheetNames: ["sheet1"],

4
start.bat

@ -0,0 +1,4 @@
@echo off
cd E:\jscode\code\chanpininfo\release
npm start
exit

BIN
模版/S6直营销售单导入模板.xls

Binary file not shown.

BIN
模版/产品信息(模板).xls

Binary file not shown.

BIN
模版/客户编码文档(1).xls

Binary file not shown.

BIN
模版/销售订单导入准备表(1).xlsx

Binary file not shown.
Loading…
Cancel
Save