Commit 0d349395 by xiaoqing.gu

fastpay功能:1、会员支付界面添加扫一扫功能 2、对接华润通会员验证和单张券查询接口

parent 86b307be
......@@ -13,7 +13,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
DEFINES += FM_DEBUG
DEFINES += FM_DEBUG FASTPAY
SOURCES += \
fmp_vip.cpp \
......
......@@ -21,7 +21,7 @@ int FMPVipPrivate::Init()
Q_Q(FMPVip);
FMPHomeInterface *home = q->GetService<FMPHomeInterface>(q->_ctx);
if(q->_inited) {
home->notification(QString::fromLocal8Bit("[非码会员]已在运行!"));
// home->notification(QString::fromLocal8Bit("[非码会员]已在运行!"));
} else {
_settings = q->GetService<FMPSettingsInterface>(q->_ctx);
FMPVipSettings::instance()->init(_settings);
......@@ -37,6 +37,8 @@ int FMPVipPrivate::Init()
FMP_INFO() << "Vip start";
}
fastPay();
return FMP_SUCCESS;
}
......@@ -48,3 +50,10 @@ int FMPVipPrivate::Uninit()
q->_inited = false;
return FMP_SUCCESS;
}
void FMPVipPrivate::fastPay()
{
QByteArray rspData;
FMPVipServer::instance()->callVipPay("{\"fm_cmd\":1003}",rspData);
}
......@@ -20,6 +20,8 @@ public:
FMPVip *q_ptr;
private:
FMPSettingsInterface *_settings;
void fastPay();
};
#endif // FMP_VIP_P_H
......@@ -123,3 +123,9 @@ void FMPVipServer::onReadyRead()
socket->close();
}
}
void FMPVipServer::callVipPay(const QByteArray &reqData, QByteArray &rspData)
{
dispatcher->doTask(reqData,rspData);
}
......@@ -26,6 +26,8 @@ public:
void SetPluginContext(ctkPluginContext *ctx);
void callVipPay(const QByteArray &reqData, QByteArray &rspData);
signals:
void SocketDisconnected();
......
......@@ -22,6 +22,19 @@
#define PARTNER_ID "c3e82ff2-6285-4823-8e3f-7ec880ae7119"
//! 华润通
#define H_PARTNER_ID "Z1017000"
#define API_VERSION "2.0.0"
#define APP_SUB_ID "Z101700101RU"
#define FORMAT "json"
#define GETCOUPONDETAIL_API_ID "crt.cp.public.getCouponDetail"
#define APP_TOKEN "1f8f8fbd063f4fe4980d747b03eff5a8"
#define APP_PUB_ID "T000000803LL"
#define SIGN_METHOD "rsa"
#define SIGN "m6V7kNYkUcSREMLtm61aZgP69Ym85K/Jid9e0n2M0a2H4PKLFamk1wkRBjr8M+Y8czn9h3LQv3yZeJJBpaH9aeY5sNkCeI5IZ1lmNVMnb+7LsfQRA3S4soq0kbPcGaSsXnx9kQ854xDUSTDupLMHegAQl54RSrU9hcMMz7GhLc5P1JylADfjZS6WCdjJZU5Jc5y3YYdDdVjOypiNfcPtsq4ob4lAjnEHvIngROBNU1Yh4u5/v/Pw9OFfYTjG347tyG77a7RJEiziT8Eyt3S9YSob4Rdq5ufSm/VQPp/2ZPgPOLf4NMgodTLicT47aCg5Cl+/AB1OZ2NoSTNIB2mrtA=="
#define SYS_ID "Z1017001"
// 请求类型的枚举值
enum FM_TYPE {
FM_Set_Store_Info = 1000,
......@@ -153,6 +166,26 @@ struct PP{
MandatoryField = "MandatoryField";
OptionalField = "OptionalField";
#ifdef FASTPAY
MerchantCode = "merchantCode";
RequestData = "REQUEST_DATA";
HrtAttrs = "HRT_ATTRS";
_PartnerId = "Partner_ID";
ApiVersion = "Api_Version";
AppSubID = "App_Sub_ID";
Format = "Format";
TimeStamp = "Time_Stamp";
ApiID = "Api_ID";
AppToken = "App_Token";
AppPubID = "App_Pub_ID";
SignMethod = "Sign_Method";
_Sign = "Sign";
SysID = "Sys_ID";
TransactionUnid = "transactionUuid";
MemberVerifyCode = "memberVerifyCode";
#endif
}
QString AppId ;
......@@ -241,6 +274,27 @@ struct PP{
QString MandatoryField;
QString OptionalField;
#ifdef FASTPAY
QString MerchantCode;
QString RequestData;
QString HrtAttrs;
QString _PartnerId;
QString ApiVersion;
QString AppSubID;
QString Format;
QString TimeStamp;
QString ApiID;
QString AppToken;
QString AppPubID;
QString SignMethod;
QString _Sign;
QString SysID;
QString TransactionUnid;
QString MemberVerifyCode;
#endif
};
const static PP PosProps;
......@@ -252,6 +306,10 @@ const static PP PosProps;
typedef std::map<QString, QString> PropsMap;
const PropsMap::value_type PropsMapPairs[] =
{
#ifdef FASTPAY
PropsMap::value_type(PosProps.Coupon_code, "couponId"),
PropsMap::value_type(PosProps.Fm_open_id, "openid"),
#else
PropsMap::value_type(PosProps.StatusCode, "statusCode"),
PropsMap::value_type(PosProps.Fm_cmd, "reqType"),
PropsMap::value_type(PosProps.Member_sign, "code"),
......@@ -280,6 +338,7 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.Price, "price"),
PropsMap::value_type(PosProps.ChargeAmount, "payAmount"),
PropsMap::value_type(PosProps.PartnerId, "partnerId"),
#endif
};
static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0])));
......
......@@ -12,6 +12,11 @@ class Coupon
public:
explicit Coupon(QString name="", QString code="", QString type="", double disAmount=0, double limitAmount=0, QString limitTime="", bool isCompatible=true);
bool operator ==(const Coupon &rhs)
{
return (this->code().compare(rhs.code())==0);
}
void paint(QPainter *painter, const QRect &rect,
const QPalette &palette) const;
QSize sizeHint() const;
......
......@@ -44,7 +44,11 @@ QByteArray FMTask::doTask()
#endif
RunFunction(packagePOSReq);
#ifdef FASTPAY
#else
RunFunction(copyPros);
#endif
RunFunction(setWindow);
RunFunction(showWindow);
RunFunction(packagePOSRsp);
......@@ -104,7 +108,31 @@ void FMTask::showWindow()
bool FMTask::sendToServer(bool isShowMsg)
{
FMP_DEBUG() << __FUNCTION__;
url = FMPVipSettings::instance()->getServerUrl();
// 固定部分
#ifdef FASTPAY
QJsonObject hrtAttrs;
hrtAttrs[ServerProps(PosProps._PartnerId)] = H_PARTNER_ID;
hrtAttrs[ServerProps(PosProps.ApiVersion)] = API_VERSION;
hrtAttrs[ServerProps(PosProps.AppSubID)] = APP_SUB_ID;
hrtAttrs[ServerProps(PosProps.Format)] = FORMAT;
hrtAttrs[ServerProps(PosProps.TimeStamp)] = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
hrtAttrs[ServerProps(PosProps.AppToken)] = APP_TOKEN;
hrtAttrs[ServerProps(PosProps.SignMethod)] = SIGN_METHOD;
hrtAttrs[ServerProps(PosProps._Sign)] = SIGN;
hrtAttrs[ServerProps(PosProps.SysID)] = SYS_ID;
QJsonObject request;
request[ServerProps(PosProps.HrtAttrs)] = hrtAttrs;
serverReqJsonObj["REQUEST"] = request;
packageServerReq();
qDebug() << serverReqJsonObj;
#else
serverReqJsonObj[PosProps.AppId] = APP_ID;
serverReqJsonObj[ServerProps(PosProps.PartnerId)] = PARTNER_ID;
serverReqJsonObj[PosProps.T] = QString::number(QDateTime::currentMSecsSinceEpoch());
......@@ -114,10 +142,12 @@ bool FMTask::sendToServer(bool isShowMsg)
packageServerReq();
serverReqJsonObj[PosProps.Sign] = sign();
url = url + "/" + ReqUrl.at(FM_Type());
#endif
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = FMPVipSettings::instance()->getServerUrl() + "/" + ReqUrl.at(FM_Type());
QByteArray rspData;
FMNetwork net;
......
......@@ -16,7 +16,10 @@ QByteArray FMTaskNoWnd::doTask()
}
#endif
RunFunction(packagePOSReq);
#ifdef FASTPAY
#else
RunFunction(copyPros);
#endif
bool isOk = sendToServer();
if(!isOk) {
FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString());
......
......@@ -17,7 +17,13 @@
//FMTask* TaskFactory::Task(QByteArray data)
//{
// QJsonParseError error;
// QJsonParseError error;askRefundOrder(jsonObj);
// break;
// }
// case FM_Order_Revoke: {
// task = new TaskRefundPay(jsonObj);
// break;
// }
// QJsonDocument doc = QJsonDocument::fromJson(data, &error);
// QJsonObject jsonObj = doc.object();
......@@ -46,13 +52,7 @@
// break;
// }
// case FM_Order_Refund: {
// task = new TaskRefundOrder(jsonObj);
// break;
// }
// case FM_Order_Revoke: {
// task = new TaskRefundPay(jsonObj);
// break;
// }
// task = new T
// case FM_Charge_Refund: {
// task = new TaskRefundOrder(jsonObj);
// break;
......
......@@ -28,13 +28,36 @@ void TaskLogin::setWindow()
void TaskLogin::packageServerReq()
{
#ifdef FASTPAY
QJsonObject requestData;
requestData[ServerProps(PosProps.TransactionUnid)] = session()->data(PosProps.TransactionUnid).toString();
requestData[ServerProps(PosProps.MemberVerifyCode)] = session()->data(PosProps.Member_sign).toString();
requestData[ServerProps(PosProps.MerchantCode)] = getPosJsonValue(PosProps.MerchantCode);
QJsonObject request = serverReqJsonObj["REQUEST"].toObject();
request[ServerProps(PosProps.RequestData)] = requestData;
QJsonObject hrtObj = request[ServerProps(PosProps.HrtAttrs)].toObject();
hrtObj[ServerProps(PosProps.ApiID)] = "crt.mb.public.VerifyMemberInfoForOut";
hrtObj[ServerProps(PosProps.AppPubID)] = "T000000305EH";
serverReqJsonObj["REQUEST"] = request;
#else
QJsonObject code;
code[ServerProps(PosProps.Member_sign)] = session()->data(PosProps.Member_sign).toString();
serverReqJsonObj["data"] = code;
#endif
}
void TaskLogin::packagePOSRsp()
{
/*会员验证完服务器返回的信息收集*/
#ifdef FASTPAY
QJsonValue rspJson = getServerJsonValue("RETURN_CODE");
QJsonValue rsp = getServerJsonValue("RETURN_DATA");
QJsonObject rspData = rsp.toObject();
QString code = rspData["openid"].toString();
double points = rspData["points"].toDouble();
#else
std::vector<QString> p;
p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
......@@ -49,6 +72,7 @@ void TaskLogin::packagePOSRsp()
foreach (QString prop , p) {
posRspJsonObj[prop] = getServerJsonValue(prop);
}
#endif
}
void TaskLogin::onLogin()
......
......@@ -8,6 +8,22 @@ TaskCoupon::TaskCoupon(QJsonObject &jsonObj, Session *session, QObject *parent)
void TaskCoupon::packageServerReq()
{
#ifdef FASTPAY
QJsonObject requestData;
requestData[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString();
requestData[ServerProps(PosProps.Coupon_code)] = getPosJsonValue(PosProps.Coupon_code);
requestData[ServerProps(PosProps.MerchantCode)] = getPosJsonValue(PosProps.MerchantCode);
QJsonObject request = serverReqJsonObj["REQUEST"].toObject();
request[ServerProps(PosProps.RequestData)] = requestData;
QJsonObject hrtObj = request[ServerProps(PosProps.HrtAttrs)].toObject();
hrtObj[ServerProps(PosProps.ApiID)] = "crt.cp.public.syncCoupon";
hrtObj[ServerProps(PosProps.AppPubID)] = APP_PUB_ID;
request[ServerProps(PosProps.HrtAttrs)] = hrtObj;
serverReqJsonObj["REQUEST"] = request;
#else
QJsonObject data;
data[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString();
// data[ServerProps(PosProps.Fm_open_id)] = "6524402960";
......@@ -25,10 +41,42 @@ void TaskCoupon::packageServerReq()
}
data[ServerProps(PosProps.Products)] = propducts;
serverReqJsonObj["data"] = data;
#endif
}
void TaskCoupon::packagePOSRsp()
{
/*单张券查询服务器返回的信息*/
#ifdef FASTPAY
QJsonValue rspJson = getServerJsonValue("RETURN_CODE");
qDebug() << "*******************" << rspJson.toString();
QJsonValue rsp = getServerJsonValue("RETURN_DATA");
QJsonObject rspData = rsp.toObject();
QString code = rspData["couponId"].toString();
QString desc = rspData["couponName"].toString();
QString type = rspData["couponType"].toString();
QString amount = rspData["cpValue"].toString();
double _amount = amount.toDouble();
QString ableUsed = rspData["ableUsed"].toString();
QString beginDate = rspData["beginDate"].toString();
QString couponStatus = rspData["couponStatus"].toString();
QString endDate = rspData["endDate"].toString();
QString ownerShopName = rspData["ownerShopName"].toString();
QString useCondition = rspData["useCondition"].toString();
double _useCondition = useCondition.toDouble();
QString openid = rspData["openid"].toString();
code = getPosJsonValue(PosProps.Coupon_code).toString();
desc = code;
qDebug() << code;
Coupon c(desc,code,type,_amount,_useCondition,endDate);
QVariant v;
v.setValue(c);
QMap<QString, QVariant> couponMap;
couponMap[code] = v;
session()->addData(PosProps.CouponMap, couponMap);
#else
QMap<QString, QVariant> couponMap;
foreach (auto value, getServerJsonValue(PosProps.CouponList).toArray())
{
......@@ -45,6 +93,7 @@ void TaskCoupon::packagePOSRsp()
couponMap[code] = v;
}
session()->addData(PosProps.CouponMap, couponMap);
#endif
}
TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent)
......
......@@ -18,6 +18,7 @@ TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTask(jsonObj, FM_Pay, session, parent)
, _order(new Order(this))
{
}
TaskPay::~TaskPay()
......@@ -49,15 +50,15 @@ void TaskPay::packagePOSReq()
QString fm_open_id_pos = getPosJsonValue(PosProps.Fm_open_id).toString();
QString fm_open_id_session = session()->data(PosProps.Fm_open_id).toString();
if(fm_open_id_session == "" || fm_open_id_pos!=fm_open_id_session || session()->data(PosProps.CanPay).toBool() == false) {
preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Pay);
preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) {
this->setError(preTask->error(), preTask->errorString());
}
this->_session = preTask->session();
}
// if(fm_open_id_session == "" || fm_open_id_pos!=fm_open_id_session || session()->data(PosProps.CanPay).toBool() == false) {
// preTask = new TaskLogin(posReqJsonObj, _session, this);
// preTask->session()->addData(PosProps.FM_Type, FM_Pay);
// preTask->doTask();
// if(preTask->error() != FM_API_SUCCESS) {
// this->setError(preTask->error(), preTask->errorString());
// }
// this->_session = preTask->session();
// }
session()->addData(PosProps.OrderAmount, getPosJsonValue(PosProps.OrderAmount).toInt());
session()->addData(PosProps.TransAmount, getPosJsonValue(PosProps.TransAmount).toInt());
......@@ -81,11 +82,35 @@ void TaskPay::onGetCoupons(Session* session)
}
}
#ifdef FASTPAY
void TaskPay::onCouponReq(const QString &code)
{
posReqJsonObj[PosProps.Coupon_code] = code;
TaskCoupon couponTask(posReqJsonObj, this->session());
qDebug() << couponTask.doTask();
_session->addData(PosProps.CouponMap, this->session()->getCouponMap(PosProps.CouponMap));
if(_window != nullptr) {
qobject_cast<FMVipOrder*>(_window)->initCouponItems();
_window->setIsBusy(false);
_window->setEnabled(true);
}
// qDebug() << couponTask->getServerJsonValue("");
}
#endif
void TaskPay::setWindow()
{
_window = new FMVipOrder;
connect(qobject_cast<FMVipOrder*>(_window), SIGNAL(pay()), this, SLOT(onPay()));
#ifdef FASTPAY
connect(qobject_cast<FMVipOrder*>(_window),SIGNAL(couponReq(const QString &)),this,SLOT(onCouponReq(const QString &)));
#endif
}
void TaskPay::packageServerReq()
......@@ -135,6 +160,7 @@ void TaskPay::packageServerReq()
//代金券/商品券支付详情
QMap<QString, QVariant> coupons = session()->data("payCouponMap").toMap();
// 将代金券按金额从小到大排序
QList<Coupon> couponList;
for(QMap<QString, QVariant>::const_iterator it = coupons.constBegin(); it != coupons.constEnd(); it++)
......@@ -151,10 +177,13 @@ void TaskPay::packageServerReq()
int couponAmount = 0;
foreach(Coupon c, couponList)
{
QJsonObject coupon;
#ifdef FASTPAY
int couponDisAmount = c.disAmount() * 100;
#else
if(needCouponAmount <= 0) {
break;
}
QJsonObject coupon;
int couponDisAmount = c.disAmount() * 100;
if(couponDisAmount <= needCouponAmount) {
couponDisAmount = couponDisAmount;
......@@ -164,6 +193,7 @@ void TaskPay::packageServerReq()
needCouponAmount = 0;
}
couponAmount += couponDisAmount;
#endif
coupon["amount"] = couponDisAmount;
coupon["transId"] = getPosJsonValue(PosProps.TransId);
......
......@@ -26,6 +26,10 @@ private slots:
void onPay();
void onGetCoupons(Session* session);
#ifdef FASTPAY
void onCouponReq(const QString &code);
#endif // ifdef FASTPAY
private:
TaskCouponThread *couponThread;
FMItem::Order *_order;
......
......@@ -37,11 +37,17 @@ Coupon CouponModel::coupon(const QModelIndex &index)
return couponList.at(index.row());
}
void CouponModel::push_back(Coupon coupon)
QModelIndex CouponModel::push_back(Coupon coupon)
{
int rowNum = rowCount();
QModelIndex beginIndex = index(rowNum);
beginInsertRows(beginIndex, rowNum, rowNum);
couponList.append(coupon);
endInsertRows();
return this->index(rowNum);
}
bool CouponModel::contains(const Coupon &coupon)
{
return couponList.contains(coupon);
}
......@@ -16,7 +16,9 @@ public:
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override;
Coupon coupon(const QModelIndex &index);
void push_back(Coupon coupon);
QModelIndex push_back(Coupon coupon);
bool contains(const Coupon &coupon);
private:
QList<Coupon> couponList;
......
......@@ -6,6 +6,7 @@
#include "fmnumpad.h"
#include <QScrollBar>
#include <QItemSelectionModel>
#include <QLabel>
FMVipOrder::FMVipOrder(QDialog *parent) :
FMVipWnd(parent),
......@@ -21,6 +22,36 @@ FMVipOrder::FMVipOrder(QDialog *parent) :
connect(this, &FMVipOrder::accepted, [=](){
_numpad->close();
});
/*条件为1时,表示使用快速支付功能,将原界面price窗口中的控件全部关闭,
* 然后添加label和lineEdit控件,用于扫描优惠券*/
#ifdef FASTPAY
ui->price_desc_label->close();
ui->price_label->close();
ui->undis_desc_label->close();
ui->undis_label->close();
scanfLabel = new QLabel(ui->price);
scanfLabel->setText(QString::fromLocal8Bit("券码扫一扫:"));
scanfLabel->adjustSize();
scanfLabel->move(100,20);
scanfLabel->show();
scanfLe = new QLineEdit(ui->price);
scanfLe->setMinimumSize(350,30);
scanfLe->move(230,21);
scanfLe->show();
ui->pay_edit->setFocus();
connect(scanfLe,SIGNAL(returnPressed()),this,SLOT(on_scanfLe_returnPressed()));
#endif
}
FMVipOrder::~FMVipOrder()
......@@ -28,6 +59,11 @@ FMVipOrder::~FMVipOrder()
del_p(orderInfo);
delete ui;
delete _numpad;
#ifdef FASTPAY
delete scanfLabel;
delete scanfLe;
#endif
}
bool FMVipOrder::initWnd(Session *session)
......@@ -145,11 +181,18 @@ void FMVipOrder::initCouponItems()
foreach(Coupon coupon, orderInfo->couponMap().values())
{
couponModel->push_back(coupon);
if(!couponModel->contains(coupon)) {
QModelIndex inserIndex = couponModel->push_back(coupon);
qDebug() << inserIndex;
#ifdef FASTPAY
selectionModel->select(inserIndex, QItemSelectionModel::Select);
qDebug() << selectionModel->currentIndex() << selectionModel->selectedRows();
#endif
}
}
ui->pay_edit->setFocus();
ui->pay_edit->selectAll();
// ui->pay_edit->setFocus();
// ui->pay_edit->selectAll();
}
void FMVipOrder::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
......@@ -191,6 +234,8 @@ void FMVipOrder::on_coupon_next_btn_clicked()
void FMVipOrder::on_pay_edit_textChanged(const QString &text)
{
#ifdef FASTPAY
#else
double num = text.toDouble();
double maxPay = orderInfo->getMaxWillPay();
......@@ -206,6 +251,7 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text)
ui->pay_max->setText("");
ui->pay_edit->setText(text);
}
#endif
}
void FMVipOrder::on_score_edit_textChanged(const QString &scoreStr)
......@@ -237,3 +283,12 @@ void FMVipOrder::on_pay_key_clicked()
_numpad->exec();
}
}
#ifdef FASTPAY
void FMVipOrder::on_scanfLe_returnPressed()
{
emit couponReq(scanfLe->text());
scanfLe->clear();
}
#endif
......@@ -2,6 +2,7 @@
#define FMVIPORDER_H
#include <QListWidgetItem>
#include <QModelIndex>
#include <QLabel>
#include "fmvipwnd.h"
#include "global.h"
......@@ -32,6 +33,10 @@ public:
signals:
void pay();
#ifdef FASTPAY
void couponReq(const QString &code);
#endif
public slots:
void on_pay_btn_clicked();
......@@ -49,6 +54,12 @@ private slots:
void on_pay_key_clicked();
#ifdef FASTPAY
void on_scanfLe_returnPressed();
#endif
private:
class OrderInfo
{
......@@ -193,9 +204,18 @@ private:
QItemSelectionModel *selectionModel;
CouponModel *couponModel;
QModelIndex selectedIndex;
FMNumPad *_numpad;
QLineEdit *le;
QWidget * w;
#ifdef FASTPAY
QLabel *scanfLabel;
QLineEdit *scanfLe;
QJsonObject *_json;
#endif
};
#endif // FMVIPORDER_H
......@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>786</width>
<height>624</height>
<height>626</height>
</rect>
</property>
<property name="maximumSize">
......@@ -748,7 +748,7 @@
<item>
<widget class="QLabel" name="pay_max">
<property name="text">
<string>余额最多支付 0.00 元</string>
<string/>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
......@@ -920,6 +920,9 @@ font: 13px &quot;微软雅黑&quot;;
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>支 付</string>
</property>
......@@ -1073,6 +1076,17 @@ font: 13px &quot;微软雅黑&quot;;
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>pay_edit</tabstop>
<tabstop>pay_btn</tabstop>
<tabstop>coupon_page</tabstop>
<tabstop>coupon_prev_btn</tabstop>
<tabstop>coupon_next_btn</tabstop>
<tabstop>close_btn</tabstop>
<tabstop>pay_key</tabstop>
<tabstop>score_edit</tabstop>
<tabstop>score_key</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 36
#define VER_BUILD 37
//! Convert version numbers to string
#define _STR(S) #S
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment