Compare commits

...

No commits in common. "xmlrpcui打印细码" and "weapp" have entirely different histories.

49 changed files with 859 additions and 1134 deletions

14
.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
# Windows
[Dd]esktop.ini
Thumbs.db
$RECYCLE.BIN/
# macOS
.DS_Store
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
# Node.js
node_modules/

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"git.ignoreLimitWarning": true
}

0
README.md Normal file
View File

65
app.js
View File

@ -2,36 +2,35 @@
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 定义全局配置信息
this.globalData = {
httpsUrl: 'https://www.gdsfs.top', // 请填写有效的 URL不包含端口号
db: 'YS2025', // 请填写数据库名称
username: '441785369@qq.com',
password: 'Sj89061189'
};
const conf = wx.getStorageSync('conf') || {};
conf.httpsUrl = this.globalData.httpsUrl;
conf.db = this.globalData.db;
conf.username = this.globalData.username;
// conf.password = this.globalData.password;
wx.setStorageSync('conf', conf)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
},
globalData: {
userInfo: null,
httpsUrl: '',
db: '',
username: ''
}
})
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 定义全局配置信息
this.globalData = {
odooUrl: 'https://www.gdsfs.top', // 请填写有效的 URL不包含端口号
db: 'YS2025', // 请填写数据库名称
username: '441785369@qq.com',
password: 'Sj89061189'
};
const conf = wx.getStorageSync('conf') || {};
conf.odooUrl = this.globalData.odooUrl;
conf.db = this.globalData.db;
conf.username = this.globalData.username;
// conf.password = this.globalData.password;
wx.setStorageSync('conf', conf)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
},
globalData: {
userInfo: null,
odooUrl: '',
db: '',
username: ''
}
})

View File

@ -1,42 +1,40 @@
{
"pages": [
"pages/deal/deal",
"pages/deal/saleOrder/saleOrder",
"pages/deal/saleOrder/kanban/saleOrderKanban",
"pages/deal/saleOrder/kanban/from/saleOrderFrom",
"pages/deal/saleOrder/kanban/from/printTag/printTag",
"pages/deal/saleOrder/kanban/from/printTag/printTemplate/printTemplate",
"pages/deal/saleOrder/kanban/from/printTag/printTemplate/bluetooth/bluetooth",
"pages/data/data",
"pages/index/index",
"pages/logs/logs"
],
"tabBar": {
"list": [
{
"pagePath": "pages/deal/deal",
"text": "Deal"
},
{
"pagePath": "pages/data/data",
"text": "Data"
},
{
"pagePath": "pages/logs/logs",
"text": "state"
},
{
"pagePath": "pages/index/index",
"text": "Hr Employee"
}
]
},
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "Weixin",
"navigationBarBackgroundColor": "#ffffff"
},
"componentFramework": "glass-easel",
"sitemapLocation": "sitemap.json",
"lazyCodeLoading": "requiredComponents"
"pages": [
"pages/index/index",
"pages/logs/logs",
"pages/sale_order/sale_order",
"pages/sale_order/form/sale_order_form"
],
"tabBar": {
"list": [
{
"pagePath": "pages/sale_order/sale_order",
"text": "Sale Order"
},
{
"pagePath": "pages/logs/logs",
"text": "state"
},
{
"pagePath": "pages/index/index",
"text": "Hr Employee"
}
]
},
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "Weixin",
"navigationBarBackgroundColor": "#ffffff"
},
"usingComponents": {
"van-button": "@vant/weapp/button/index",
"van-card": "@vant/weapp/card/index",
"van-field": "@vant/weapp/field/index",
"van-popup": "@vant/weapp/popup/index",
"van-picker": "@vant/weapp/picker/index",
"van-tag": "@vant/weapp/tag/index"
},
"componentFramework": "glass-easel",
"sitemapLocation": "sitemap.json",
"lazyCodeLoading": "requiredComponents"
}

381
package-lock.json generated Normal file
View File

@ -0,0 +1,381 @@
{
"name": "xmlrpc",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "xmlrpc",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@vant/weapp": "^1.11.7",
"url": "^0.11.4",
"xml-js": "^1.6.11",
"xml2js": "^0.6.2",
"xmlrpc": "^1.3.2"
},
"devDependencies": {
"miniprogram-api-typings": "^4.0.4"
}
},
"node_modules/@vant/weapp": {
"version": "1.11.7",
"resolved": "https://registry.npmjs.org/@vant/weapp/-/weapp-1.11.7.tgz",
"integrity": "sha512-Rwn9BBnb4kHSV4XmvBicwtd42J+amEUfnFDcXJsGNPNX4a9c/DoT6YLsm4X1wB2+sQbdiQsbFBLAvGRBxCkD8g==",
"license": "MIT"
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
"integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/call-bound": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
"integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-intrinsic": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
"integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"function-bind": "^1.1.2",
"get-proto": "^1.0.0",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/miniprogram-api-typings": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/miniprogram-api-typings/-/miniprogram-api-typings-4.0.4.tgz",
"integrity": "sha512-51SElLHA9t7/v54IFVjZcbeP04dQL4HreCvBLt3XGA3qruKRT9gvBtBvHXfOjXbhjVd6Vy2myOg/0LELPWmhfg==",
"dev": true,
"license": "MIT"
},
"node_modules/object-inspect": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
"integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
"license": "MIT"
},
"node_modules/qs": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"license": "ISC"
},
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3",
"side-channel-list": "^1.0.0",
"side-channel-map": "^1.0.1",
"side-channel-weakmap": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-list": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-map": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5",
"object-inspect": "^1.13.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-weakmap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5",
"object-inspect": "^1.13.3",
"side-channel-map": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/url": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
"integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
"license": "MIT",
"dependencies": {
"punycode": "^1.4.1",
"qs": "^6.12.3"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/xml-js": {
"version": "1.6.11",
"resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
"integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
"license": "MIT",
"dependencies": {
"sax": "^1.2.4"
},
"bin": {
"xml-js": "bin/cli.js"
}
},
"node_modules/xml2js": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
"integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
"license": "MIT",
"dependencies": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
},
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/xml2js/node_modules/xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"license": "MIT",
"engines": {
"node": ">=4.0"
}
},
"node_modules/xmlbuilder": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
"integrity": "sha512-eKRAFz04jghooy8muekqzo8uCSVNeyRedbuJrp0fovbLIi7wlsYtdUn3vBAAPq2Y3/0xMz2WMEUQ8yhVVO9Stw==",
"license": "MIT",
"engines": {
"node": ">=4.0"
}
},
"node_modules/xmlrpc": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz",
"integrity": "sha512-jQf5gbrP6wvzN71fgkcPPkF4bF/Wyovd7Xdff8d6/ihxYmgETQYSuTc+Hl+tsh/jmgPLro/Aro48LMFlIyEKKQ==",
"license": "MIT",
"dependencies": {
"sax": "1.2.x",
"xmlbuilder": "8.2.x"
},
"engines": {
"node": ">=0.8",
"npm": ">=1.0.0"
}
}
}
}

22
package.json Normal file
View File

@ -0,0 +1,22 @@
{
"name": "xmlrpc",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"@vant/weapp": "^1.11.7",
"url": "^0.11.4",
"xml-js": "^1.6.11",
"xml2js": "^0.6.2",
"xmlrpc": "^1.3.2"
},
"devDependencies": {
"miniprogram-api-typings": "^4.0.4"
}
}

View File

@ -1,66 +0,0 @@
// pages/data/data.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -1,2 +0,0 @@
<!--pages/data/data.wxml-->
<text>pages/data/data.wxml</text>

View File

@ -1 +0,0 @@
/* pages/data/data.wxss */

View File

@ -1,66 +0,0 @@
// pages/deal/deal.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -1,7 +0,0 @@
{
"usingComponents": {
"van-grid": "@vant/weapp/grid/index",
"van-grid-item": "@vant/weapp/grid-item/index",
"van-nav-bar": "@vant/weapp/nav-bar/index"
}
}

View File

@ -1,22 +0,0 @@
<!--pages/deal/deal.wxml-->
<van-nav-bar
placeholder = "true"
title="买卖"
left-text="刷新按钮1"
right-text="短信通知弹窗1"
left-arrow
bind:click-left="onClickLeft"
bind:click-right="onClickRight"
/>
<van-grid column-num="2">
<van-grid-item icon="search" text="销售" badge="99+" link-type="navigateTo" url="/pages/deal/saleOrder/saleOrder" />
<van-grid-item icon="home-o" text="采购" dot />
<van-grid-item icon="home-o" text="客户" dot />
<van-grid-item icon="home-o" text="供应商" dot />
<van-grid-item icon="home-o" text="产品" dot />
<van-grid-item icon="home-o" text="库存" dot />
<van-grid-item icon="home-o" text="费用收入" dot />
<van-grid-item icon="home-o" text="退货" dot />
<van-grid-item icon="home-o" text="调拨" dot />
<van-grid-item icon="home-o" text="快捷开单" dot />
</van-grid>

View File

@ -1 +0,0 @@
/* pages/deal/deal.wxss */

View File

@ -1,81 +0,0 @@
// pages/deal/saleOrder/kanban/from/printTag/printTag.js
Page({
/**
* 页面的初始数据
*/
data: {
},
//跳转打印模板
onClickButton(event) {
console.log('Card clicked:', event);
// 将选中的 partner 数据存储到全局应用实例中
// const app = getApp();
// app.globalData.selectedPartner = partner;
// 在这里可以添加更多的处理逻辑,比如跳转到详情页
// wx.showToast({
// title: `点击了订单 ${partner.name}`,
// icon: 'none'
// });
// const index = event.currentTarget.dataset.index;
wx.navigateTo({
url: `/pages/deal/saleOrder/kanban/from/printTag/printTemplate/printTemplate`,
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -1,6 +0,0 @@
{
"usingComponents": {
"van-card": "@vant/weapp/card/index",
"van-submit-bar": "@vant/weapp/submit-bar/index"
}
}

View File

@ -1,23 +0,0 @@
<!--pages/deal/saleOrder/kanban/from/printTag/printTag.wxml-->
<van-card
num="2"
tag="标签"
price="10.00"
desc="描述信息"
title="商品标题"
thumb="{{ imageURL }}"
>
<view slot="footer">
<van-button size="mini">按钮</van-button>
<van-button size="mini">按钮</van-button>
</view>
</van-card>
<van-submit-bar
price="{{ 3050 }}"
button-text="确认"
bind:submit="onClickButton"
tip="{{ true }}"
>
<van-tag type="primary">标签3</van-tag>
<view slot="tip">提示1, <text>提示2</text></view>
</van-submit-bar>

View File

@ -1 +0,0 @@
/* pages/deal/saleOrder/kanban/from/printTag/printTag.wxss */

View File

@ -1,356 +0,0 @@
Page({
/**
* 页面的初始数据
*/
data: {
radio: '1',
devices: [],
connectedDeviceId: '',
serviceId: '',
characteristicId: '',
isLoading: false,
connectionStatus: '',
canPrint: false,
maxDevices: 10, // 设置最大搜索设备数量
datafinecode: [111, 112, 444], // 示例数据
currentCodeIndex: 0, // 当前打印的条码索引
printProgress: '' // 打印进度信息
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.initBluetooth();
this.autoConnect();
},
/**
* 初始化蓝牙模块
*/
initBluetooth() {
wx.openBluetoothAdapter({
success: (res) => {
console.log('蓝牙模块初始化成功', res);
this.startBluetoothDevicesDiscovery();
},
fail: (err) => {
console.error('蓝牙模块初始化失败', err);
wx.showToast({
title: '蓝牙初始化失败',
icon: 'none'
});
}
});
},
/**
* 自动连接蓝牙设备
*/
autoConnect() {
const savedDevice = wx.getStorageSync('bluetoothDevice');
if (savedDevice) {
this.connectDevice(savedDevice.deviceId);
}
},
/**
* 开始搜索蓝牙设备
*/
startBluetoothDevicesDiscovery() {
wx.startBluetoothDevicesDiscovery({
services: [], // 可以指定服务UUID如果不指定则搜索所有设备
success: (res) => {
console.log('开始搜索蓝牙设备', res);
this.onBluetoothDeviceFound();
},
fail: (err) => {
console.error('搜索蓝牙设备失败', err);
wx.showToast({
title: '搜索设备失败',
icon: 'none'
});
}
});
},
/**
* 处理找到的蓝牙设备
*/
onBluetoothDeviceFound() {
wx.onBluetoothDeviceFound((res) => {
const devices = res.devices;
const deviceList = [];
for (let i = 0; i < devices.length; i++) {
const device = devices[i];
if (device.name) { // 确保设备名称不为空
deviceList.push({
name: device.name,
deviceId: device.deviceId
});
}
}
// 合并新发现的设备到现有设备列表
const updatedDevices = [...this.data.devices, ...deviceList];
const uniqueDevices = Array.from(new Set(updatedDevices.map(device => device.deviceId)))
.map(deviceId => updatedDevices.find(device => device.deviceId === deviceId));
// 限制设备数量
const limitedDevices = uniqueDevices.slice(0, this.data.maxDevices);
this.setData({
devices: limitedDevices
}, () => {
console.log('devices 数据已更新:', this.data.devices);
if (this.data.devices.length >= this.data.maxDevices) {
this.stopBluetoothDevicesDiscovery();
}
});
});
},
/**
* 停止搜索蓝牙设备
*/
stopBluetoothDevicesDiscovery() {
wx.stopBluetoothDevicesDiscovery({
success: (res) => {
console.log('停止搜索蓝牙设备', res);
},
fail: (err) => {
console.error('停止搜索蓝牙设备失败', err);
}
});
},
/**
* 连接蓝牙设备
*/
connectDevice(deviceId) {
this.setData({
isLoading: true,
connectionStatus: '连接中...'
});
wx.createBLEConnection({
deviceId: deviceId,
success: (res) => {
console.log('连接蓝牙设备成功', res);
wx.setStorageSync('bluetoothDevice', { deviceId: deviceId }); // 保存设备信息到本地存储
this.setData({ connectedDeviceId: deviceId });
this.getBLEDeviceServices(deviceId);
},
fail: (err) => {
console.error('连接蓝牙设备失败', err);
this.setData({
isLoading: false,
connectionStatus: '连接失败'
});
wx.showToast({
title: '连接设备失败',
icon: 'none'
});
}
});
},
/**
* 获取蓝牙服务
*/
getBLEDeviceServices(deviceId) {
wx.getBLEDeviceServices({
deviceId: deviceId,
success: (res) => {
console.log('获取蓝牙服务成功', res);
const services = res.services;
for (let i = 0; i < services.length; i++) {
const service = services[i];
if (service.isPrimary) {
this.getBLEDeviceCharacteristics(deviceId, service.uuid);
break;
}
}
},
fail: (err) => {
console.error('获取蓝牙服务失败', err);
this.setData({
isLoading: false,
connectionStatus: '连接失败'
});
wx.showToast({
title: '获取服务失败',
icon: 'none'
});
}
});
},
/**
* 获取蓝牙特征
*/
getBLEDeviceCharacteristics(deviceId, serviceId) {
wx.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: serviceId,
success: (res) => {
console.log('获取蓝牙特征成功', res);
const characteristics = res.characteristics;
for (let i = 0; i < characteristics.length; i++) {
const characteristic = characteristics[i];
if (characteristic.properties.write) {
this.setData({
serviceId: serviceId,
characteristicId: characteristic.uuid,
isLoading: false,
connectionStatus: '连接成功',
canPrint: true
});
wx.showToast({
title: '连接成功',
icon: 'success'
});
break;
}
}
},
fail: (err) => {
console.error('获取蓝牙特征失败', err);
this.setData({
isLoading: false,
connectionStatus: '连接失败'
});
wx.showToast({
title: '获取特征失败',
icon: 'none'
});
}
});
},
/**
* 发送打印数据
*/
sendPrintData() {
if (!this.data.connectedDeviceId || !this.data.serviceId || !this.data.characteristicId) {
wx.showToast({
title: '请先连接蓝牙设备',
icon: 'none'
});
return;
}
this.setData({
currentCodeIndex: 0,
printProgress: `正在打印第 1 个条码`
});
this.printNextCode();
},
/**
* 打印下一个条码
*/
printNextCode() {
const codes = this.data.datafinecode;
const currentIndex = this.data.currentCodeIndex;
if (currentIndex >= codes.length) {
this.setData({
printProgress: '所有条码打印完成',
canPrint: false // 禁用打印按钮
});
return;
}
const code = codes[currentIndex];
const tsplData = `
SIZE 8,6
GAP 2,0
CLS
TEXT 10,10,"4",0,1,1,"S896 44 55 ${code}"
PRINT 1,1
`;
//TEXTTSPL 中用于在标签上打印文本的命令。
// 50,50指定文本的起始位置以点为单位。这里表示文本的左下角位于 (50, 50)。
// "4":字体编号,不同的打印机支持不同的字体编号,具体需要参考打印机手册。
// 0旋转角度0 表示不旋转。
// 2,2宽度和高度的比例因子这里的值为 2 表示文本的宽度和高度都放大 2 倍。
// "S896 44 55 ${code}":要打印的文本内容,其中 ${code} 是一个变量占位符,实际打印时会被替换为具体的值。
const buffer = this.stringToBuffer(tsplData);
wx.writeBLECharacteristicValue({
deviceId: this.data.connectedDeviceId,
serviceId: this.data.serviceId,
characteristicId: this.data.characteristicId,
value: buffer,
success: (res) => {
console.log('发送打印数据成功', res);
this.setData({
printProgress: `正在打印第 ${currentIndex + 1} 个条码`
});
setTimeout(() => {
this.setData({
currentCodeIndex: currentIndex + 1
});
this.printNextCode();
}, 1000); // 等待1秒后打印下一个条码
},
fail: (err) => {
console.error('发送打印数据失败', err);
this.setData({
printProgress: `打印第 ${currentIndex + 1} 个条码失败`
});
setTimeout(() => {
this.setData({
currentCodeIndex: currentIndex + 1
});
this.printNextCode();
}, 1000); // 等待1秒后打印下一个条码
}
});
},
/**
* 字符串转 ArrayBuffer
*/
stringToBuffer(str) {
const buffer = new ArrayBuffer(str.length);
const dataView = new DataView(buffer);
for (let i = 0; i < str.length; i++) {
dataView.setUint8(i, str.charCodeAt(i));
}
return buffer;
},
/**
* 重新搜索蓝牙设备
*/
reSearchDevices() {
this.setData({ devices: [] });
this.startBluetoothDevicesDiscovery();
},
/**
* 处理单选框变化
*/
onChange(event) {
this.setData({
radio: event.detail,
});
},
/**
* 处理单选框点击
*/
onClick(event) {
const { name } = event.currentTarget.dataset;
this.setData({
radio: name,
});
const device = this.data.devices.find(d => d.deviceId === name);
if (device) {
this.connectDevice(device.deviceId);
}
}
});

View File

@ -1,12 +0,0 @@
{
"usingComponents": {
"van-button": "@vant/weapp/button/index",
"van-row": "@vant/weapp/row/index",
"van-col": "@vant/weapp/col/index",
"van-divider": "@vant/weapp/divider/index",
"van-radio": "@vant/weapp/radio/index",
"van-radio-group": "@vant/weapp/radio-group/index",
"van-cell-group": "@vant/weapp/cell-group/index",
"van-cell": "@vant/weapp/cell/index"
}
}

View File

@ -1,36 +0,0 @@
<van-row>
<van-col offset="2" span="20">
<van-button type="info" color="linear-gradient(to right, #4bb0ff, #6149f6)" size="large" bind:click="reSearchDevices">重新搜索</van-button>
</van-col>
</van-row>
<van-divider />
<van-row>
<van-col offset="2" span="20">
<van-button type="info" color="linear-gradient(to right, #4bb0ff, #6149f6)" size="large" bind:click="sendPrintData" wx:if="{{ canPrint }}">打印</van-button>
</van-col>
</van-row>
<van-row>
<van-col offset="2" span="20">选择一个已配对的打印设备</van-col>
</van-row>
<van-row>
<van-col>
<van-radio-group value="{{ radio }}" bind:change="onChange">
<van-cell-group>
<van-cell wx:for="{{ devices }}" wx:key="deviceId" title="{{ item.name }}" clickable data-name="{{ item.deviceId }}" bind:click="onClick">
<van-radio slot="right-icon" name="{{ item.deviceId }}" />
</van-cell>
</van-cell-group>
</van-radio-group>
</van-col>
</van-row>
<van-row>
<van-col offset="2" span="20">
<van-loading type="spinner" color="#1989fa" wx:if="{{ isLoading }}" />
<van-text wx:else>{{ connectionStatus }}</van-text>
</van-col>
</van-row>
<van-row>
<van-col offset="2" span="20">
<van-text>{{ printProgress }}</van-text>
</van-col>
</van-row>

View File

@ -1 +0,0 @@
/* pages/deal/saleOrder/kanban/from/printTag/printTemplate/bluetooth/bluetooth.wxss */

View File

@ -1,81 +0,0 @@
// pages/deal/saleOrder/kanban/from/printTag/printTemplate/printTemplate.js
Page({
/**
* 页面的初始数据
*/
data: {
},
//跳转打蓝牙界面
printClick(event) {
console.log('Card clicked:', event);
// 将选中的 partner 数据存储到全局应用实例中
// const app = getApp();
// app.globalData.selectedPartner = partner;
// 在这里可以添加更多的处理逻辑,比如跳转到详情页
// wx.showToast({
// title: `点击了订单 ${partner.name}`,
// icon: 'none'
// });
// const index = event.currentTarget.dataset.index;
wx.navigateTo({
url: `/pages/deal/saleOrder/kanban/from/printTag/printTemplate/bluetooth/bluetooth`,
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"van-button": "@vant/weapp/button/index"
}
}

View File

@ -1,11 +0,0 @@
<!--pages/deal/saleOrder/kanban/from/printTag/printTemplate/printTemplate.wxml-->
<view>演示样式 随意拖动</view>
<view>模板</view>
<view>打印设置</view>
<view>标签尺寸</view>
<view>打印尺寸</view>
<view>打印份数</view>
<view>负数取绝对打印</view>
<view>字段控制</view>
<van-button type="info" bind:click="printClick">打印</van-button>

View File

@ -1 +0,0 @@
/* pages/deal/saleOrder/kanban/from/printTag/printTemplate/printTemplate.wxss */

View File

@ -1,80 +0,0 @@
// pages/deal/saleOrder/kanban/from/saleOrderFrom.js
Page({
/**
* 页面的初始数据
*/
data: {
},
onClickRight(event) {
console.log('Card clicked:', event);
// 将选中的 partner 数据存储到全局应用实例中
// const app = getApp();
// app.globalData.selectedPartner = partner;
// 在这里可以添加更多的处理逻辑,比如跳转到详情页
// wx.showToast({
// title: `点击了订单 ${partner.name}`,
// icon: 'none'
// });
// const index = event.currentTarget.dataset.index;
wx.navigateTo({
url: `/pages/deal/saleOrder/kanban/from/printTag/printTag`,
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -1,7 +0,0 @@
{
"usingComponents": {
"van-nav-bar": "@vant/weapp/nav-bar/index",
"van-icon": "@vant/weapp/icon/index",
"van-loading": "@vant/weapp/loading/index"
}
}

View File

@ -1,32 +0,0 @@
<!--pages/deal/saleOrder/kanban/from/saleOrderFrom.wxml-->
<van-nav-bar
title="标题"
left-text="返回"
right-text="按钮"
left-arrow
bind:click-left="onClickLeft"
bind:click-right="onClickRight"
/>
<view>基本信息 产品信息 费用金额</view>
<view>客户</view>
<view>地址</view>
<view>销售日期</view>
<view>计划收款日期</view>
<view>送货日期</view>
<view>默认仓库</view>
<view>业务员</view>
<view>销售订单号</view>
<view>销售订单行详细信息</view>
<view>订单金额</view>
<view>优惠金额</view>
<view>合同金额</view>
<view>非产品费用</view>
<view>使用预收款冲销</view>
<view>已收金额</view>
<view>本次收款</view>
<view>收款账户</view>
<view>备注</view>
<view>图片</view>
<view>附件</view>
<view>拒收</view>
<view>删除 复制新增 一键送货 生成退货单 保存</view>

View File

@ -1 +0,0 @@
/* pages/deal/saleOrder/kanban/from/saleOrderFrom.wxss */

View File

@ -1,10 +0,0 @@
{
"usingComponents": {
"van-nav-bar": "@vant/weapp/nav-bar/index",
"van-icon": "@vant/weapp/icon/index",
"van-card": "@vant/weapp/card/index",
"van-button": "@vant/weapp/button/index",
"van-tag": "@vant/weapp/tag/index",
"van-loading": "@vant/weapp/loading/index"
}
}

View File

@ -1,18 +0,0 @@
<!--pages/deal/saleOrder/kanban/saleOrderKanban.wxml-->
<van-nav-bar title="销售单" fixed="true" placeholder="true">
<van-icon name="search" slot="right" />
<van-loading type="spinner" color="#1989fa" wx:if="{{isLoading}}" vertical="true" slot="left" />
</van-nav-bar>
<view>销售日期帅选195 排序195 帅选195</view>
<van-card wx:for="{{kanban_datas}}" bind:tap="onCardClick" wx:key="id" data-index="{{index}}" num="{{item.date_order || '日期'}}" tag="{{index + 1 }}" price="{{item.orde_ddje || '0.00'}}" desc="{{item.partner_name|| '未知客户'}}" title="{{item.name || '销售订单号'}}" thumb="https://fastly.jsdelivr.net/npm/@vant/assets/ipad.jpeg">
<view slot="footer">
<van-button size="mini">分享195</van-button>
<van-button size="mini">打印195</van-button>
</view>
<view slot="tags">
<van-tag plain type="success" wx:for="{{item.orderLines}}" wx:key="item">
{{item.name}}
</van-tag>
</view>
</van-card>

View File

@ -1 +0,0 @@
/* pages/deal/saleOrder/kanban/saleOrderKanban.wxss */

View File

@ -1,71 +0,0 @@
// pages/deal/saleOrder/saleOrder.js
Page({
//弹出看板分页20个列表
onClickRight() {
wx.navigateTo({
url: `/pages/deal/saleOrder/kanban/saleOrderKanban`,
});
},
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

View File

@ -1,6 +0,0 @@
{
"usingComponents": {
"van-submit-bar": "@vant/weapp/submit-bar/index",
"van-nav-bar": "@vant/weapp/nav-bar/index"
}
}

View File

@ -1,25 +0,0 @@
<!--pages/deal/saleOrder/saleOrder.wxml-->
<van-nav-bar
placeholder = "true"
title="标题"
left-text="返回"
right-text="按钮"
left-arrow
bind:click-left="onClickLeft"
bind:click-right="onClickRight"
/>
<view> 客户1</view>
<view> 日期1</view>
<view> 默认仓库1</view>
<view> 业务员1</view>
<view> 客户货号 进价 +/-1</view>
<view> 产品列表</view>
<van-submit-bar
price="{{ 3050 }}"
button-text="确认"
bind:submit="onClickButton"
tip="{{ true }}"
>
<van-tag type="primary">标签3</van-tag>
<view slot="tip">提示1, <text>提示2</text></view>
</van-submit-bar>

View File

@ -1 +0,0 @@
/* pages/deal/saleOrder/saleOrder.wxss */

View File

@ -8,6 +8,7 @@
</button>
<view class="nickname-wrapper">
<text class="nickname-label">昵称</text>
<input type="nickname" class="nickname-input" placeholder="请输入昵称" bind:change="onInputChange" />
</view>
</block>
@ -24,4 +25,4 @@
<text class="user-motto">{{motto}}</text>
</view>
</view>
</scroll-view>
</scroll-view>

View File

@ -3,7 +3,8 @@ const util = require('../../utils/util.js')
Page({
data: {
logs: []
logs: [],
conf: []
},
onLoad() {
this.setData({
@ -12,7 +13,21 @@ Page({
date: util.formatTime(new Date(log)),
timeStamp: log
}
})
}),
conf: wx.getStorageSync('conf') || {}
})
},
clearStorageSync() {
wx.clearStorageSync();
wx.showToast({
title: '缓存已清除',
icon: 'success',
duration: 2000
});
// 清除缓存后,可以重新加载数据或重置页面状态
this.setData({
logs: [],
conf: {}
});
}
})

View File

@ -1,6 +1,10 @@
<!--logs.wxml-->
<scroll-view class="scrollarea" scroll-y type="list">
<button bindtap="clearStorageSync">清除缓存</button>
<block wx:for="{{logs}}" wx:key="timeStamp" wx:for-item="log">
<view class="log-item">{{index + 1}}. {{log.date}}</view>
<view class="log-item">{{index + 1}}. {{conf.username}}</view>
<view class="log-item">{{index + 1}}. {{conf.db}}</view>
<view class="log-item">{{index + 1}}. {{conf.odooUrl}}</view>
</block>
</scroll-view>

View File

@ -0,0 +1,201 @@
const app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
partner: {},
formData: {
name: '',
date_order: '',
orde_ddje: '',
partner_id: '',
fineCode_Text:''
},
showDatePicker: false,
currentDate: new Date().getTime(),
showPartnerPicker: false,
partnerColumns: [], // 初始化为空数组
showProductPicker: false,
productColumns: [], // 初始化为空数组
selectedProducts: [],
fineCode_Text: []
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
// 从全局应用实例中获取选中的 partner 数据
const selectedPartner = app.globalData.selectedPartner;
if (selectedPartner) {
this.setData({
partner: selectedPartner,
formData: {
name: selectedPartner.name,
date_order: selectedPartner.date_order,
orde_ddje: selectedPartner.orde_ddje,
partner_id: selectedPartner.partner_name,
},
orderLines: selectedPartner.orderLines || [] // 确保 fineCode_Text 被正确设置
});
console.log('Selected Partner:', selectedPartner);
} else {
console.error('Selected partner not found in global data');
// 处理数据未找到的情况,例如返回上一页
wx.navigateBack();
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
// 清理全局数据
app.globalData.selectedPartner = null;
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
},
/**
* 显示日期选择器
*/
showDatePicker() {
this.setData({
showDatePicker: true
});
},
/**
* 选择日期
*/
onDateConfirm(event) {
const date = new Date(event.detail);
const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
this.setData({
formData: {
...this.data.formData,
date_order: formattedDate
},
showDatePicker: false
});
},
/**
* 取消日期选择器
*/
onDateCancel() {
this.setData({
showDatePicker: false
});
},
/**
* 显示合作伙伴选择器
*/
showPartnerPicker() {
this.setData({
showPartnerPicker: true
});
},
/**
* 选择合作伙伴
*/
onPartnerConfirm(event) {
const selectedPartnerName = this.data.partnerColumns[event.detail.index];
const selectedPartnerInfo = this.data.partner.partnerInfo.find(info => info[1] === selectedPartnerName);
this.setData({
formData: {
...this.data.formData,
partner_id: selectedPartnerInfo[0]
},
showPartnerPicker: false
});
},
/**
* 取消合作伙伴选择器
*/
onPartnerCancel() {
this.setData({
showPartnerPicker: false
});
},
/**
* 表单提交
*/
onSubmit(event) {
console.log('Form submitted:', this.data.formData);
// 在这里可以添加表单提交的逻辑
},
/**
* 处理订单名称输入
*/
onNameInput(event) {
this.setData({
formData: {
...this.data.formData,
name: event.detail
}
});
},
/**
* 处理订单金额输入
*/
onOrdeDdjeInput(event) {
this.setData({
formData: {
...this.data.formData,
orde_ddje: event.detail
}
});
}
});

View File

@ -0,0 +1,6 @@
{
"usingComponents": {
"van-image": "@vant/weapp/image/index",
"van-datetime-picker": "@vant/weapp/datetime-picker/index"
}
}

View File

@ -0,0 +1,74 @@
<van-form bind:submit="onSubmit">
<van-image
width="20rem"
height="20rem"
fit="contain"
src="https://img.yzcdn.cn/vant/cat.jpeg"
/>
<van-field
value="{{formData.name}}"
label="订单名称"
placeholder="请输入订单名称"
required
bind:input="onNameInput"
/>
<van-field
value="{{formData.date_order}}"
label="日期"
placeholder="请选择日期"
is-link
readonly
name="datePicker"
bind:click="showDatePicker"
/>
<van-popup show="{{showDatePicker}}" position="bottom">
<van-datetime-picker
type="datetime"
value="{{currentDate}}"
bind:confirm="onDateConfirm"
bind:cancel="onDateCancel"
/>
</van-popup>
<van-field
value="{{formData.orde_ddje}}"
label="订单金额"
placeholder="请输入订单金额"
type="number"
required
bind:input="onOrdeDdjeInput"
/>
<!-- 渲染 fineCode_Text 的 <van-tag> 标签 -->
<van-tag
plain
type="success"
wx:for="{{orderLines}}"
wx:key="index"
>
{{item.fineCode_Text}}
</van-tag>
<van-field
value="{{formData.partner_id}}"
label="合作伙伴"
placeholder="请选择合作伙伴"
is-link
readonly
name="partnerPicker"
bind:click="showPartnerPicker"
/>
<van-popup show="{{showPartnerPicker}}" position="bottom">
<van-picker
show-toolbar
columns="{{partnerColumns}}"
bind:confirm="onPartnerConfirm"
bind:cancel="onPartnerCancel"
/>
</van-popup>
<van-button round block type="info" native-type="submit">
提交
</van-button>
</van-form>

View File

@ -0,0 +1 @@
/* pages/sale_order/form/sale_order_form.wxss */

View File

@ -1,4 +1,3 @@
// pages/deal/saleOrder/kanban/saleOrderKanban.js
// pages/sale_order/sale_order.js
const convert = require('xml-js');
const app = getApp();
@ -8,11 +7,11 @@ Page({
* 页面的初始数据
*/
data: {
httpsUrl: '',
odooUrl: '',
db: '',
username: '',
password: '',
kanban_datas: [],
partners: [],
userId: null, // 用于存储用户ID
currentPage: 1, // 当前页码
pageSize: 20, // 每页记录数
@ -26,20 +25,20 @@ Page({
onLoad(options) {
// Odoo 服务器配置
const {
httpsUrl,
odooUrl,
db,
username,
password
} = app.globalData;
this.setData({
httpsUrl: httpsUrl,
odooUrl: odooUrl,
db: db,
username: username,
password: password
});
// 登录到 Odoo
const loginUrl = `${this.data.httpsUrl}/xmlrpc/2/common`;
const loginUrl = `${this.data.odooUrl}/xmlrpc/2/common`;
const loginParams = [
`<value><string>${this.data.db}</string></value>`,
`<value><string>${this.data.username}</string></value>`,
@ -91,7 +90,7 @@ Page({
this.setData({ isLoading: true });
const objectUrl = `${this.data.httpsUrl}/xmlrpc/2/object`;
const objectUrl = `${this.data.odooUrl}/xmlrpc/2/object`;
const objectParams = [
`<value><string>${this.data.db}</string></value>`,
`<value><int>${this.data.userId}</int></value>`,
@ -107,7 +106,7 @@ Page({
<value><string>name</string></value>
<value><string>orde_ddje</string></value>
<value><string>date_order</string></value>
<value><string>partner_id</string></value>
<value><string>partner_id</string></value> <!-- partner_id -->
<value><string>order_line</string></value>
</data>
</array></value>
@ -144,7 +143,7 @@ Page({
return;
}
const kanban_datas = data.map(item => {
const partners = data.map(item => {
const id = item.struct.member.find(member => member.name._text === 'id')?.value.int?._text || '';
const name = item.struct.member.find(member => member.name._text === 'name')?.value.string?._text || '';
const date_order = item.struct.member.find(member => member.name._text === 'date_order')?.value.string?._text || '';
@ -174,7 +173,7 @@ Page({
});
// 获取每个订单的 order_line 详细信息
const fetchOrderLinePromises = kanban_datas.map(partner => {
const fetchOrderLinePromises = partners.map(partner => {
const order_lineInfoArray = Array.isArray(partner.order_lineInfo) ? partner.order_lineInfo : [partner.order_lineInfo];
const orderLineIds = order_lineInfoArray.map(orderLine => orderLine.int?._text);
return new Promise((resolve, reject) => {
@ -195,7 +194,7 @@ Page({
.then(updatedPartners => {
console.log('Data fetched successfully:', updatedPartners);
this.setData({
kanban_datas: updatedPartners,
partners: updatedPartners,
isLoading: false
});
})
@ -213,7 +212,7 @@ Page({
* 获取总记录数
*/
getTotalRecords() {
const objectUrl = `${this.data.httpsUrl}/xmlrpc/2/object`;
const objectUrl = `${this.data.odooUrl}/xmlrpc/2/object`;
const objectParams = [
`<value><string>${this.data.db}</string></value>`,
`<value><int>${this.data.userId}</int></value>`,
@ -256,19 +255,21 @@ Page({
*/
loadMore() {
if (this.data.isLoading || (this.data.currentPage * this.data.pageSize) >= this.data.totalRecords) return;
this.setData({ currentPage: this.data.currentPage + 1 });
this.fetchData();
},
/**
* 加载上一页数据
*/
loadPrevious() {
if (this.data.isLoading || this.data.currentPage <= 1) return;
this.setData({ currentPage: this.data.currentPage - 1 });
this.fetchData();
},
/**
* 创建一个函数来进行 XML-RPC 请求
*/
@ -314,7 +315,7 @@ Page({
* 获取 order_line 的详细信息
*/
fetchOrderLineDetails(orderLineIds, callback) {
const objectUrl = `${this.data.httpsUrl}/xmlrpc/2/object`;
const objectUrl = `${this.data.odooUrl}/xmlrpc/2/object`;
const objectParams2 = [
`<value><string>${this.data.db}</string></value>`,
`<value><int>${this.data.userId}</int></value>`,
@ -431,7 +432,7 @@ Page({
* 处理卡片点击事件
*/
onCardClick(event) {
const partner = this.data.kanban_datas[event.currentTarget.dataset.index];
const partner = this.data.partners[event.currentTarget.dataset.index];
if (!partner) {
return;
}
@ -448,7 +449,7 @@ Page({
});
const index = event.currentTarget.dataset.index;
wx.navigateTo({
url: `/pages/deal/saleOrder/kanban/from/saleOrderFrom?index=${index}`,
url: `/pages/sale_order/form/sale_order_form?index=${index}`,
});
},
@ -456,7 +457,7 @@ Page({
* 处理图片点击事件
*/
onThumbClick(event) {
const partner = this.data.kanban_datas[event.currentTarget.dataset.index];
const partner = this.data.partners[event.currentTarget.dataset.index];
if (!partner) {
return;
}
@ -515,7 +516,7 @@ Page({
* 用户点击右上角分享
*/
onShareAppMessage() {
const partner = this.data.kanban_datas[0]; // 假设分享第一个订单
const partner = this.data.partners[0]; // 假设分享第一个订单
if (!partner) {
return {};
}

View File

@ -0,0 +1,28 @@
<!-- pages/sale_order/sale_order.wxml -->
<van-card
wx:for="{{partners}}"
wx:key="id"
data-index="{{index}}"
num="{{item.date_order || '日期'}}"
tag="{{index + 1}}"
price="{{item.orde_ddje || '0.00'}}"
desc="{{item.partner_name|| '描述信息'}}"
bind:tap="onCardClick"
bind:click-thumb="onThumbClick"
title="{{item.name || '商品标题'}}"
thumb="https://fastly.jsdelivr.net/npm/@vant/assets/ipad.jpeg"
>
<!-- desc="{{item.products.map(product => product.name).join(', ') || '描述信息'}}" -->
<view slot="tags">
<van-tag
plain
type="success"
wx:for="{{item.orderLines}}"
wx:key="item"
>
{{item.name}}
{{item.fineCode_Text}}
</van-tag>
</view>
</van-card>

View File

@ -0,0 +1 @@
/* pages/sale_order/sale_order.wxss */

View File

@ -1,10 +1,6 @@
{
"compileType": "miniprogram",
"libVersion": "trial",
"packOptions": {
"ignore": [],
"include": []
},
"setting": {
"coverView": true,
"es6": true,
@ -12,17 +8,28 @@
"minified": true,
"enhance": true,
"showShadowRootInWxmlPanel": true,
"packNpmRelationList": [],
"packNpmManually": true,
"packNpmRelationList": [
{
"packageJsonPath": "./package.json",
"miniprogramNpmDistDir": "./miniprogram_npm/"
}
],
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
}
},
"ignoreUploadUnusedFiles": true
},
"condition": {},
"editorSetting": {
"tabIndent": "auto",
"tabSize": 2
},
"packOptions": {
"ignore": [],
"include": []
},
"appid": "wx463c21c58bdf2d7f"
}