Compare commits
4 Commits
cdfb3f0132
...
fc00c0e32c
| Author | SHA1 | Date |
|---|---|---|
|
|
fc00c0e32c | 2 years ago |
|
|
5683ad96ef | 2 years ago |
|
|
71dce1916a | 2 years ago |
|
|
ed27e7a164 | 2 years ago |
6944 changed files with 592706 additions and 7767 deletions
@ -1,2 +1,3 @@ |
|||
/log/ |
|||
/target/ |
|||
.idea/ |
|||
@ -0,0 +1,2 @@ |
|||
|
|||
面板网站 https://zuramai.github.io/mazer/demo/account-profile.html |
|||
@ -0,0 +1,120 @@ |
|||
/** |
|||
* 请勿将俱乐部专享资源复制给任何人,保护知识产权即是保护我们所在的行业,进而保护我们自己的利益 |
|||
* 即便是公司的同事,也请尊重 JFinal 作者的努力与付出,不要复制给同事 |
|||
* |
|||
* 如果你尚未加入俱乐部,请立即删除该项目,或者现在加入俱乐部:http://jfinal.com/club
|
|||
* |
|||
* 俱乐部将提供 jfinal-club 项目源码、直播视频、专用 QQ 群,以及作者在俱乐部定期的分享与答疑, |
|||
* 价值远比仅仅拥有 jfinal club 项目源代码要大得多,俱乐部福利资源是不断增加的,以下是俱乐部 |
|||
* 新福利计划: |
|||
* https://jfinal.com/club/1-2
|
|||
* |
|||
* JFinal 俱乐部是七年以来首次寻求外部资源的尝试,以便于创建更加高品质的产品与服务,为你带来 |
|||
* 更多、更大的价值 |
|||
* |
|||
* JFinal 项目的可持续性发展需要你的支持!!! |
|||
*/ |
|||
|
|||
package com.bt._admin.prpduct; |
|||
|
|||
import com.bt.common.controller.BaseController; |
|||
import com.bt.common.model.Product; |
|||
import com.bt.common.model.Project; |
|||
import com.bt.index.IndexService; |
|||
import com.bt.my.project.MyProjectValidator; |
|||
import com.bt.project.ProjectService; |
|||
import com.jfinal.aop.Before; |
|||
import com.jfinal.aop.Inject; |
|||
import com.jfinal.core.Path; |
|||
import com.jfinal.kit.Ret; |
|||
import com.jfinal.plugin.activerecord.Page; |
|||
|
|||
/** |
|||
* 产品管理控制器 |
|||
*/ |
|||
@Path(value = "/admin/product", viewPath = "/product") |
|||
public class ProductAdminController extends BaseController { |
|||
|
|||
@Inject |
|||
ProductAdminService srv; |
|||
|
|||
@Inject |
|||
ProjectService projectSrv; |
|||
|
|||
@Inject |
|||
IndexService indexSrv; |
|||
|
|||
public void index() { |
|||
Page<Product> productPage = srv.paginate(getParaToInt("p", 1)); |
|||
setAttr("productPage", productPage); |
|||
render("index.html"); |
|||
} |
|||
|
|||
/** |
|||
* 创建 |
|||
*/ |
|||
public void add() { |
|||
render("add_edit.html"); |
|||
} |
|||
|
|||
/** |
|||
* 提交创建 |
|||
*/ |
|||
@Before(MyProjectValidator.class) |
|||
public void save() { |
|||
Product product = getBean(Product.class); |
|||
Ret ret = srv.save(getLoginAccountId(), product); |
|||
renderJson(ret); |
|||
} |
|||
|
|||
/** |
|||
* 修改 |
|||
*/ |
|||
public void edit() { |
|||
keepPara("p"); // 保持住分页的页号,便于在 ajax 提交后跳转到当前数据所在的页
|
|||
setAttr("product", srv.edit(getParaToInt("id"))); |
|||
render("add_edit.html"); |
|||
} |
|||
|
|||
/** |
|||
* 提交修改 |
|||
*/ |
|||
//@Before(MyProjectValidator.class)
|
|||
public void update() { |
|||
Product product = getBean(Product.class); |
|||
Ret ret = srv.update(product); |
|||
renderJson(ret); |
|||
} |
|||
|
|||
/** |
|||
* 锁定 |
|||
*/ |
|||
public void lock() { |
|||
Ret ret = srv.lock(getParaToInt("id")); |
|||
|
|||
projectSrv.clearHotProjectCache(); |
|||
indexSrv.clearCache(); |
|||
renderJson(ret); |
|||
} |
|||
|
|||
/** |
|||
* 解除锁定 |
|||
*/ |
|||
public void unlock() { |
|||
Ret ret = srv.unlock(getParaToInt("id")); |
|||
|
|||
projectSrv.clearHotProjectCache(); |
|||
indexSrv.clearCache(); |
|||
renderJson(ret); |
|||
} |
|||
|
|||
/** |
|||
* 删除 project |
|||
*/ |
|||
public void delete() { |
|||
Ret ret = srv.delete(getParaToInt("id")); |
|||
renderJson(ret); |
|||
} |
|||
} |
|||
|
|||
|
|||
@ -0,0 +1,115 @@ |
|||
/** |
|||
* 请勿将俱乐部专享资源复制给任何人,保护知识产权即是保护我们所在的行业,进而保护我们自己的利益 |
|||
* 即便是公司的同事,也请尊重 JFinal 作者的努力与付出,不要复制给同事 |
|||
* |
|||
* 如果你尚未加入俱乐部,请立即删除该产品,或者现在加入俱乐部:http://jfinal.com/club
|
|||
* |
|||
* 俱乐部将提供 jfinal-club 产品源码、直播视频、专用 QQ 群,以及作者在俱乐部定期的分享与答疑, |
|||
* 价值远比仅仅拥有 jfinal club 产品源代码要大得多,俱乐部福利资源是不断增加的,以下是俱乐部 |
|||
* 新福利计划: |
|||
* https://jfinal.com/club/1-2
|
|||
* |
|||
* JFinal 俱乐部是七年以来首次寻求外部资源的尝试,以便于创建更加高品质的产品与服务,为你带来 |
|||
* 更多、更大的价值 |
|||
* |
|||
* JFinal 产品的可持续性发展需要你的支持!!! |
|||
*/ |
|||
|
|||
package com.bt._admin.prpduct; |
|||
|
|||
import java.time.LocalDateTime; |
|||
|
|||
import com.bt.common.model.Product; |
|||
import com.bt.common.model.Project; |
|||
import com.bt.my.project.MyProjectService; |
|||
import com.jfinal.aop.Inject; |
|||
import com.jfinal.kit.Ret; |
|||
import com.jfinal.plugin.activerecord.Db; |
|||
import com.jfinal.plugin.activerecord.Page; |
|||
|
|||
/** |
|||
* 产品管理业务 |
|||
*/ |
|||
public class ProductAdminService { |
|||
|
|||
@Inject |
|||
MyProjectService myProjectSrv; |
|||
|
|||
private Product dao = new Product().dao(); |
|||
|
|||
/** |
|||
* 产品分页 |
|||
*/ |
|||
public Page<Product> paginate(int pageNum) { |
|||
return dao.paginate(pageNum, 10, "select *", "from product order by id asc"); |
|||
} |
|||
|
|||
/** |
|||
* 判断产品名称是否存在 |
|||
* @param projectId 当前 project 对象的 id 号,如果 project 对象还未创建,提供一个小于 0 的值即可 |
|||
* @param name 产品名 |
|||
*/ |
|||
public boolean exists(int projectId, String name) { |
|||
name = name.toLowerCase().trim(); |
|||
String sql = "select id from product where lower(name) = ? and id != ? limit 1"; |
|||
Integer id = Db.queryInt(sql, name, projectId); |
|||
return id != null; |
|||
} |
|||
|
|||
/** |
|||
* 创建产品 |
|||
*/ |
|||
public Ret save(int accountId, Product product) { |
|||
if (exists(-1, product.getName())) { |
|||
return Ret.fail("msg", "产品名称已经存在,请输入别的名称"); |
|||
} |
|||
|
|||
product.setName(product.getName().trim()); |
|||
product.setCreateAt(LocalDateTime.now()); |
|||
product.save(); |
|||
return Ret.ok("msg", "创建成功"); |
|||
} |
|||
|
|||
public Product edit(int id) { |
|||
return dao.findById(id); |
|||
} |
|||
|
|||
public Ret update(Product product) { |
|||
if (exists(product.getId(), product.getName())) { |
|||
return Ret.fail("msg", "产品名称已经存在,请输入别的名称"); |
|||
} |
|||
|
|||
product.setName(product.getName().trim()); |
|||
product.update(); |
|||
return Ret.ok("msg", "修改成功"); |
|||
} |
|||
|
|||
/** |
|||
* 锁定 |
|||
*/ |
|||
public Ret lock(int id) { |
|||
Db.update("update project set report = report + ? where id=?", Project.REPORT_BLOCK_NUM, id); |
|||
return Ret.ok("msg", "锁定成功"); |
|||
} |
|||
|
|||
/** |
|||
* 解除锁定 |
|||
*/ |
|||
public Ret unlock(int id) { |
|||
Db.update("update project set report = 0 where id=?", id); |
|||
return Ret.ok("msg", "解除锁定成功"); |
|||
} |
|||
|
|||
/** |
|||
* 删除 project |
|||
*/ |
|||
public Ret delete(int productId) { |
|||
Integer accountId = Db.queryInt("select accountId from product where id=? limit 1", productId); |
|||
if (accountId != null) { |
|||
myProjectSrv.delete(accountId, productId); |
|||
return Ret.ok("msg", "project 删除成功"); |
|||
} else { |
|||
return Ret.fail("msg", "project 删除失败"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseAccountBalance; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class AccountBalance extends BaseAccountBalance<AccountBalance> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseAccountBalanceChange; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class AccountBalanceChange extends BaseAccountBalanceChange<AccountBalanceChange> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseDevice; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class Device extends BaseDevice<Device> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseOrder; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class Order extends BaseOrder<Order> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseOrderDetail; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class OrderDetail extends BaseOrderDetail<OrderDetail> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BasePayment; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class Payment extends BasePayment<Payment> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseProduct; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class Product extends BaseProduct<Product> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseProductPricing; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class ProductPricing extends BaseProductPricing<ProductPricing> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,16 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseRealnameVerification; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class RealnameVerification extends BaseRealnameVerification<RealnameVerification> { |
|||
public static final int STATUS_WAIT = 0; // 0待认证
|
|||
public static final int STATUS_SUCCESS = 1; // 1已认证
|
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseStoredValueCard; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class StoredValueCard extends BaseStoredValueCard<StoredValueCard> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.bt.common.model; |
|||
|
|||
import com.bt.common.model.base.BaseUserDevice; |
|||
|
|||
/** |
|||
* Generated by JFinal. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public class UserDevice extends BaseUserDevice<UserDevice> { |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,63 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseAccountBalance<M extends BaseAccountBalance<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 账户id |
|||
*/ |
|||
public void setAccountId(java.lang.Integer accountId) { |
|||
set("accountId", accountId); |
|||
} |
|||
|
|||
/** |
|||
* 账户id |
|||
*/ |
|||
public java.lang.Integer getAccountId() { |
|||
return getInt("accountId"); |
|||
} |
|||
|
|||
/** |
|||
* 账户余额 |
|||
*/ |
|||
public void setAmount(java.math.BigDecimal amount) { |
|||
set("amount", amount); |
|||
} |
|||
|
|||
/** |
|||
* 账户余额 |
|||
*/ |
|||
public java.math.BigDecimal getAmount() { |
|||
return getBigDecimal("amount"); |
|||
} |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,115 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseAccountBalanceChange<M extends BaseAccountBalanceChange<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 账户id |
|||
*/ |
|||
public void setAccountId(java.lang.Integer accountId) { |
|||
set("accountId", accountId); |
|||
} |
|||
|
|||
/** |
|||
* 账户id |
|||
*/ |
|||
public java.lang.Integer getAccountId() { |
|||
return getInt("accountId"); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动的金额,可以是正数(表示增加)或负数(表示减少) |
|||
*/ |
|||
public void setAmount(java.math.BigDecimal amount) { |
|||
set("amount", amount); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动的金额,可以是正数(表示增加)或负数(表示减少) |
|||
*/ |
|||
public java.math.BigDecimal getAmount() { |
|||
return getBigDecimal("amount"); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动时间 |
|||
*/ |
|||
public void setChangeTime(java.time.LocalDateTime changeTime) { |
|||
set("changeTime", changeTime); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动时间 |
|||
*/ |
|||
public java.time.LocalDateTime getChangeTime() { |
|||
return getLocalDateTime("changeTime"); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动的类型 如充值、消费等 |
|||
*/ |
|||
public void setType(java.lang.Integer type) { |
|||
set("type", type); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动的类型 如充值、消费等 |
|||
*/ |
|||
public java.lang.Integer getType() { |
|||
return getInt("type"); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动的方式 如扫码支付、对公转账、管理员手动预存、储值卡充值等。 |
|||
*/ |
|||
public void setMethod(java.lang.String method) { |
|||
set("method", method); |
|||
} |
|||
|
|||
/** |
|||
* 余额变动的方式 如扫码支付、对公转账、管理员手动预存、储值卡充值等。 |
|||
*/ |
|||
public java.lang.String getMethod() { |
|||
return getStr("method"); |
|||
} |
|||
|
|||
/** |
|||
* 如果余额变动与订单有关,这个字段可以与订单表中的 order_id 关联。 |
|||
|
|||
*/ |
|||
public void setRelatedOrderId(java.lang.Integer relatedOrderId) { |
|||
set("relatedOrderId", relatedOrderId); |
|||
} |
|||
|
|||
/** |
|||
* 如果余额变动与订单有关,这个字段可以与订单表中的 order_id 关联。 |
|||
|
|||
*/ |
|||
public java.lang.Integer getRelatedOrderId() { |
|||
return getInt("relatedOrderId"); |
|||
} |
|||
|
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,45 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseDevice<M extends BaseDevice<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
public void setName(java.lang.String name) { |
|||
set("name", name); |
|||
} |
|||
|
|||
public java.lang.String getName() { |
|||
return getStr("name"); |
|||
} |
|||
|
|||
public void setContent(java.lang.String content) { |
|||
set("content", content); |
|||
} |
|||
|
|||
public java.lang.String getContent() { |
|||
return getStr("content"); |
|||
} |
|||
|
|||
public void setCreateAt(java.time.LocalDateTime createAt) { |
|||
set("createAt", createAt); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateAt() { |
|||
return getLocalDateTime("createAt"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,107 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseOrder<M extends BaseOrder<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 产品id |
|||
*/ |
|||
public void setProductId(java.lang.Integer productId) { |
|||
set("productId", productId); |
|||
} |
|||
|
|||
/** |
|||
* 产品id |
|||
*/ |
|||
public java.lang.Integer getProductId() { |
|||
return getInt("productId"); |
|||
} |
|||
|
|||
/** |
|||
* 产品定价id |
|||
*/ |
|||
public void setPricingId(java.lang.Integer pricingId) { |
|||
set("pricingId", pricingId); |
|||
} |
|||
|
|||
/** |
|||
* 产品定价id |
|||
*/ |
|||
public java.lang.Integer getPricingId() { |
|||
return getInt("pricingId"); |
|||
} |
|||
|
|||
/** |
|||
* 订单状态 0待支付,1已支付,2已取消,3已退款 |
|||
*/ |
|||
public void setStatus(java.lang.Integer status) { |
|||
set("status", status); |
|||
} |
|||
|
|||
/** |
|||
* 订单状态 0待支付,1已支付,2已取消,3已退款 |
|||
*/ |
|||
public java.lang.Integer getStatus() { |
|||
return getInt("status"); |
|||
} |
|||
|
|||
/** |
|||
* 设备交付状态0未分配1已分配 |
|||
*/ |
|||
public void setDeviceAssignment(java.lang.Integer deviceAssignment) { |
|||
set("deviceAssignment", deviceAssignment); |
|||
} |
|||
|
|||
/** |
|||
* 设备交付状态0未分配1已分配 |
|||
*/ |
|||
public java.lang.Integer getDeviceAssignment() { |
|||
return getInt("deviceAssignment"); |
|||
} |
|||
|
|||
/** |
|||
* 设备id |
|||
*/ |
|||
public void setDeviceId(java.lang.Integer deviceId) { |
|||
set("deviceId", deviceId); |
|||
} |
|||
|
|||
/** |
|||
* 设备id |
|||
*/ |
|||
public java.lang.Integer getDeviceId() { |
|||
return getInt("deviceId"); |
|||
} |
|||
|
|||
public void setName(java.lang.String name) { |
|||
set("name", name); |
|||
} |
|||
|
|||
public java.lang.String getName() { |
|||
return getStr("name"); |
|||
} |
|||
|
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,93 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseOrderDetail<M extends BaseOrderDetail<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 订单id |
|||
*/ |
|||
public void setOrderId(java.lang.Integer orderId) { |
|||
set("orderId", orderId); |
|||
} |
|||
|
|||
/** |
|||
* 订单id |
|||
*/ |
|||
public java.lang.Integer getOrderId() { |
|||
return getInt("orderId"); |
|||
} |
|||
|
|||
/** |
|||
* 产品id |
|||
*/ |
|||
public void setProductIId(java.lang.Integer productIId) { |
|||
set("productIId", productIId); |
|||
} |
|||
|
|||
/** |
|||
* 产品id |
|||
*/ |
|||
public java.lang.Integer getProductIId() { |
|||
return getInt("productIId"); |
|||
} |
|||
|
|||
/** |
|||
* 开始时间 |
|||
*/ |
|||
public void setStartTime(java.time.LocalDateTime startTime) { |
|||
set("startTime", startTime); |
|||
} |
|||
|
|||
/** |
|||
* 开始时间 |
|||
*/ |
|||
public java.time.LocalDateTime getStartTime() { |
|||
return getLocalDateTime("startTime"); |
|||
} |
|||
|
|||
/** |
|||
* 结束时间 |
|||
*/ |
|||
public void setEndTime(java.time.LocalDateTime endTime) { |
|||
set("endTime", endTime); |
|||
} |
|||
|
|||
/** |
|||
* 结束时间 |
|||
*/ |
|||
public java.time.LocalDateTime getEndTime() { |
|||
return getLocalDateTime("endTime"); |
|||
} |
|||
|
|||
public void setName(java.lang.String name) { |
|||
set("name", name); |
|||
} |
|||
|
|||
public java.lang.String getName() { |
|||
return getStr("name"); |
|||
} |
|||
|
|||
public void setCreateAt(java.time.LocalDateTime createAt) { |
|||
set("createAt", createAt); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateAt() { |
|||
return getLocalDateTime("createAt"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,85 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BasePayment<M extends BasePayment<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 订单id |
|||
*/ |
|||
public void setOrderId(java.lang.Integer orderId) { |
|||
set("orderId", orderId); |
|||
} |
|||
|
|||
/** |
|||
* 订单id |
|||
*/ |
|||
public java.lang.Integer getOrderId() { |
|||
return getInt("orderId"); |
|||
} |
|||
|
|||
/** |
|||
* 支付方式 扫码支付,账户余额等 |
|||
*/ |
|||
public void setMethod(java.lang.Integer method) { |
|||
set("method", method); |
|||
} |
|||
|
|||
/** |
|||
* 支付方式 扫码支付,账户余额等 |
|||
*/ |
|||
public java.lang.Integer getMethod() { |
|||
return getInt("method"); |
|||
} |
|||
|
|||
/** |
|||
* 支付状态 0待支付1已支付2支付失败 |
|||
*/ |
|||
public void setStatus(java.lang.Integer status) { |
|||
set("status", status); |
|||
} |
|||
|
|||
/** |
|||
* 支付状态 0待支付1已支付2支付失败 |
|||
*/ |
|||
public java.lang.Integer getStatus() { |
|||
return getInt("status"); |
|||
} |
|||
|
|||
/** |
|||
* 支付时间 |
|||
*/ |
|||
public void setPayTime(java.time.LocalDateTime payTime) { |
|||
set("payTime", payTime); |
|||
} |
|||
|
|||
/** |
|||
* 支付时间 |
|||
*/ |
|||
public java.time.LocalDateTime getPayTime() { |
|||
return getLocalDateTime("payTime"); |
|||
} |
|||
|
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,325 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseProduct<M extends BaseProduct<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
public void setName(java.lang.String name) { |
|||
set("name", name); |
|||
} |
|||
|
|||
public java.lang.String getName() { |
|||
return getStr("name"); |
|||
} |
|||
|
|||
/** |
|||
* CPU数 |
|||
*/ |
|||
public void setCpuCount(java.lang.String cpuCount) { |
|||
set("cpuCount", cpuCount); |
|||
} |
|||
|
|||
/** |
|||
* CPU数 |
|||
*/ |
|||
public java.lang.String getCpuCount() { |
|||
return getStr("cpuCount"); |
|||
} |
|||
|
|||
/** |
|||
* CPU名称 |
|||
*/ |
|||
public void setCpuName(java.lang.String cpuName) { |
|||
set("cpuName", cpuName); |
|||
} |
|||
|
|||
/** |
|||
* CPU名称 |
|||
*/ |
|||
public java.lang.String getCpuName() { |
|||
return getStr("cpuName"); |
|||
} |
|||
|
|||
/** |
|||
* CPU主频 |
|||
*/ |
|||
public void setCpuFrequency(java.lang.String cpuFrequency) { |
|||
set("cpuFrequency", cpuFrequency); |
|||
} |
|||
|
|||
/** |
|||
* CPU主频 |
|||
*/ |
|||
public java.lang.String getCpuFrequency() { |
|||
return getStr("cpuFrequency"); |
|||
} |
|||
|
|||
/** |
|||
* 单U核心数 |
|||
*/ |
|||
public void setSingleCoreCount(java.lang.String singleCoreCount) { |
|||
set("singleCoreCount", singleCoreCount); |
|||
} |
|||
|
|||
/** |
|||
* 单U核心数 |
|||
*/ |
|||
public java.lang.String getSingleCoreCount() { |
|||
return getStr("singleCoreCount"); |
|||
} |
|||
|
|||
/** |
|||
* 双U核心数 |
|||
*/ |
|||
public void setDualCoreCount(java.lang.String dualCoreCount) { |
|||
set("dualCoreCount", dualCoreCount); |
|||
} |
|||
|
|||
/** |
|||
* 双U核心数 |
|||
*/ |
|||
public java.lang.String getDualCoreCount() { |
|||
return getStr("dualCoreCount"); |
|||
} |
|||
|
|||
/** |
|||
* 总线程数 |
|||
*/ |
|||
public void setTotalThreadCount(java.lang.String totalThreadCount) { |
|||
set("totalThreadCount", totalThreadCount); |
|||
} |
|||
|
|||
/** |
|||
* 总线程数 |
|||
*/ |
|||
public java.lang.String getTotalThreadCount() { |
|||
return getStr("totalThreadCount"); |
|||
} |
|||
|
|||
/** |
|||
* 内存容量 |
|||
*/ |
|||
public void setMemoryCapacity(java.lang.String memoryCapacity) { |
|||
set("memoryCapacity", memoryCapacity); |
|||
} |
|||
|
|||
/** |
|||
* 内存容量 |
|||
*/ |
|||
public java.lang.String getMemoryCapacity() { |
|||
return getStr("memoryCapacity"); |
|||
} |
|||
|
|||
/** |
|||
* 内存速度 |
|||
*/ |
|||
public void setMemorySpeed(java.lang.String memorySpeed) { |
|||
set("memorySpeed", memorySpeed); |
|||
} |
|||
|
|||
/** |
|||
* 内存速度 |
|||
*/ |
|||
public java.lang.String getMemorySpeed() { |
|||
return getStr("memorySpeed"); |
|||
} |
|||
|
|||
/** |
|||
* 物理盘 |
|||
*/ |
|||
public void setPhysicalDisk(java.lang.String physicalDisk) { |
|||
set("physicalDisk", physicalDisk); |
|||
} |
|||
|
|||
/** |
|||
* 物理盘 |
|||
*/ |
|||
public java.lang.String getPhysicalDisk() { |
|||
return getStr("physicalDisk"); |
|||
} |
|||
|
|||
/** |
|||
* 系统盘颗粒 |
|||
*/ |
|||
public void setSystemDiskParticle(java.lang.String systemDiskParticle) { |
|||
set("systemDiskParticle", systemDiskParticle); |
|||
} |
|||
|
|||
/** |
|||
* 系统盘颗粒 |
|||
*/ |
|||
public java.lang.String getSystemDiskParticle() { |
|||
return getStr("systemDiskParticle"); |
|||
} |
|||
|
|||
/** |
|||
* 数据盘容量 |
|||
*/ |
|||
public void setDataDiskCapacity(java.lang.String dataDiskCapacity) { |
|||
set("dataDiskCapacity", dataDiskCapacity); |
|||
} |
|||
|
|||
/** |
|||
* 数据盘容量 |
|||
*/ |
|||
public java.lang.String getDataDiskCapacity() { |
|||
return getStr("dataDiskCapacity"); |
|||
} |
|||
|
|||
/** |
|||
* 数据盘读取速度 |
|||
*/ |
|||
public void setDataDiskReadSpeed(java.lang.String dataDiskReadSpeed) { |
|||
set("dataDiskReadSpeed", dataDiskReadSpeed); |
|||
} |
|||
|
|||
/** |
|||
* 数据盘读取速度 |
|||
*/ |
|||
public java.lang.String getDataDiskReadSpeed() { |
|||
return getStr("dataDiskReadSpeed"); |
|||
} |
|||
|
|||
/** |
|||
* 数据盘写入速度 |
|||
*/ |
|||
public void setDataDiskWriteSpeed(java.lang.String dataDiskWriteSpeed) { |
|||
set("dataDiskWriteSpeed", dataDiskWriteSpeed); |
|||
} |
|||
|
|||
/** |
|||
* 数据盘写入速度 |
|||
*/ |
|||
public java.lang.String getDataDiskWriteSpeed() { |
|||
return getStr("dataDiskWriteSpeed"); |
|||
} |
|||
|
|||
/** |
|||
* 显卡型号 |
|||
*/ |
|||
public void setGraphicsCardModel(java.lang.String graphicsCardModel) { |
|||
set("graphicsCardModel", graphicsCardModel); |
|||
} |
|||
|
|||
/** |
|||
* 显卡型号 |
|||
*/ |
|||
public java.lang.String getGraphicsCardModel() { |
|||
return getStr("graphicsCardModel"); |
|||
} |
|||
|
|||
/** |
|||
* 显存容量 |
|||
*/ |
|||
public void setGraphicsMemoryCapacity(java.lang.String graphicsMemoryCapacity) { |
|||
set("graphicsMemoryCapacity", graphicsMemoryCapacity); |
|||
} |
|||
|
|||
/** |
|||
* 显存容量 |
|||
*/ |
|||
public java.lang.String getGraphicsMemoryCapacity() { |
|||
return getStr("graphicsMemoryCapacity"); |
|||
} |
|||
|
|||
/** |
|||
* 下载速度 |
|||
*/ |
|||
public void setDownloadSpeed(java.lang.String downloadSpeed) { |
|||
set("downloadSpeed", downloadSpeed); |
|||
} |
|||
|
|||
/** |
|||
* 下载速度 |
|||
*/ |
|||
public java.lang.String getDownloadSpeed() { |
|||
return getStr("downloadSpeed"); |
|||
} |
|||
|
|||
/** |
|||
* 上传速度 |
|||
*/ |
|||
public void setUploadSpeed(java.lang.String uploadSpeed) { |
|||
set("uploadSpeed", uploadSpeed); |
|||
} |
|||
|
|||
/** |
|||
* 上传速度 |
|||
*/ |
|||
public java.lang.String getUploadSpeed() { |
|||
return getStr("uploadSpeed"); |
|||
} |
|||
|
|||
/** |
|||
* 内网带宽 |
|||
*/ |
|||
public void setInternalNetworkBandwidth(java.lang.String internalNetworkBandwidth) { |
|||
set("internalNetworkBandwidth", internalNetworkBandwidth); |
|||
} |
|||
|
|||
/** |
|||
* 内网带宽 |
|||
*/ |
|||
public java.lang.String getInternalNetworkBandwidth() { |
|||
return getStr("internalNetworkBandwidth"); |
|||
} |
|||
|
|||
/** |
|||
* 单UTDP |
|||
*/ |
|||
public void setSingleUtdp(java.lang.String singleUtdp) { |
|||
set("singleUtdp", singleUtdp); |
|||
} |
|||
|
|||
/** |
|||
* 单UTDP |
|||
*/ |
|||
public java.lang.String getSingleUtdp() { |
|||
return getStr("singleUtdp"); |
|||
} |
|||
|
|||
/** |
|||
* 总TDP |
|||
*/ |
|||
public void setTotalTdp(java.lang.String totalTdp) { |
|||
set("totalTdp", totalTdp); |
|||
} |
|||
|
|||
/** |
|||
* 总TDP |
|||
*/ |
|||
public java.lang.String getTotalTdp() { |
|||
return getStr("totalTdp"); |
|||
} |
|||
|
|||
public void setContent(java.lang.String content) { |
|||
set("content", content); |
|||
} |
|||
|
|||
public java.lang.String getContent() { |
|||
return getStr("content"); |
|||
} |
|||
|
|||
public void setCreateAt(java.time.LocalDateTime createAt) { |
|||
set("createAt", createAt); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateAt() { |
|||
return getLocalDateTime("createAt"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,99 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseProductPricing<M extends BaseProductPricing<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 定价名称 |
|||
*/ |
|||
public void setName(java.lang.String name) { |
|||
set("name", name); |
|||
} |
|||
|
|||
/** |
|||
* 定价名称 |
|||
*/ |
|||
public java.lang.String getName() { |
|||
return getStr("name"); |
|||
} |
|||
|
|||
/** |
|||
* 产品id |
|||
*/ |
|||
public void setProductId(java.lang.Integer productId) { |
|||
set("productId", productId); |
|||
} |
|||
|
|||
/** |
|||
* 产品id |
|||
*/ |
|||
public java.lang.Integer getProductId() { |
|||
return getInt("productId"); |
|||
} |
|||
|
|||
/** |
|||
* 定价的时长,如天、月、半年、年填数字 |
|||
*/ |
|||
public void setDuration(java.lang.Integer duration) { |
|||
set("duration", duration); |
|||
} |
|||
|
|||
/** |
|||
* 定价的时长,如天、月、半年、年填数字 |
|||
*/ |
|||
public java.lang.Integer getDuration() { |
|||
return getInt("duration"); |
|||
} |
|||
|
|||
/** |
|||
* 定价的价格 |
|||
*/ |
|||
public void setPrice(java.math.BigDecimal price) { |
|||
set("price", price); |
|||
} |
|||
|
|||
/** |
|||
* 定价的价格 |
|||
*/ |
|||
public java.math.BigDecimal getPrice() { |
|||
return getBigDecimal("price"); |
|||
} |
|||
|
|||
public void setCreateAt(java.time.LocalDateTime createAt) { |
|||
set("createAt", createAt); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateAt() { |
|||
return getLocalDateTime("createAt"); |
|||
} |
|||
|
|||
/** |
|||
* 删除标志 |
|||
*/ |
|||
public void setYn(java.lang.Integer yn) { |
|||
set("yn", yn); |
|||
} |
|||
|
|||
/** |
|||
* 删除标志 |
|||
*/ |
|||
public java.lang.Integer getYn() { |
|||
return getInt("yn"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,155 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseRealnameVerification<M extends BaseRealnameVerification<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
public void setAccountId(java.lang.Integer accountId) { |
|||
set("accountId", accountId); |
|||
} |
|||
|
|||
public java.lang.Integer getAccountId() { |
|||
return getInt("accountId"); |
|||
} |
|||
|
|||
/** |
|||
* 姓名 |
|||
*/ |
|||
public void setRealname(java.lang.String realname) { |
|||
set("realname", realname); |
|||
} |
|||
|
|||
/** |
|||
* 姓名 |
|||
*/ |
|||
public java.lang.String getRealname() { |
|||
return getStr("realname"); |
|||
} |
|||
|
|||
/** |
|||
* 身份证号 |
|||
*/ |
|||
public void setIdCard(java.lang.String idCard) { |
|||
set("idCard", idCard); |
|||
} |
|||
|
|||
/** |
|||
* 身份证号 |
|||
*/ |
|||
public java.lang.String getIdCard() { |
|||
return getStr("idCard"); |
|||
} |
|||
|
|||
/** |
|||
* 认证状态,0待认证、1已认证、3认证失败 |
|||
*/ |
|||
public void setStatus(java.lang.Integer status) { |
|||
set("status", status); |
|||
} |
|||
|
|||
/** |
|||
* 认证状态,0待认证、1已认证、3认证失败 |
|||
*/ |
|||
public java.lang.Integer getStatus() { |
|||
return getInt("status"); |
|||
} |
|||
|
|||
/** |
|||
* 提交认证时间alipay 的 certify_id 有时效 |
|||
*/ |
|||
public void setSubmitDate(java.time.LocalDateTime submitDate) { |
|||
set("submitDate", submitDate); |
|||
} |
|||
|
|||
/** |
|||
* 提交认证时间alipay 的 certify_id 有时效 |
|||
*/ |
|||
public java.time.LocalDateTime getSubmitDate() { |
|||
return getLocalDateTime("submitDate"); |
|||
} |
|||
|
|||
/** |
|||
* 支付宝certify_id |
|||
*/ |
|||
public void setCertifyId(java.lang.String certifyId) { |
|||
set("certifyId", certifyId); |
|||
} |
|||
|
|||
/** |
|||
* 支付宝certify_id |
|||
*/ |
|||
public java.lang.String getCertifyId() { |
|||
return getStr("certifyId"); |
|||
} |
|||
|
|||
/** |
|||
* 用于唤起刷脸页面的url |
|||
*/ |
|||
public void setCertifyUrl(java.lang.String certifyUrl) { |
|||
set("certifyUrl", certifyUrl); |
|||
} |
|||
|
|||
/** |
|||
* 用于唤起刷脸页面的url |
|||
*/ |
|||
public java.lang.String getCertifyUrl() { |
|||
return getStr("certifyUrl"); |
|||
} |
|||
|
|||
/** |
|||
* 刷脸页面url过期时间 |
|||
*/ |
|||
public void setCertifyUrlExpireAt(java.lang.Long certifyUrlExpireAt) { |
|||
set("certifyUrlExpireAt", certifyUrlExpireAt); |
|||
} |
|||
|
|||
/** |
|||
* 刷脸页面url过期时间 |
|||
*/ |
|||
public java.lang.Long getCertifyUrlExpireAt() { |
|||
return getLong("certifyUrlExpireAt"); |
|||
} |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
/** |
|||
* 数据状态 |
|||
*/ |
|||
public void setYn(java.lang.Integer yn) { |
|||
set("yn", yn); |
|||
} |
|||
|
|||
/** |
|||
* 数据状态 |
|||
*/ |
|||
public java.lang.Integer getYn() { |
|||
return getInt("yn"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,57 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseStoredValueCard<M extends BaseStoredValueCard<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 面值 |
|||
*/ |
|||
public void setValue(java.math.BigDecimal value) { |
|||
set("value", value); |
|||
} |
|||
|
|||
/** |
|||
* 面值 |
|||
*/ |
|||
public java.math.BigDecimal getValue() { |
|||
return getBigDecimal("value"); |
|||
} |
|||
|
|||
/** |
|||
* 状态,如未使用、已使用、已过期 |
|||
*/ |
|||
public void setStatus(java.lang.Integer status) { |
|||
set("status", status); |
|||
} |
|||
|
|||
/** |
|||
* 状态,如未使用、已使用、已过期 |
|||
*/ |
|||
public java.lang.Integer getStatus() { |
|||
return getInt("status"); |
|||
} |
|||
|
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,135 @@ |
|||
package com.bt.common.model.base; |
|||
|
|||
import com.jfinal.plugin.activerecord.Model; |
|||
import com.jfinal.plugin.activerecord.IBean; |
|||
|
|||
/** |
|||
* Generated by JFinal, do not modify this file. |
|||
*/ |
|||
@SuppressWarnings("serial") |
|||
public abstract class BaseUserDevice<M extends BaseUserDevice<M>> extends Model<M> implements IBean { |
|||
|
|||
public void setId(java.lang.Integer id) { |
|||
set("id", id); |
|||
} |
|||
|
|||
public java.lang.Integer getId() { |
|||
return getInt("id"); |
|||
} |
|||
|
|||
/** |
|||
* 账户id |
|||
*/ |
|||
public void setAccountId(java.lang.Integer accountId) { |
|||
set("accountId", accountId); |
|||
} |
|||
|
|||
/** |
|||
* 账户id |
|||
*/ |
|||
public java.lang.Integer getAccountId() { |
|||
return getInt("accountId"); |
|||
} |
|||
|
|||
/** |
|||
* 关联订单id |
|||
*/ |
|||
public void setOrderId(java.lang.Integer orderId) { |
|||
set("orderId", orderId); |
|||
} |
|||
|
|||
/** |
|||
* 关联订单id |
|||
*/ |
|||
public java.lang.Integer getOrderId() { |
|||
return getInt("orderId"); |
|||
} |
|||
|
|||
/** |
|||
* 关联的产品id |
|||
*/ |
|||
public void setProductId(java.lang.Integer productId) { |
|||
set("productId", productId); |
|||
} |
|||
|
|||
/** |
|||
* 关联的产品id |
|||
*/ |
|||
public java.lang.Integer getProductId() { |
|||
return getInt("productId"); |
|||
} |
|||
|
|||
/** |
|||
* 设备账号 |
|||
*/ |
|||
public void setAccount(java.lang.String account) { |
|||
set("account", account); |
|||
} |
|||
|
|||
/** |
|||
* 设备账号 |
|||
*/ |
|||
public java.lang.String getAccount() { |
|||
return getStr("account"); |
|||
} |
|||
|
|||
public void setPassword(java.lang.String password) { |
|||
set("password", password); |
|||
} |
|||
|
|||
public java.lang.String getPassword() { |
|||
return getStr("password"); |
|||
} |
|||
|
|||
/** |
|||
* 开始时间 |
|||
*/ |
|||
public void setStartTime(java.time.LocalDateTime startTime) { |
|||
set("startTime", startTime); |
|||
} |
|||
|
|||
/** |
|||
* 开始时间 |
|||
*/ |
|||
public java.time.LocalDateTime getStartTime() { |
|||
return getLocalDateTime("startTime"); |
|||
} |
|||
|
|||
/** |
|||
* 结束时间 |
|||
*/ |
|||
public void setEndTime(java.time.LocalDateTime endTime) { |
|||
set("endTime", endTime); |
|||
} |
|||
|
|||
/** |
|||
* 结束时间 |
|||
*/ |
|||
public java.time.LocalDateTime getEndTime() { |
|||
return getLocalDateTime("endTime"); |
|||
} |
|||
|
|||
/** |
|||
* 设备状态 0使用中 1即将过期 2已过期 |
|||
*/ |
|||
public void setStatus(java.lang.Integer status) { |
|||
set("status", status); |
|||
} |
|||
|
|||
/** |
|||
* 设备状态 0使用中 1即将过期 2已过期 |
|||
*/ |
|||
public java.lang.Integer getStatus() { |
|||
return getInt("status"); |
|||
} |
|||
|
|||
public void setCreateTime(java.time.LocalDateTime createTime) { |
|||
set("createTime", createTime); |
|||
} |
|||
|
|||
public java.time.LocalDateTime getCreateTime() { |
|||
return getLocalDateTime("createTime"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,225 @@ |
|||
package com.bt.common.realname; |
|||
|
|||
import java.time.LocalDateTime; |
|||
|
|||
import cn.hutool.core.date.DatePattern; |
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.text.StrFormatter; |
|||
import cn.hutool.core.util.RandomUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alipay.api.AlipayApiException; |
|||
import com.alipay.api.AlipayClient; |
|||
import com.alipay.api.AlipayConfig; |
|||
import com.alipay.api.DefaultAlipayClient; |
|||
import com.alipay.api.domain.DatadigitalFincloudGeneralsaasFaceCertifyInitializeModel; |
|||
import com.alipay.api.domain.DatadigitalFincloudGeneralsaasFaceCertifyQueryModel; |
|||
import com.alipay.api.domain.OpenCertifyIdentifyInfo; |
|||
import com.alipay.api.domain.OpenCertifyMerchantConfigs; |
|||
import com.alipay.api.request.DatadigitalFincloudGeneralsaasFaceCertifyInitializeRequest; |
|||
import com.alipay.api.request.DatadigitalFincloudGeneralsaasFaceCertifyQueryRequest; |
|||
import com.alipay.api.request.DatadigitalFincloudGeneralsaasFaceCertifyVerifyRequest; |
|||
import com.alipay.api.response.DatadigitalFincloudGeneralsaasFaceCertifyInitializeResponse; |
|||
import com.alipay.api.response.DatadigitalFincloudGeneralsaasFaceCertifyQueryResponse; |
|||
import com.alipay.api.response.DatadigitalFincloudGeneralsaasFaceCertifyVerifyResponse; |
|||
import com.bt.common.model.Account; |
|||
import com.bt.common.model.RealnameVerification; |
|||
import com.jfinal.kit.PropKit; |
|||
import com.jfinal.kit.Ret; |
|||
|
|||
/** |
|||
* 实名认证业务 |
|||
*/ |
|||
public class RealnameService { |
|||
private RealnameVerification dao = new RealnameVerification().dao(); |
|||
|
|||
public RealnameVerification getByAccountId(Integer accountId, String columns) { |
|||
return dao.findFirst("select " + columns +" from realname_verification where yn=1 and accountId=? limit 1", accountId); |
|||
} |
|||
public Ret doRealName(RealnameVerification realnameVerification){ |
|||
realnameVerification.setRealname(realnameVerification.getRealname().trim()); |
|||
RealnameVerification oldRealName = getByAccountId(realnameVerification.getAccountId(), "id, realname, idCard, status, submitDate, certifyId, certifyUrl," |
|||
+ "certifyUrlExpireAt"); |
|||
if (oldRealName != null) { |
|||
if (oldRealName.getStatus() == RealnameVerification.STATUS_WAIT) { |
|||
System.out.println(StrUtil.equals(realnameVerification.getRealname(), oldRealName.getRealname())); |
|||
if (StrUtil.equals(realnameVerification.getRealname(), oldRealName.getRealname())&&StrUtil.equals(realnameVerification.getIdCard(), |
|||
oldRealName.getIdCard())&&oldRealName.getCertifyUrlExpireAt()>System.currentTimeMillis()){ |
|||
return Ret.ok("certifyUrl", oldRealName.getCertifyUrl()).set("certifyId", oldRealName.getCertifyId()); |
|||
} else { |
|||
Ret ret = alipayFaceVerify(realnameVerification.getRealname(), realnameVerification.getIdCard()); |
|||
if (ret.isOk()){ |
|||
RealnameVerification upRealName = new RealnameVerification(); |
|||
upRealName.setId(oldRealName.getId()); |
|||
String certifyId = ret.getStr("certifyId"); |
|||
String certifyUrl = ret.getStr("certifyUrl"); |
|||
long et = 3600*1000; // 使用 long et 3600秒(1小时) x 20
|
|||
long expireAt = System.currentTimeMillis() + (et * 20); |
|||
System.out.println(expireAt); |
|||
upRealName.setSubmitDate(LocalDateTime.now()); |
|||
upRealName.setCertifyId(certifyId); |
|||
upRealName.setCertifyUrl(certifyUrl); |
|||
upRealName.setCertifyUrlExpireAt(expireAt); |
|||
upRealName.update(); |
|||
return Ret.ok("certifyUrl", certifyUrl).set("certifyId", certifyId); |
|||
}else { |
|||
return Ret.fail("实名认证异常,请重试或联系管理员"); |
|||
} |
|||
} |
|||
} else { |
|||
return Ret.ok("msg", "已认证过无须再次认证"); |
|||
} |
|||
} else { |
|||
//调用支付宝实名获取链接
|
|||
Ret ret = alipayFaceVerify(realnameVerification.getRealname(), realnameVerification.getIdCard()); |
|||
System.out.println(ret); |
|||
if (ret.isOk()){ |
|||
String certifyId = ret.getStr("certifyId"); |
|||
String certifyUrl = ret.getStr("certifyUrl"); |
|||
long et = 3600*1000; // 使用 long et 3600秒(1小时) x 20
|
|||
long expireAt = System.currentTimeMillis() + (et * 20); |
|||
realnameVerification.setStatus(RealnameVerification.STATUS_WAIT); |
|||
realnameVerification.setSubmitDate(LocalDateTime.now()); |
|||
realnameVerification.setCertifyId(certifyId); |
|||
realnameVerification.setCertifyUrl(certifyUrl); |
|||
realnameVerification.setCertifyUrlExpireAt(expireAt); |
|||
realnameVerification.setCreateTime(LocalDateTime.now()); |
|||
realnameVerification.save(); |
|||
return Ret.ok("certifyUrl", certifyUrl).set("certifyId", certifyId); |
|||
} else { |
|||
return Ret.fail("实名认证异常,请重试或联系管理员"); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public Ret queryRealName(Integer accountId){ |
|||
RealnameVerification realName = getByAccountId(accountId, "id, realname,idCard,status,submitDate, certifyId, certifyUrl"); |
|||
if (realName==null){ |
|||
return Ret.fail("实名认证查询异常,请联系管理员"); |
|||
} |
|||
if(StrUtil.isBlank(realName.getCertifyId())){ |
|||
return Ret.fail("实名认证查询异常,请联系管理员"); |
|||
} |
|||
Ret ret = alipayFaceQuery(realName.getCertifyId()); |
|||
if (ret.isOk()){ |
|||
String passed = ret.getStr("passed"); |
|||
if ("T".equals(passed)){ |
|||
RealnameVerification upRealName = new RealnameVerification(); |
|||
upRealName.setId(realName.getId()); |
|||
upRealName.setStatus(RealnameVerification.STATUS_SUCCESS); |
|||
Account account = new Account(); |
|||
account.setRealnameVerified(Account.REAL_NAME_YES); |
|||
account.setId(accountId); |
|||
account.update(); |
|||
upRealName.update(); |
|||
return Ret.ok(); |
|||
}else { |
|||
return Ret.fail("未完成实名认证或认证不通过,请重新扫码认证"); |
|||
} |
|||
}else { |
|||
return Ret.fail("实名认证查询异常,请重试或联系管理员"); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
private Ret alipayFaceVerify(String realName, String idCard) { |
|||
try{ |
|||
String randomStr = RandomUtil.randomString(6); |
|||
String outerOrderNo = StrFormatter.format("BT{}{}", DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_MS_PATTERN), randomStr); |
|||
System.out.println("outerOrderNo"+ outerOrderNo); |
|||
DatadigitalFincloudGeneralsaasFaceCertifyInitializeResponse response = getDatadigitalFincloudGeneralsaasFaceCertifyInitializeResponse( |
|||
realName, idCard, outerOrderNo); |
|||
if (response.isSuccess()) { |
|||
String certifyId = response.getCertifyId(); |
|||
DatadigitalFincloudGeneralsaasFaceCertifyVerifyResponse verifyResponse = |
|||
getDatadigitalFincloudGeneralsaasFaceCertifyVerifyResponse(certifyId); |
|||
if (verifyResponse.isSuccess()){ |
|||
return Ret.ok("certifyUrl", verifyResponse.getCertifyUrl()).set("certifyId", certifyId); |
|||
}else { |
|||
return Ret.fail(); |
|||
} |
|||
} else { |
|||
return Ret.fail(); |
|||
} |
|||
}catch (AlipayApiException e){ |
|||
return Ret.fail(); |
|||
} |
|||
} |
|||
|
|||
private Ret alipayFaceQuery(String certifyId) { |
|||
try{ |
|||
DatadigitalFincloudGeneralsaasFaceCertifyQueryResponse response = getDatadigitalFincloudGeneralsaasFaceCertifyQueryResponse(certifyId); |
|||
if (response.isSuccess()) { |
|||
String passed = response.getPassed(); |
|||
return Ret.ok("passed", passed); |
|||
} else { |
|||
return Ret.fail("实名认证查询异常,请重试或联系管理员"); |
|||
} |
|||
} catch (AlipayApiException e){ |
|||
return Ret.fail(); |
|||
} |
|||
} |
|||
|
|||
private DatadigitalFincloudGeneralsaasFaceCertifyInitializeResponse getDatadigitalFincloudGeneralsaasFaceCertifyInitializeResponse (String realName, |
|||
String idCard, String outerOrderNo) throws AlipayApiException { |
|||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); |
|||
// 构造请求参数以调用接口
|
|||
DatadigitalFincloudGeneralsaasFaceCertifyInitializeRequest request = new DatadigitalFincloudGeneralsaasFaceCertifyInitializeRequest(); |
|||
DatadigitalFincloudGeneralsaasFaceCertifyInitializeModel model = new DatadigitalFincloudGeneralsaasFaceCertifyInitializeModel(); |
|||
// 设置H5人脸核身场景码
|
|||
model.setBizCode("FUTURE_TECH_BIZ_FACE_SDK"); |
|||
// 设置认证信息
|
|||
OpenCertifyIdentifyInfo identityParam = new OpenCertifyIdentifyInfo(); |
|||
identityParam.setCertType("IDENTITY_CARD"); |
|||
identityParam.setCertName(realName); |
|||
identityParam.setCertNo(idCard); |
|||
identityParam.setIdentityType("CERT_INFO"); |
|||
model.setIdentityParam(identityParam); |
|||
// 设置商户请求的唯一标识 "BT20240411224901000001231"
|
|||
model.setOuterOrderNo(outerOrderNo); |
|||
// 设置商户配置信息
|
|||
OpenCertifyMerchantConfigs merchantConfig = new OpenCertifyMerchantConfigs(); |
|||
merchantConfig.setFaceReserveStrategy("reserve"); |
|||
merchantConfig.setReturnUrl(""); |
|||
model.setMerchantConfig(merchantConfig); |
|||
request.setBizModel(model); |
|||
return alipayClient.execute(request); |
|||
} |
|||
|
|||
private DatadigitalFincloudGeneralsaasFaceCertifyVerifyResponse getDatadigitalFincloudGeneralsaasFaceCertifyVerifyResponse(String certifyId) |
|||
throws AlipayApiException { |
|||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); |
|||
DatadigitalFincloudGeneralsaasFaceCertifyVerifyRequest request = new DatadigitalFincloudGeneralsaasFaceCertifyVerifyRequest(); |
|||
request.setBizContent("{\"certify_id\":\"" + certifyId + "\"}"); |
|||
return alipayClient.execute(request); |
|||
} |
|||
|
|||
private DatadigitalFincloudGeneralsaasFaceCertifyQueryResponse getDatadigitalFincloudGeneralsaasFaceCertifyQueryResponse(String certifyId) |
|||
throws AlipayApiException { |
|||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); |
|||
DatadigitalFincloudGeneralsaasFaceCertifyQueryRequest request = new DatadigitalFincloudGeneralsaasFaceCertifyQueryRequest(); |
|||
DatadigitalFincloudGeneralsaasFaceCertifyQueryModel model = new DatadigitalFincloudGeneralsaasFaceCertifyQueryModel(); |
|||
// 设置本次申请操作的唯一标识
|
|||
model.setCertifyId(certifyId); |
|||
request.setBizModel(model); |
|||
return alipayClient.execute(request); |
|||
} |
|||
|
|||
|
|||
|
|||
private AlipayConfig getAlipayConfig() { |
|||
String appId = PropKit.get("alipayAppId"); |
|||
String privateKey = PropKit.get("alipayPrivateKey"); |
|||
String alipayPublicKey = PropKit.get("alipayPublicKey"); |
|||
AlipayConfig alipayConfig = new AlipayConfig(); |
|||
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); |
|||
alipayConfig.setAppId(appId); |
|||
alipayConfig.setPrivateKey(privateKey); |
|||
alipayConfig.setFormat("json"); |
|||
alipayConfig.setAlipayPublicKey(alipayPublicKey); |
|||
alipayConfig.setCharset("UTF-8"); |
|||
alipayConfig.setSignType("RSA2"); |
|||
return alipayConfig; |
|||
} |
|||
} |
|||
@ -0,0 +1,51 @@ |
|||
package com.bt.product; |
|||
|
|||
import java.util.List; |
|||
|
|||
import com.bt.common.model.Product; |
|||
import com.bt.common.model.Project; |
|||
import com.bt.common.safe.JsoupFilter; |
|||
import com.jfinal.kit.Kv; |
|||
import com.jfinal.plugin.activerecord.Page; |
|||
import com.jfinal.plugin.ehcache.CacheKit; |
|||
|
|||
|
|||
/** |
|||
* ProductService |
|||
*/ |
|||
public class ProductService { |
|||
private Product dao = new Product().dao(); |
|||
|
|||
public Page<Product> paginate(int pageNumber) { |
|||
Page<Product> productPage = dao.template("product.paginate").paginate(pageNumber, 16); |
|||
// 列表页显示 content 的摘要信息需要过滤为纯文本,去除所有标记
|
|||
//JsoupFilter.filterArticleList(productPage.getList(), 50, 120);
|
|||
return productPage; |
|||
} |
|||
|
|||
public Product findById(int projectId) { |
|||
return dao.template("project.findById", projectId, Project.REPORT_BLOCK_NUM).findFirst(); |
|||
} |
|||
|
|||
public Product findById(int projectId, String columns) { |
|||
Kv para = Kv.by("columns", columns).set("id", projectId).set("report", Project.REPORT_BLOCK_NUM); |
|||
return dao.template("project.findByIdWithColumns", para).findFirst(); |
|||
} |
|||
|
|||
public List<Product> getHotProject() { |
|||
return dao.template("project.getHotProject", Project.REPORT_BLOCK_NUM).findByCache("hotProject", "hotProject"); |
|||
} |
|||
|
|||
public void clearHotProjectCache() { |
|||
CacheKit.remove("hotProject", "hotProject"); |
|||
} |
|||
|
|||
/** |
|||
* 暂时用于个人空间的创建、更新 share、feedback 模块,用于显示关联项目的下拉列表,将来改成按热度排序 |
|||
* 项目数量多了以后考虑用输入框配合 autocomplete 提示输入来实现 |
|||
*/ |
|||
public List<Product> getAllProject(String columns) { |
|||
Kv para = Kv.by("columns", columns).set("report", Project.REPORT_BLOCK_NUM); |
|||
return dao.template("project.getAllProject", para).find(); |
|||
} |
|||
} |
|||
@ -0,0 +1,30 @@ |
|||
#sql("paginate") |
|||
select p.id, |
|||
substring(p.name, 1, 100) as name, |
|||
p.cpuName, p.memoryCapacity, p.graphicsCardModel, p.dataDiskCapacity, p.downloadSpeed, |
|||
substring(p.content, 1, 180) as content, p.createAt as createAt |
|||
from product p |
|||
#end |
|||
|
|||
#sql("findById") |
|||
select p.* , a.avatar, a.nickName |
|||
from product p inner join account a on p.accountId = a.id |
|||
where p.id = #para(0) and p.report < #para(1) limit 1 |
|||
#end |
|||
|
|||
#sql("findByIdWithColumns") |
|||
select #(columns) from product where id = #para(id) and report < #para(report) limit 1 |
|||
#end |
|||
|
|||
#sql("getHotproduct") |
|||
select id, title from product where report < #para(0) order by createAt asc limit 10 |
|||
#end |
|||
|
|||
#sql("getAllproduct") |
|||
select #(columns) from product where report < #para(report) order by createAt asc |
|||
#end |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,183 @@ |
|||
#@adminLayout() |
|||
|
|||
#define main() |
|||
### isAdd 表示创建,isEdit 表示修改 |
|||
#set(isAdd = product == null ? true : false, isEdit = !isAdd) |
|||
|
|||
<div class="jfa-header-box" id="jfa-header-box"> |
|||
<div class="jfa-crumbs" id="jfa-crumbs"> |
|||
产品管理 / #(isAdd ? "创建" : "修改") |
|||
</div> |
|||
<div class="jfa-search-box"></div> |
|||
#include("/_view/_admin/common/_header_right.html") |
|||
</div> |
|||
|
|||
### 内容区域 |
|||
<div class="jfa-content-box" id="jfa-content-box"> |
|||
<div class="jfa-content" id="jfa-content"> |
|||
<form class="clearfix margin-top-25" id="myArticleForm" action="/admin/product/#(isAdd ? 'save' : 'update')" method="post"> |
|||
|
|||
#if (isEdit) |
|||
<input type="hidden" name="product.id" value="#(product.id)" /> |
|||
#end |
|||
|
|||
<div class="form-group margin-bottom-20"> |
|||
<label>产品名称</label> |
|||
<input type="text" class="form-control" name="product.name" value="#(product.name??)" placeholder="产品唯一标识" /> |
|||
</div> |
|||
|
|||
<div class="form-group margin-bottom-20"> |
|||
<label>CPU数</label> |
|||
<input type="text" class="form-control" name="product.cpuCount" value="#(product.cpuCount??)" placeholder="CPU数" /> |
|||
</div> |
|||
|
|||
<div class="form-group margin-bottom-20"> |
|||
<label>CPU名称</label> |
|||
<input type="text" class="form-control" name="product.cpuName" value="#(product.cpuName??)" placeholder="CPU名称" /> |
|||
</div> |
|||
|
|||
<div class="form-group margin-bottom-20"> |
|||
<label>CPU主频</label> |
|||
<input type="text" class="form-control" name="product.cpuFrequency" value="#(product.cpuFrequency??)" placeholder="CPU主频" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>单U核心数</label> |
|||
<input type="text" class="form-control" name="product.singleCoreCount" value="#(product.singleCoreCount??)" placeholder="单U核心数" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>双U核心数</label> |
|||
<input type="text" class="form-control" name="product.dualCoreCount" value="#(product.dualCoreCount??)" placeholder="双U核心数" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>单U核心数</label> |
|||
<input type="text" class="form-control" name="product.singleCoreCount" value="#(product.singleCoreCount??)" placeholder="单U核心数" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>总线程数</label> |
|||
<input type="text" class="form-control" name="product.totalThreadCount" value="#(product.totalThreadCount??)" placeholder="总线程数" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>内存容量</label> |
|||
<input type="text" class="form-control" name="product.memoryCapacity" value="#(product.memoryCapacity??)" placeholder="内存容量" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>内存速度</label> |
|||
<input type="text" class="form-control" name="product.memorySpeed" value="#(product.memorySpeed??)" placeholder="内存速度" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>物理盘</label> |
|||
<input type="text" class="form-control" name="product.physicalDisk" value="#(product.physicalDisk??)" placeholder="物理盘" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>系统盘颗粒</label> |
|||
<input type="text" class="form-control" name="product.systemDiskParticle" value="#(product.systemDiskParticle??)" placeholder="系统盘颗粒" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>数据盘容量</label> |
|||
<input type="text" class="form-control" name="product.dataDiskCapacity" value="#(product.dataDiskCapacity??)" placeholder="数据盘容量" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>数据盘读取速度</label> |
|||
<input type="text" class="form-control" name="product.dataDiskReadSpeed" value="#(product.dataDiskReadSpeed??)" placeholder="数据盘读取速度" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>数据盘写入速度</label> |
|||
<input type="text" class="form-control" name="product.dataDiskWriteSpeed" value="#(product.dataDiskWriteSpeed??)" placeholder="数据盘写入速度" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>显卡型号</label> |
|||
<input type="text" class="form-control" name="product.graphicsCardModel" value="#(product.graphicsCardModel??)" placeholder="显卡型号" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>显存容量</label> |
|||
<input type="text" class="form-control" name="product.graphicsMemoryCapacity" value="#(product.graphicsMemoryCapacity??)" placeholder="显存容量" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>下载速度</label> |
|||
<input type="text" class="form-control" name="product.downloadSpeed" value="#(product.downloadSpeed??)" placeholder="下载速度" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>上传速度</label> |
|||
<input type="text" class="form-control" name="product.uploadSpeed" value="#(product.uploadSpeed??)" placeholder="上传速度" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>内网带宽</label> |
|||
<input type="text" class="form-control" name="product.internalNetworkBandwidth" value="#(product.internalNetworkBandwidth??)" placeholder="内网带宽" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>日租费用</label> |
|||
<input type="text" class="form-control" name="product.dailyRentalFee" value="#(product.dailyRentalFee??)" placeholder="日租费用" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>月租费用</label> |
|||
<input type="text" class="form-control" name="product.monthlyRentalFee" value="#(product.monthlyRentalFee??)" placeholder="月租费用" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>单价/核心</label> |
|||
<input type="text" class="form-control" name="product.pricePerCore" value="#(product.pricePerCore??)" placeholder="单价/核心" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>单UTDP</label> |
|||
<input type="text" class="form-control" name="product.singleUtdp" value="#(product.singleUtdp??)" placeholder="单UTDP" /> |
|||
</div> |
|||
<div class="form-group margin-bottom-20"> |
|||
<label>总TDP</label> |
|||
<input type="text" class="form-control" name="product.totalTdp" value="#(product.totalTdp??)" placeholder="总TDP" /> |
|||
</div> |
|||
|
|||
<div class="form-group margin-bottom-20"> |
|||
<label>附加内容</label> |
|||
<div> |
|||
<script id="container" name="product.content" style="line-height: 20px;" type="text/plain">#(project.content??)</script> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="pull-right margin-bottom-20" > |
|||
<input class="btn btn-primary" type="submit" value="提交" /> |
|||
</div> |
|||
</form> |
|||
|
|||
</div><!-- END OF jfa-content --> |
|||
</div><!-- END OF jfa-content-box --> |
|||
|
|||
<style type="text/css"> |
|||
.jfa-content label { |
|||
line-height: 1; |
|||
vertical-align: baseline; |
|||
color: #23527c; |
|||
font-size: 20px; |
|||
font-weight: normal; |
|||
margin-bottom: 8px;; |
|||
} |
|||
</style> |
|||
|
|||
<script type="text/javascript"> |
|||
$(document).ready(function() { |
|||
initUeditor(); |
|||
|
|||
// 上传时在 url 中用问号挂参的方式添加额外的参数 uploadType,用于分类管理图片 |
|||
env.ueditor.ready(function() { |
|||
env.ueditor.execCommand('serverparam', { |
|||
'uploadType': 'product' |
|||
}); |
|||
}); |
|||
|
|||
$("#myArticleForm").ajaxForm({ |
|||
dataType: "json" |
|||
, beforeSubmit: function(formData, jqForm, options) { |
|||
env.ueditor.sync(); // 同步一下 ueditor 中的数据到表单域 |
|||
} |
|||
, success: function(ret) { |
|||
if (ret.state == "ok") { |
|||
location.href = "/admin/product?p=#(p ?? 1)"; |
|||
} else { |
|||
showFailMsg(ret.msg); |
|||
} |
|||
} |
|||
, error: function(ret) {alert(ret.statusText);} |
|||
, complete: function(ret) {} // 无论是 success 还是 error,最终都会被回调 |
|||
}); |
|||
}); |
|||
</script> |
|||
|
|||
#end |
|||
@ -0,0 +1,136 @@ |
|||
#@adminLayout() |
|||
|
|||
#define main() |
|||
<div class="jfa-header-box" id="jfa-header-box"> |
|||
<div class="jfa-crumbs" id="jfa-crumbs"> |
|||
产品管理 |
|||
</div> |
|||
<div class="jfa-search-box"> |
|||
<form action="/admin/project/search"> |
|||
### <input class="jfa-search" type="text" name="keyword" placeholder="搜索" > |
|||
</form> |
|||
</div> |
|||
#include("/_view/_admin/common/_header_right.html") |
|||
</div> |
|||
|
|||
### 内容区域 |
|||
<div class="jfa-content-box" id="jfa-content-box"> |
|||
<div class="jfa-content" id="jfa-content"> |
|||
|
|||
<div class="jfa-toolbar"> |
|||
<a class="btn btn-primary btn-sm" href="/admin/product/add"> |
|||
<i class="fa fa-plus"></i> |
|||
创建产品 |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="jfa-table-box margin-top-30"> |
|||
<table class="table table-bordered table-hover margin-bottom-10"> |
|||
<thead> |
|||
<tr> |
|||
<th>id</th> |
|||
<th>名称</th> |
|||
<th>CPU数</th> |
|||
<th>CPU名称</th> |
|||
<th>单U核心数</th> |
|||
<th>双U核心数</th> |
|||
<th>总线程数</th> |
|||
<th>内存容量</th> |
|||
<th>内存速度</th> |
|||
<th>物理盘</th> |
|||
<th>系统盘颗粒</th> |
|||
<th>数据盘容量</th> |
|||
<th>数据盘读取速度</th> |
|||
<th>数据盘写入速度</th> |
|||
<th>显卡型号</th> |
|||
<th>显存容量</th> |
|||
<th>下载速度</th> |
|||
<th>上传速度</th> |
|||
<th>上传速度</th> |
|||
<th>内网带宽</th> |
|||
<th>日租费用</th> |
|||
<th>月租费用</th> |
|||
<th>单价/核心</th> |
|||
<th>单UTDP</th> |
|||
<th>总TDP</th> |
|||
<th>创建时间</th> |
|||
<th>操作</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
#for(x : productPage.getList()) |
|||
<tr> |
|||
<th scope="row">#(x.id)</th> |
|||
<td>#(x.name)</td> |
|||
<td>#(x.cpuCount)</td> |
|||
<td>#(x.cpuName)</td> |
|||
<td>#(x.cpuFrequency)</td> |
|||
<td>#(x.singleCoreCount)</td> |
|||
<td>#(x.dualCoreCount)</td> |
|||
<td>#(x.totalThreadCount)</td> |
|||
<td>#(x.memoryCapacity)</td> |
|||
<td>#(x.memorySpeed)</td> |
|||
<td>#(x.physicalDisk)</td> |
|||
<td>#(x.systemDiskParticle)</td> |
|||
<td>#(x.dataDiskCapacity)</td> |
|||
<td>#(x.dataDiskReadSpeed)</td> |
|||
<td>#(x.dataDiskWriteSpeed)</td> |
|||
<td>#(x.graphicsCardModel)</td> |
|||
<td>#(x.graphicsMemoryCapacity)</td> |
|||
<td>#(x.downloadSpeed)</td> |
|||
<td>#(x.uploadSpeed)</td> |
|||
<td>#(x.internalNetworkBandwidth)</td> |
|||
<td>#(x.dailyRentalFee)</td> |
|||
<td>#(x.monthlyRentalFee)</td> |
|||
<td>#(x.pricePerCore)</td> |
|||
<td>#(x.singleUtdp)</td> |
|||
<td>#(x.totalTdp)</td> |
|||
<td>#date(x.createAt)</td> |
|||
<td class="jfa-operation-button"> |
|||
|
|||
#permission("/admin/product/edit") |
|||
<a href="/admin/product/edit?id=#(x.id)&p=#(productPage.pageNumber)"> |
|||
<i class="fa fa-pencil" title="修改"></i> |
|||
</a> |
|||
#end |
|||
|
|||
#permission("/admin/product/delete") |
|||
<a data-delete |
|||
data-title="#escape(x.title)" |
|||
data-action="/admin/product/delete?id=#(x.id)"> |
|||
<i class="fa fa-trash" title="删除"></i> |
|||
</a> |
|||
#end |
|||
</td> |
|||
</tr> |
|||
#end |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div> |
|||
#@adminPaginate(productPage.pageNumber, productPage.totalPage, "/admin/product?p=") |
|||
</div> |
|||
</div> |
|||
</div><!-- END OF jfa-content --> |
|||
</div><!-- END OF jfa-content-box --> |
|||
|
|||
<style type="text/css"> |
|||
</style> |
|||
<script type="text/javascript"> |
|||
$(document).ready(function() { |
|||
initMagicInput(prepareAction); |
|||
}); |
|||
|
|||
function prepareAction($this, state) { |
|||
return { |
|||
url: state ? "/admin/project/lock" : "/admin/project/unlock", |
|||
data : { |
|||
id: $this.attr("data-id") |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
#end |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,244 @@ |
|||
#define officialLayout() |
|||
<!DOCTYPE html> |
|||
<html lang="zh-CN"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="x-ua-compatible" content="ie=edge" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> |
|||
<meta name="referrer" content="always"> |
|||
<meta name="keywords" content="#(seoKeywords ?? '贝塔网络')"> |
|||
<meta name="description" content="#(seoDescr ?? '贝塔网络官方网站')"> |
|||
<title>#(seoTitle ?? "贝塔网络官方网站")</title> |
|||
<link rel="shortcut icon" type="image/x-icon" href="/assets/img/favicon.ico"> |
|||
<!-- ========================= CSS here ========================= --> |
|||
<link rel="stylesheet" href="/assets/official/css/bootstrap.min.css" /> |
|||
<link rel="stylesheet" href="/assets/official/css/LineIcons.2.0.css" /> |
|||
<link rel="stylesheet" href="/assets/official/css/animate.css" /> |
|||
<link rel="stylesheet" href="/assets/official/css/tiny-slider.css" /> |
|||
<link rel="stylesheet" href="/assets/official/css/glightbox.min.css" /> |
|||
<link rel="stylesheet" href="/assets/official/css/main.css" /> |
|||
|
|||
#@css?() |
|||
</head> |
|||
|
|||
<!--如果不需要悬浮的header 就去掉body上的class--> |
|||
<body> |
|||
<!-- Preloader --> |
|||
<div class="preloader"> |
|||
<div class="preloader-inner"> |
|||
<div class="preloader-icon"> |
|||
<span></span> |
|||
<span></span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- /End Preloader --> |
|||
|
|||
<!-- Start header部分 --> |
|||
<header class="header navbar-area"> |
|||
<div class="container"> |
|||
<div class="row align-items-center"> |
|||
<div class="col-lg-12"> |
|||
<div class="nav-inner"> |
|||
<!-- Start Navbar --> |
|||
<nav class="navbar navbar-expand-lg"> |
|||
<a class="navbar-brand" href="#(SSL)/"> |
|||
<img src="/assets/official/images/logo/white-logo.png" alt="Logo"> |
|||
</a> |
|||
<button class="navbar-toggler mobile-menu-btn" type="button" data-bs-toggle="collapse" |
|||
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" |
|||
aria-expanded="false" aria-label="Toggle navigation"> |
|||
<span class="toggler-icon"></span> |
|||
<span class="toggler-icon"></span> |
|||
<span class="toggler-icon"></span> |
|||
</button> |
|||
<div class="collapse navbar-collapse sub-menu-bar" id="navbarSupportedContent"> |
|||
<ul id="nav" class="navbar-nav ms-auto"> |
|||
<li class="nav-item"> |
|||
<a href="#(SSL)/" class="active">首页</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a href="#(SSL)/product" >产品</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a href="#overview" class="page-scroll" |
|||
aria-label="Toggle navigation">Overview</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a href="#pricing" class="page-scroll" |
|||
aria-label="Toggle navigation">Pricing</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a href="#team" class="page-scroll" aria-label="Toggle navigation">Team</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="page-scroll dd-menu collapsed" href="#blog" data-bs-toggle="collapse" |
|||
data-bs-target="#submenu-1-4" aria-controls="navbarSupportedContent" |
|||
aria-expanded="false" aria-label="Toggle navigation">Blog</a> |
|||
<ul class="sub-menu collapse" id="submenu-1-4"> |
|||
<li class="nav-item"><a href="blog-grid-sidebar.html">Blog Grid Sidebar</a></li> |
|||
<li class="nav-item"><a href="blog-single.html">Blog Single</a></li> |
|||
<li class="nav-item"><a href="blog-single-sidebar.html">Blog Single |
|||
Sibebar</a></li> |
|||
</ul> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a href="contact.html" aria-label="Toggle navigation">Contact</a> |
|||
</li> |
|||
</ul> |
|||
</div> <!-- navbar collapse --> |
|||
#if(loginAccount) |
|||
<!--登录后用下面这个--> |
|||
<div class="button add-list-button"> |
|||
<a href="#(SSL)/my" class="btn">控制台</a> |
|||
</div> |
|||
#else |
|||
<!--没登录用这个--> |
|||
<div class="button add-list-button"> |
|||
<a href="#(SSL)/reg" class="btn">注册</a> |
|||
<a href="#(SSL)/login" class="btn">登录</a> |
|||
</div> |
|||
#end |
|||
|
|||
</nav> |
|||
<!-- End Navbar --> |
|||
</div> |
|||
</div> |
|||
</div> <!-- row --> |
|||
</div> <!-- container --> |
|||
</header> |
|||
<!-- End header部分 --> |
|||
|
|||
<!--主体内容--> |
|||
#@main() |
|||
|
|||
<!-- Start Footer Area --> |
|||
<footer class="footer"> |
|||
<!-- Start Footer Top --> |
|||
<div class="footer-top"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-lg-4 col-md-4 col-12"> |
|||
<!-- Single Widget --> |
|||
<div class="single-footer f-about"> |
|||
<div class="logo"> |
|||
<a href="#(SSL)/"> |
|||
<img src="/assets/official/images/logo/white-logo.png" alt="#"> |
|||
</a> |
|||
</div> |
|||
<p>Making the world a better place through constructing elegant hierarchies.</p> |
|||
<ul class="social"> |
|||
<li><a href="javascript:void(0)"><i class="lni lni-facebook-filled"></i></a></li> |
|||
<li><a href="javascript:void(0)"><i class="lni lni-twitter-original"></i></a></li> |
|||
<li><a href="javascript:void(0)"><i class="lni lni-instagram"></i></a></li> |
|||
<li><a href="javascript:void(0)"><i class="lni lni-linkedin-original"></i></a></li> |
|||
<li><a href="javascript:void(0)"><i class="lni lni-youtube"></i></a></li> |
|||
<li><a href="javascript:void(0)"><i class="lni lni-pinterest"></i></a></li> |
|||
</ul> |
|||
<p class="copyright-text"><a target="_blank" href="http://www.mobanwang.com/" title="网页模板">网页模板</a> |
|||
</p> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
</div> |
|||
<div class="col-lg-8 col-md-8 col-12"> |
|||
<div class="row"> |
|||
<div class="col-lg-3 col-md-6 col-12"> |
|||
<!-- Single Widget --> |
|||
<div class="single-footer f-link"> |
|||
<h3>Solutions</h3> |
|||
<ul> |
|||
<li><a href="javascript:void(0)">Marketing</a></li> |
|||
<li><a href="javascript:void(0)">Analytics</a></li> |
|||
<li><a href="javascript:void(0)">Commerce</a></li> |
|||
<li><a href="javascript:void(0)">Insights</a></li> |
|||
<li><a href="javascript:void(0)">Promotion</a></li> |
|||
</ul> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
</div> |
|||
<div class="col-lg-3 col-md-6 col-12"> |
|||
<!-- Single Widget --> |
|||
<div class="single-footer f-link"> |
|||
<h3>Support</h3> |
|||
<ul> |
|||
<li><a href="javascript:void(0)">Pricing</a></li> |
|||
<li><a href="javascript:void(0)">Documentation</a></li> |
|||
<li><a href="javascript:void(0)">Guides</a></li> |
|||
<li><a href="javascript:void(0)">API Status</a></li> |
|||
<li><a href="javascript:void(0)">Live Support</a></li> |
|||
</ul> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
</div> |
|||
<div class="col-lg-3 col-md-6 col-12"> |
|||
<!-- Single Widget --> |
|||
<div class="single-footer f-link"> |
|||
<h3>Company</h3> |
|||
<ul> |
|||
<li><a href="javascript:void(0)">About Us</a></li> |
|||
<li><a href="javascript:void(0)">Our Blog</a></li> |
|||
<li><a href="javascript:void(0)">Jobs</a></li> |
|||
<li><a href="javascript:void(0)">Press</a></li> |
|||
<li><a href="javascript:void(0)">Contact Us</a></li> |
|||
</ul> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
</div> |
|||
<div class="col-lg-3 col-md-6 col-12"> |
|||
<!-- Single Widget --> |
|||
<div class="single-footer f-link"> |
|||
<h3>Legal</h3> |
|||
<ul> |
|||
<li><a href="javascript:void(0)">Terms & Conditions</a></li> |
|||
<li><a href="javascript:void(0)">Privacy Policy</a></li> |
|||
<li><a href="javascript:void(0)">Catering Services</a></li> |
|||
<li><a href="javascript:void(0)">Customer Relations</a></li> |
|||
<li><a href="javascript:void(0)">Innovation</a></li> |
|||
</ul> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!--/ End Footer Top --> |
|||
<!-- Start Footer Newsletter --> |
|||
<div class="footer-newsletter"> |
|||
<div class="container"> |
|||
<div class="inner-content"> |
|||
<div class="row align-items-center"> |
|||
<div class="col-lg-6 col-md-5 col-12"> |
|||
<div class="title"> |
|||
<h3>Subscribe to our newsletter</h3> |
|||
<p>The latest news, articles, and resources, sent to your inbox weekly.</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-6 col-md-7 col-12"> |
|||
<div class="form"> |
|||
<form action="#" method="get" target="_blank" class="newsletter-form"> |
|||
<input name="EMAIL" placeholder="Your email address" type="email"> |
|||
<div class="button"> |
|||
<button class="btn">Subscribe<span class="dir-part"></span></button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- End Footer Newsletter --> |
|||
</footer> |
|||
<!--/ End Footer Area --> |
|||
|
|||
<!-- ========================= 回到顶部 ========================= --> |
|||
<a href="#" class="scroll-top"> |
|||
<i class="lni lni-chevron-up"></i> |
|||
</a> |
|||
|
|||
#@js?() |
|||
</body> |
|||
</html> |
|||
#end |
|||
@ -0,0 +1,120 @@ |
|||
#set(seoTitle="JFinal 极速开发官方社区") |
|||
#@layout() |
|||
#define main() |
|||
<div class="col jf-page-main jf-pdl0"> |
|||
|
|||
### 首页轮播广告 |
|||
#include("_carousel.html") |
|||
### 分享 |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<a class="jf-more" href="/share">更多»</a> |
|||
<h1>分享</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<div class="jf-common-list"> |
|||
|
|||
#for(x : shareList) |
|||
<div class="jf-common-item"> |
|||
<div class="row"> |
|||
<a href="/user/#(x.accountId)" class="jf-common-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<div class="col"> |
|||
<div class="jf-common-name"><a href="/share/#(x.id)">#(x.title)</a></div> |
|||
<p class="jf-common-other text-gray"> |
|||
<span class="pull-left">#date(x.createAt)</span> |
|||
### <span><i class="fa fa-eye"></i> #(x.clickCount)</span> |
|||
<span style="text-align: right;"><i class="fa fa-thumbs-o-up"></i> #(x.likeCount)</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
#end |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
### 反馈 |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<a class="jf-more" href="/feedback">更多»</a> |
|||
<h1>反馈</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<div class="jf-common-list"> |
|||
|
|||
#for(x : feedbackList) |
|||
<div class="jf-common-item"> |
|||
<div class="row"> |
|||
<a href="/user/#(x.accountId)" class="jf-common-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<div class="col"> |
|||
<div class="jf-common-name"><a href="/feedback/#(x.id)">#(x.title)</a></div> |
|||
<p class="jf-common-other text-gray"> |
|||
<span class="pull-left">#date(x.createAt)</span> |
|||
### <span><i class="fa fa-eye"></i> #(x.clickCount)</span> |
|||
<span style="text-align: right;"><i class="fa fa-thumbs-o-up"></i> #(x.likeCount)</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
#end |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
### 项目 |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<a class="jf-more" href="/project">更多»</a> |
|||
<h1>项目</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<!--项目列表 start--> |
|||
<div class="jf-project-list"> |
|||
|
|||
#setLocal(i=0, j=0) |
|||
#for(x : projectList) |
|||
#if(for.first || ++i % 4 == 0) |
|||
<div class="row"> |
|||
#end |
|||
<div class="col-3"> |
|||
<div class="jf-project-item jf-transition "> |
|||
<a href="/project/#(x.id)" class="jf-project-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<h1 class="jf-project-name"> |
|||
<a href="/project/#(x.id)">#(x.title)</a> |
|||
</h1> |
|||
|
|||
#-- |
|||
<p class="jf-project-info"> |
|||
###<span><i class="fa fa-eye"></i> 305</span> |
|||
<span><i class="fa fa-star-o"></i> 25</span> |
|||
<span><i class="fa fa-thumbs-o-up"></i> 99</span> |
|||
</p> |
|||
--# |
|||
|
|||
</div> |
|||
</div> |
|||
#if(for.last || ++j % 4 == 0) |
|||
</div> |
|||
#end |
|||
#end |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
|
|||
|
|||
</div> |
|||
|
|||
<!-- 包含侧边栏文件 --> |
|||
#include("_sidebar.html") |
|||
#end |
|||
@ -1,120 +1,113 @@ |
|||
#set(seoTitle="JFinal 极速开发官方社区") |
|||
#@layout() |
|||
#set(seoTitle="贝塔网络官方网站") |
|||
#@officialLayout() |
|||
#define main() |
|||
<div class="col jf-page-main jf-pdl0"> |
|||
|
|||
### 首页轮播广告 |
|||
#include("_carousel.html") |
|||
### 分享 |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<a class="jf-more" href="/share">更多»</a> |
|||
<h1>分享</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<div class="jf-common-list"> |
|||
|
|||
#for(x : shareList) |
|||
<div class="jf-common-item"> |
|||
<div class="row"> |
|||
<a href="/user/#(x.accountId)" class="jf-common-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<div class="col"> |
|||
<div class="jf-common-name"><a href="/share/#(x.id)">#(x.title)</a></div> |
|||
<p class="jf-common-other text-gray"> |
|||
<span class="pull-left">#date(x.createAt)</span> |
|||
### <span><i class="fa fa-eye"></i> #(x.clickCount)</span> |
|||
<span style="text-align: right;"><i class="fa fa-thumbs-o-up"></i> #(x.likeCount)</span> |
|||
</p> |
|||
<!-- Start Hero Area --> |
|||
<section id="home" class="hero-area"> |
|||
<div class="container"> |
|||
<div class="row align-items-center"> |
|||
<div class="col-lg-5 col-md-12 col-12"> |
|||
<div class="hero-content"> |
|||
<h1 class="wow fadeInLeft" data-wow-delay=".4s">Powerful solutions for your startup.</h1> |
|||
<p class="wow fadeInLeft" data-wow-delay=".6s">We are a digital agency that helps brands to |
|||
achieve their business outcomes. We see technology as a tool to create amazing things.</p> |
|||
<div class="button wow fadeInLeft" data-wow-delay=".8s"> |
|||
<a href="contact.html" class="btn">Get Started</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
#end |
|||
|
|||
<div class="col-lg-7 col-md-12 col-12"> |
|||
<div class="hero-image wow fadeInRight" data-wow-delay=".4s"> |
|||
<img src="https://quick.bootmb.com/assets/img/svg/illustrations/illustration-3.svg" alt="#"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
### 反馈 |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<a class="jf-more" href="/feedback">更多»</a> |
|||
<h1>反馈</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<div class="jf-common-list"> |
|||
|
|||
#for(x : feedbackList) |
|||
<div class="jf-common-item"> |
|||
<div class="row"> |
|||
<a href="/user/#(x.accountId)" class="jf-common-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<div class="col"> |
|||
<div class="jf-common-name"><a href="/feedback/#(x.id)">#(x.title)</a></div> |
|||
<p class="jf-common-other text-gray"> |
|||
<span class="pull-left">#date(x.createAt)</span> |
|||
### <span><i class="fa fa-eye"></i> #(x.clickCount)</span> |
|||
<span style="text-align: right;"><i class="fa fa-thumbs-o-up"></i> #(x.likeCount)</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- End Hero Area --> |
|||
#end |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
### 项目 |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<a class="jf-more" href="/project">更多»</a> |
|||
<h1>项目</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<!--项目列表 start--> |
|||
<div class="jf-project-list"> |
|||
|
|||
#setLocal(i=0, j=0) |
|||
#for(x : projectList) |
|||
#if(for.first || ++i % 4 == 0) |
|||
<div class="row"> |
|||
#end |
|||
<div class="col-3"> |
|||
<div class="jf-project-item jf-transition "> |
|||
<a href="/project/#(x.id)" class="jf-project-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<h1 class="jf-project-name"> |
|||
<a href="/project/#(x.id)">#(x.title)</a> |
|||
</h1> |
|||
|
|||
#-- |
|||
<p class="jf-project-info"> |
|||
###<span><i class="fa fa-eye"></i> 305</span> |
|||
<span><i class="fa fa-star-o"></i> 25</span> |
|||
<span><i class="fa fa-thumbs-o-up"></i> 99</span> |
|||
</p> |
|||
--# |
|||
|
|||
</div> |
|||
</div> |
|||
#if(for.last || ++j % 4 == 0) |
|||
</div> |
|||
#end |
|||
#end |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
|
|||
|
|||
</div> |
|||
|
|||
<!-- 包含侧边栏文件 --> |
|||
#include("_sidebar.html") |
|||
#define js() |
|||
<!-- ========================= JS here ========================= --> |
|||
<script src="/assets/official/js/bootstrap.min.js"></script> |
|||
<script src="/assets/official/js/wow.min.js"></script> |
|||
<script src="/assets/official/js/tiny-slider.js"></script> |
|||
<script src="/assets/official/js/glightbox.min.js"></script> |
|||
<script src="/assets/official/js/count-up.min.js"></script> |
|||
<script src="/assets/official/js/main.js"></script> |
|||
<script type="text/javascript"> |
|||
//======== tiny slider |
|||
tns({ |
|||
container: '.client-logo-carousel', |
|||
autoplay: true, |
|||
autoplayButtonOutput: false, |
|||
mouseDrag: true, |
|||
gutter: 15, |
|||
nav: false, |
|||
controls: false, |
|||
responsive: { |
|||
0: { |
|||
items: 1, |
|||
}, |
|||
540: { |
|||
items: 2, |
|||
}, |
|||
768: { |
|||
items: 3, |
|||
}, |
|||
992: { |
|||
items: 4, |
|||
} |
|||
} |
|||
}); |
|||
|
|||
//========= testimonial |
|||
tns({ |
|||
container: '.testimonial-slider', |
|||
items: 3, |
|||
slideBy: 'page', |
|||
autoplay: false, |
|||
mouseDrag: true, |
|||
gutter: 0, |
|||
nav: true, |
|||
controls: false, |
|||
controlsText: ['<i class="lni lni-arrow-left"></i>', '<i class="lni lni-arrow-right"></i>'], |
|||
responsive: { |
|||
0: { |
|||
items: 1, |
|||
}, |
|||
540: { |
|||
items: 1, |
|||
}, |
|||
768: { |
|||
items: 1, |
|||
}, |
|||
992: { |
|||
items: 1, |
|||
}, |
|||
1170: { |
|||
items: 1, |
|||
} |
|||
} |
|||
}); |
|||
|
|||
//========= glightbox |
|||
GLightbox({ |
|||
'href': '#', |
|||
'type': 'video', |
|||
'source': 'youtube', //vimeo, youtube or local |
|||
'width': 900, |
|||
'autoplayVideos': true, |
|||
}); |
|||
|
|||
//====== counter up |
|||
var cu = new counterUp({ |
|||
start: 0, |
|||
duration: 2000, |
|||
intvalues: true, |
|||
interval: 100, |
|||
append: " ", |
|||
}); |
|||
cu.start(); |
|||
</script> |
|||
#end |
|||
@ -0,0 +1,21 @@ |
|||
<footer> |
|||
<div class="footer clearfix mb-0 text-muted"> |
|||
<div class="float-start"> |
|||
<p>©2023 <span class="text-danger"><i class="bi bi-heart-fill icon-mid"></i></span><a href="https://bt.plus">沈阳市贝塔网络科技有限公司</a></p> |
|||
</div> |
|||
<div class="float-end"> |
|||
<p> |
|||
<a target="_blank" rel="nofollow" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=21010602000856"> |
|||
<img src="https://www.bt.plus/static/gongan.png"><span>辽公网安备21010602000856号</span> |
|||
</a> |
|||
<a target="_blank" rel="nofollow" href="https://beian.miit.gov.cn/"> |
|||
<span>辽ICP备2023007510号</span> |
|||
</a> |
|||
<a rel="nofollow"> |
|||
<span>电信业务经营许可证:B1-20235979</span> |
|||
</a> |
|||
|
|||
</p> |
|||
</div> |
|||
</div> |
|||
</footer> |
|||
@ -1,159 +1,31 @@ |
|||
<!--侧边栏--> |
|||
<div class="bsa-sidebar"> |
|||
<!-- 侧边栏头部部分(展示品牌logo) --> |
|||
<div class="bsa-sidebar-header"> |
|||
<img src="/assets/img/bt-logo-32x32.png" class="bsa-logo-icon" alt="logo-icon"> |
|||
<div class="bsa-logo-text ms-2 bsa-ellipsis-2">贝塔网络BT控制台</div> |
|||
</div> |
|||
<!-- 侧边栏的身体部分 --> |
|||
<div class="bsa-sidebar-body" data-overlayscrollbars-initialize> |
|||
<!-- 侧边栏的菜单 --> |
|||
<ul class="bsa-menu" data-bsa-toggle="sidebar" data-accordion="true" data-click-close="true"> |
|||
<li> |
|||
<a href="/my/welcome"> |
|||
<i class="bi bi-house"></i>首页 |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/order.html"> |
|||
<i class="bi bi-credit-card"></i>充值中心 |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a href="/product" target="_blank"> |
|||
<i class="bi bi-bag-fill"></i>自助下单 |
|||
<div class="sidebar-menu"> |
|||
<ul class="menu"> |
|||
<li class="sidebar-item #(sidebar == 'my' ? 'active' : '')" > |
|||
<a href="/my" class='sidebar-link'> |
|||
<i class="bi bi-grid-fill"></i> |
|||
<span>首页</span> |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a href="/my/order"> |
|||
<i class="bi bi-border-width"></i>订单列表 |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/order.html"> |
|||
<i class="bi bi-pc-horizontal"></i>设备管理 |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children"> |
|||
<i class="bi bi-gear"></i>个人设置 |
|||
</a> |
|||
<ul> |
|||
<li><a href="/my/setting/realName">实名认知</a></li> |
|||
<li><a href="pages/sys_website.html">网站设置</a></li> |
|||
<li><a href="pages/sys_email.html">邮箱设置</a></li> |
|||
</ul> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children"> |
|||
<i class="bi bi-person-lock"></i>权限管理 |
|||
</a> |
|||
<ul> |
|||
<li> |
|||
<a href="pages/user.html">用户列表</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/user2">用户列表(多部门版)</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/role.html">角色列表</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/node.html">节点列表</a> |
|||
</li> |
|||
</ul> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children"> |
|||
<i class="bi bi-filetype-html"></i>示例页面 |
|||
<li class="sidebar-item #(sidebar == 'order' ? 'active' : '')" > |
|||
<a href="/my/order" class='sidebar-link'> |
|||
<i class="bi bi-grid-fill"></i> |
|||
<span>我的订单</span> |
|||
</a> |
|||
<ul> |
|||
<li> |
|||
<a href="pages/blank.html">新页面</a> |
|||
</li> |
|||
<li> |
|||
<!-- target="_self":添加该属性可以让该页面不从tab页面里打开 --> |
|||
<a href="pages/lockscreen.html" target="_self">锁屏页</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/gallery.html">图库列表</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/errors.html">错误页面</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/login.html" target="_self">登录页面</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/timeline.html">时间轴</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/layout1.html">布局示例1</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/layout2.html">布局示例2</a> |
|||
</li> |
|||
<li> |
|||
<a href="pages/layout3.html">布局示例3</a> |
|||
</li> |
|||
</ul> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children"> |
|||
<i class="bi bi-filetype-js"></i>插件 |
|||
<li class="sidebar-item has-sub #(sidebar == 'setting' ? 'active' : '')"> |
|||
<a href="#" class='sidebar-link'> |
|||
<i class="bi bi-person-circle"></i> |
|||
<span>账户设置</span> |
|||
</a> |
|||
<ul> |
|||
<li><a href="pages/plugin-day.js.html">day.js(时间格式)</a></li> |
|||
<li><a href="pages/plugin-clipboard.html">复制粘贴插件</a></li> |
|||
<li><a href="pages/plugin-shepherd.html">更新引导插件</a></li> |
|||
<li><a href="pages/plugin-fullcalendar.html">日历</a></li> |
|||
<li><a href="pages/plugin-video-js.html">视频播放器</a></li> |
|||
<li><a href="pages/plugin-pickr.html">颜色选择器</a></li> |
|||
<li><a href="pages/plugin-raty-js.html">评分插件</a></li> |
|||
<li><a href="pages/plugin-bootstrap-input-spinner.html">输入框微调插件</a></li> |
|||
<li><a href="pages/plugin-bs-stepper.html">步骤条插件</a></li> |
|||
<li><a href="pages/plugin-sweetalert2.html">sweetalert2</a></li> |
|||
<li><a href="pages/plugin-formvalidation.html">表单验证</a></li> |
|||
<li><a href="pages/plugin-tempus-dominus.html">日期时间</a></li> |
|||
<li><a href="pages/plugin-croppie.html">头像裁剪</a></li> |
|||
<li> |
|||
<a href="javascript:" class="has-children">树形组件</a> |
|||
<ul> |
|||
<li><a href="pages/plugin-ztree.html">ztree</a></li> |
|||
</ul> |
|||
<ul class="submenu #(sidebar == 'setting' ? 'active' : '')"> |
|||
<li class="submenu-item #(sidebar == 'realName' ? 'active' : '')"> |
|||
<a href="/my/setting/realName" class="submenu-link">实名认证</a> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children">图表</a> |
|||
<ul> |
|||
<li><a href="pages/plugin-chart.html">chart.js</a></li> |
|||
<li><a href="pages/plugin-echarts.html">echart.js</a></li> |
|||
</ul> |
|||
<li class="submenu-item "> |
|||
<a href="account-security.html" class="submenu-link">Security</a> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children">数据表格</a> |
|||
<ul> |
|||
<li><a href="pages/plugin-bootstrap-table.html">bootstrap-table</a></li> |
|||
<li><a href="pages/plugin-datatables.html">datatables</a></li> |
|||
</ul> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children">编辑器</a> |
|||
<ul> |
|||
<li><a href="pages/plugin-wangeditor.html">wangeditor</a></li> |
|||
|
|||
</ul> |
|||
</li> |
|||
<li> |
|||
<a href="javascript:" class="has-children">文件上传</a> |
|||
<ul> |
|||
<li><a href="pages/plugin-bootstrap-fileinput.html">bootstrap-fileinput</a></li> |
|||
<li><a href="pages/plugin-dropzone.html">dropzone</a></li> |
|||
</ul> |
|||
</li> |
|||
<li><a href="pages/plugin-select2.html">select2</a></li> |
|||
<li><a href="pages/plugin-bootstrap-select.html">bootstrap-select</a></li> |
|||
<li><a href="pages/plugin-fonticonpicker.html">图标选择器</a></li> |
|||
</ul> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
@ -1,179 +1,330 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="zh-CN"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> |
|||
<meta name="keywords" content="#(seoKeywords ?? 'bt科技,贝塔科技,贝塔网络')"> |
|||
<meta name="description" content="#(seoDescr ?? '贝塔网络官方网站')"> |
|||
<title>贝塔网络用户面板</title> |
|||
<meta name="author" content="bt.plus"> |
|||
<link rel="stylesheet" href="/assets/lib/bootstrap-icons/font/bootstrap-icons.min.css"> |
|||
<link rel="stylesheet" href="/assets/lib/bootstrap/dist/css/bootstrap.min.css"> |
|||
<link rel="stylesheet" href="/assets/lib/overlayscrollbars/styles/overlayscrollbars.min.css"> |
|||
<link rel="stylesheet" href="/assets/b5/css/bootstrap-admin.min.css"> |
|||
<link rel="shortcut icon" type="image/x-icon" href="/assets/img/favicon.ico"> |
|||
</head> |
|||
<body data-theme="light"> |
|||
<!--头部导航--> |
|||
<ul class="bsa-header"> |
|||
<!-- 侧边栏触发按钮(移动端时显示) --> |
|||
<li class="bsa-sidebar-toggler" data-bsa-toggle="pushmenu"> |
|||
<div class="bsa-header-item"> |
|||
<i class="bi bi-list"></i> |
|||
</div> |
|||
</li> |
|||
<!-- 占位(可以让后面的li居右) --> |
|||
<li class="flex-grow-1"></li> |
|||
<!-- 通知(如果有新消息则添加类名.bsa-has-msg) --> |
|||
<li> |
|||
<div class="bsa-header-item" data-qt-tab='{"title":"消息中心","url":"pages/message.html"}' |
|||
data-qt-target=".qtab"> |
|||
<i class="bi bi-bell bsa-has-msg"></i> |
|||
</div> |
|||
</li> |
|||
<!-- 全屏 --> |
|||
<li class="bsa-fullscreen-toggler"> |
|||
<div class="bsa-header-item"> |
|||
<i class="bi bi-arrows-fullscreen"></i> |
|||
</div> |
|||
</li> |
|||
<!-- 主题配色 --> |
|||
<li class="dropdown"> |
|||
<div class="bsa-header-item" data-bs-toggle="dropdown" data-bs-auto-close="outside"> |
|||
<i class="bi bi-palette"></i> |
|||
</div> |
|||
<div class="dropdown-menu dropdown-menu-end p-0"> |
|||
<div class="card shadow-sm"> |
|||
<div class="card-header d-flex justify-content-between bg-body"> |
|||
<span class="bsa-fs-15">主题配色</span> |
|||
#set(seoTitle="贝塔网络欢迎页") |
|||
#@b5Layout() |
|||
#define menu() |
|||
#include("_left_menu.html" , sidebar="my", submenu="") |
|||
#end |
|||
#define main() |
|||
<div id="main"> |
|||
<header class="mb-3"> |
|||
<a href="#" class="burger-btn d-block d-xl-none"> |
|||
<i class="bi bi-justify fs-3"></i> |
|||
</a> |
|||
</header> |
|||
<div class="page-heading"> |
|||
<h3>贝塔网络用户面板</h3> |
|||
</div> |
|||
<div class="page-content"> |
|||
<section class="row"> |
|||
<div class="col-12 col-lg-9"> |
|||
<div class="row"> |
|||
<div class="col-6 col-lg-3 col-md-6"> |
|||
<div class="card"> |
|||
<div class="card-body px-4 py-4-5"> |
|||
<div class="row"> |
|||
<div class="col-md-4 col-lg-12 col-xl-12 col-xxl-5 d-flex justify-content-start "> |
|||
<div class="stats-icon purple mb-2"> |
|||
<i class="iconly-boldShow"></i> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-8 col-lg-12 col-xl-12 col-xxl-7"> |
|||
<h6 class="text-muted font-semibold">Profile Views</h6> |
|||
<h6 class="font-extrabold mb-0">112.000</h6> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-6 col-lg-3 col-md-6"> |
|||
<div class="card"> |
|||
<div class="card-body px-4 py-4-5"> |
|||
<div class="row"> |
|||
<div class="col-md-4 col-lg-12 col-xl-12 col-xxl-5 d-flex justify-content-start "> |
|||
<div class="stats-icon blue mb-2"> |
|||
<i class="iconly-boldProfile"></i> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-8 col-lg-12 col-xl-12 col-xxl-7"> |
|||
<h6 class="text-muted font-semibold">Followers</h6> |
|||
<h6 class="font-extrabold mb-0">183.000</h6> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-6 col-lg-3 col-md-6"> |
|||
<div class="card"> |
|||
<div class="card-body px-4 py-4-5"> |
|||
<div class="row"> |
|||
<div class="col-md-4 col-lg-12 col-xl-12 col-xxl-5 d-flex justify-content-start "> |
|||
<div class="stats-icon green mb-2"> |
|||
<i class="iconly-boldAdd-User"></i> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-8 col-lg-12 col-xl-12 col-xxl-7"> |
|||
<h6 class="text-muted font-semibold">Following</h6> |
|||
<h6 class="font-extrabold mb-0">80.000</h6> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-6 col-lg-3 col-md-6"> |
|||
<div class="card"> |
|||
<div class="card-body px-4 py-4-5"> |
|||
<div class="row"> |
|||
<div class="col-md-4 col-lg-12 col-xl-12 col-xxl-5 d-flex justify-content-start "> |
|||
<div class="stats-icon red mb-2"> |
|||
<i class="iconly-boldBookmark"></i> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-8 col-lg-12 col-xl-12 col-xxl-7"> |
|||
<h6 class="text-muted font-semibold">Saved Post</h6> |
|||
<h6 class="font-extrabold mb-0">112</h6> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
<h4>Profile Visit</h4> |
|||
</div> |
|||
<div class="card-body"> |
|||
<!-- 配色包裹 --> |
|||
<div class="bsa-theme-switcher-wrapper"> |
|||
<input class="form-check-input" type="checkbox" value="light"> |
|||
<input class="form-check-input" type="checkbox" value="dark"> |
|||
<input class="form-check-input" type="checkbox" value="indigo"> |
|||
<input class="form-check-input" type="checkbox" value="green"> |
|||
<input class="form-check-input" type="checkbox" value="blue"> |
|||
<input class="form-check-input" type="checkbox" value="yellow"> |
|||
<input class="form-check-input" type="checkbox" value="pink"> |
|||
<input class="form-check-input" type="checkbox" value="red"> |
|||
<input class="form-check-input" type="checkbox" value="orange"> |
|||
<input class="form-check-input" type="checkbox" value="cyan"> |
|||
<input class="form-check-input" type="checkbox" value="teal"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</li> |
|||
<!-- 管理员信息 --> |
|||
<li class="dropdown"> |
|||
<div class="bsa-header-item" data-bs-toggle="dropdown"> |
|||
<div class="bsa-user-area"> |
|||
<img src="/upload/avatar/#(loginAccount.avatar)" class="bsa-user-avatar" alt="用户头像"> |
|||
<div class="bsa-user-details"> |
|||
<div class="bsa-ellipsis-1 bsa-fs-15">欲饮琵琶码上催</div> |
|||
<!-- 管理员角色RBAC权限设计时可用(不需要可删除,上面的用户名可自动垂直居中) --> |
|||
<div class="bsa-ellipsis-1 bsa-fs-13 text-muted">超级管理员</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<ul class="dropdown-menu dropdown-menu-end"> |
|||
<li> |
|||
<a class="dropdown-item" href="javascript:" |
|||
data-qt-tab='{"title":"个人资料","url":"#(SSL)/pages/profile.html"}' |
|||
data-qt-target=".qtab"> |
|||
<i class="bi bi-person me-2"></i>个人资料 |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a class="dropdown-item bsa-clear-cache" href="javascript:" |
|||
data-qt-tab='{"title":"修改密码","url":"#(SSL)/pages/password.html"}' |
|||
data-qt-target=".qtab"> |
|||
<i class="bi bi-key me-2"></i>修改密码 |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<div class="dropdown-divider"></div> |
|||
</li> |
|||
<li class="bsa-logout"><a class="dropdown-item" href="javascript:"><i |
|||
class="bi bi-box-arrow-right me-2"></i>退出登录</a> |
|||
</li> |
|||
</ul> |
|||
</li> |
|||
</ul> |
|||
<!--header部分结束--> |
|||
#include("_left_menu.html") |
|||
|
|||
<!--内容区域(用于tab选项卡插件)--> |
|||
<div class="bsa-content"> |
|||
<div class="qtab" data-qt-tabs='[{"title":"首页","url":"/my/welcome","close":false}]'></div> |
|||
<div id="chart-profile-visit"></div> |
|||
</div> |
|||
|
|||
<!--版权信息--> |
|||
<div class="bsa-footer"> |
|||
<p class="mb-0">Copyright © 2023. All right reserved.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-12 col-xl-4"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
<h4>Profile Visit</h4> |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="row"> |
|||
<div class="col-7"> |
|||
<div class="d-flex align-items-center"> |
|||
<svg class="bi text-primary" width="32" height="32" fill="blue" |
|||
style="width:10px"> |
|||
<use |
|||
xlink:href="assets/static/images/bootstrap-icons.svg#circle-fill" /> |
|||
</svg> |
|||
<h5 class="mb-0 ms-3">Europe</h5> |
|||
</div> |
|||
</div> |
|||
<div class="col-5"> |
|||
<h5 class="mb-0 text-end">862</h5> |
|||
</div> |
|||
<div class="col-12"> |
|||
<div id="chart-europe"></div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-7"> |
|||
<div class="d-flex align-items-center"> |
|||
<svg class="bi text-success" width="32" height="32" fill="blue" |
|||
style="width:10px"> |
|||
<use |
|||
xlink:href="assets/static/images/bootstrap-icons.svg#circle-fill" /> |
|||
</svg> |
|||
<h5 class="mb-0 ms-3">America</h5> |
|||
</div> |
|||
</div> |
|||
<div class="col-5"> |
|||
<h5 class="mb-0 text-end">375</h5> |
|||
</div> |
|||
<div class="col-12"> |
|||
<div id="chart-america"></div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-7"> |
|||
<div class="d-flex align-items-center"> |
|||
<svg class="bi text-success" width="32" height="32" fill="blue" |
|||
style="width:10px"> |
|||
<use |
|||
xlink:href="assets/static/images/bootstrap-icons.svg#circle-fill" /> |
|||
</svg> |
|||
<h5 class="mb-0 ms-3">India</h5> |
|||
</div> |
|||
</div> |
|||
<div class="col-5"> |
|||
<h5 class="mb-0 text-end">625</h5> |
|||
</div> |
|||
<div class="col-12"> |
|||
<div id="chart-india"></div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-7"> |
|||
<div class="d-flex align-items-center"> |
|||
<svg class="bi text-danger" width="32" height="32" fill="blue" |
|||
style="width:10px"> |
|||
<use |
|||
xlink:href="assets/static/images/bootstrap-icons.svg#circle-fill" /> |
|||
</svg> |
|||
<h5 class="mb-0 ms-3">Indonesia</h5> |
|||
</div> |
|||
</div> |
|||
<div class="col-5"> |
|||
<h5 class="mb-0 text-end">1025</h5> |
|||
</div> |
|||
<div class="col-12"> |
|||
<div id="chart-indonesia"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-12 col-xl-8"> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
<h4>Latest Comments</h4> |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="table-responsive"> |
|||
<table class="table table-hover table-lg"> |
|||
<thead> |
|||
<tr> |
|||
<th>Name</th> |
|||
<th>Comment</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td class="col-3"> |
|||
<div class="d-flex align-items-center"> |
|||
<div class="avatar avatar-md"> |
|||
<img src="./assets/compiled/jpg/5.jpg"> |
|||
</div> |
|||
<p class="font-bold ms-3 mb-0">Si Cantik</p> |
|||
</div> |
|||
</td> |
|||
<td class="col-auto"> |
|||
<p class=" mb-0">Congratulations on your graduation!</p> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td class="col-3"> |
|||
<div class="d-flex align-items-center"> |
|||
<div class="avatar avatar-md"> |
|||
<img src="./assets/compiled/jpg/2.jpg"> |
|||
</div> |
|||
<p class="font-bold ms-3 mb-0">Si Ganteng</p> |
|||
</div> |
|||
</td> |
|||
<td class="col-auto"> |
|||
<p class=" mb-0">Wow amazing design! Can you make another tutorial for |
|||
this design?</p> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td class="col-3"> |
|||
<div class="d-flex align-items-center"> |
|||
<div class="avatar avatar-md"> |
|||
<img src="./assets/compiled/jpg/8.jpg"> |
|||
</div> |
|||
<p class="font-bold ms-3 mb-0">Singh Eknoor</p> |
|||
</div> |
|||
</td> |
|||
<td class="col-auto"> |
|||
<p class=" mb-0">What a stunning design! You are so talented and creative!</p> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td class="col-3"> |
|||
<div class="d-flex align-items-center"> |
|||
<div class="avatar avatar-md"> |
|||
<img src="./assets/compiled/jpg/3.jpg"> |
|||
</div> |
|||
<p class="font-bold ms-3 mb-0">Rani Jhadav</p> |
|||
</div> |
|||
</td> |
|||
<td class="col-auto"> |
|||
<p class=" mb-0">I love your design! It’s so beautiful and unique! How did you learn to do this?</p> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-12 col-lg-3"> |
|||
<div class="card"> |
|||
<div class="card-body py-4 px-4"> |
|||
<div class="d-flex align-items-center"> |
|||
<div class="avatar avatar-xl"> |
|||
<img src="./assets/compiled/jpg/1.jpg" alt="Face 1"> |
|||
</div> |
|||
<div class="ms-3 name"> |
|||
<h5 class="font-bold">John Duck</h5> |
|||
<h6 class="text-muted mb-0">@johnducky</h6> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
<h4>Recent Messages</h4> |
|||
</div> |
|||
<div class="card-content pb-4"> |
|||
<div class="recent-message d-flex px-4 py-3"> |
|||
<div class="avatar avatar-lg"> |
|||
<img src="./assets/compiled/jpg/4.jpg"> |
|||
</div> |
|||
<div class="name ms-4"> |
|||
<h5 class="mb-1">Hank Schrader</h5> |
|||
<h6 class="text-muted mb-0">@johnducky</h6> |
|||
</div> |
|||
</div> |
|||
<div class="recent-message d-flex px-4 py-3"> |
|||
<div class="avatar avatar-lg"> |
|||
<img src="./assets/compiled/jpg/5.jpg"> |
|||
</div> |
|||
<div class="name ms-4"> |
|||
<h5 class="mb-1">Dean Winchester</h5> |
|||
<h6 class="text-muted mb-0">@imdean</h6> |
|||
</div> |
|||
</div> |
|||
<div class="recent-message d-flex px-4 py-3"> |
|||
<div class="avatar avatar-lg"> |
|||
<img src="./assets/compiled/jpg/1.jpg"> |
|||
</div> |
|||
<div class="name ms-4"> |
|||
<h5 class="mb-1">John Dodol</h5> |
|||
<h6 class="text-muted mb-0">@dodoljohn</h6> |
|||
</div> |
|||
</div> |
|||
<div class="px-4"> |
|||
<button class='btn btn-block btn-xl btn-outline-primary font-bold mt-3'>Start Conversation</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="card"> |
|||
<div class="card-header"> |
|||
<h4>Visitors Profile</h4> |
|||
</div> |
|||
<div class="card-body"> |
|||
<div id="chart-visitors-profile"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
#include("_footer.html") |
|||
</div> |
|||
#end |
|||
|
|||
<!--加载层--> |
|||
<div class="bsa-preloader"> |
|||
<div class="spinner-border text-secondary" role="status"> |
|||
<span class="visually-hidden">Loading...</span> |
|||
</div> |
|||
</div> |
|||
<script src="/assets/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> |
|||
<script src="/assets/lib/jquery/dist/jquery.min.js"></script> |
|||
<script src="/assets/lib/overlayscrollbars/browser/overlayscrollbars.browser.es6.min.js"></script> |
|||
<script src="/assets/lib/bootstrap-quicktab/dist/js/bootstrap-quicktab.min.js"></script> |
|||
<script src="/assets/b5/js/bootstrap-admin.min.js"></script> |
|||
<script src="/assets/b5/js/app.js"></script> |
|||
<script> |
|||
$(function () { |
|||
|
|||
//头部搜索框处理(不需要可以删除,不明白的可以看bootstrap-admin官方文档) |
|||
$(document).on('search.bsa.navbar-search', function (e, inputValue, data) { |
|||
//先得到请求地址,组合后大概是这样pages/search.html?keyword=dsadsa&type=article&user=admin2 |
|||
let url = data.action + '?keyword=' + inputValue + '&' + $.param(data.params); |
|||
|
|||
//然后通过tab打开一个搜索结果的窗口 |
|||
Quicktab.get('.qtab').addTab({ |
|||
title: '<i class="bi bi-search"></i><span class="text-danger ms-2">' + inputValue + '</span>', |
|||
url: url, |
|||
close: true, |
|||
}) |
|||
}) |
|||
|
|||
//退出登录 |
|||
$(document).on('click', '.bsa-logout', function (e) { |
|||
e.preventDefault(); |
|||
|
|||
$.modal({ |
|||
body: '确定要退出吗?', |
|||
cancelBtn: true, |
|||
ok: function () { |
|||
|
|||
|
|||
//请求退出路由 |
|||
$.ajax({ |
|||
method: 'post', |
|||
url: '/logout', |
|||
}).then(response => { |
|||
|
|||
if (response.code === 200) {//跳转到后台首页 |
|||
#define js() |
|||
<!-- Need: Apexcharts --> |
|||
<script src="/assets/b5/extensions/apexcharts/apexcharts.min.js"></script> |
|||
<script src="/assets/b5/static/js/pages/dashboard.js"></script> |
|||
#end |
|||
|
|||
$.toasts({ |
|||
type: 'success', |
|||
content: '退出成功', |
|||
onHidden: function () { |
|||
top.location.replace('/pages/login.html'); |
|||
} |
|||
}) |
|||
} |
|||
}); |
|||
} |
|||
}) |
|||
}); |
|||
}); |
|||
</script> |
|||
</body> |
|||
</html> |
|||
@ -1,86 +1,157 @@ |
|||
#set(seoTitle="贝塔网络用户实名认证") |
|||
#@b5Layout() |
|||
#define menu() |
|||
#include("../dashboard/_left_menu.html", sidebar="setting", submenu="realName") |
|||
#end |
|||
|
|||
#define main() |
|||
<div class="container-fluid"> |
|||
<div class="card border-0 shadow-sm"> |
|||
<div class="card-header bg-body"> |
|||
实名认证 |
|||
<div id="main"> |
|||
<header class="mb-3"> |
|||
<a href="#" class="burger-btn d-block d-xl-none"> |
|||
<i class="bi bi-justify fs-3"></i> |
|||
</a> |
|||
</header> |
|||
<div class="page-heading"> |
|||
<div class="page-title"> |
|||
<div class="row"> |
|||
<div class="col-12 col-md-6 order-md-1 order-last"> |
|||
<h3>实名认证</h3> |
|||
</div> |
|||
<div class="card-body"> |
|||
<div class="col-12 col-md-6 order-md-2 order-first"> |
|||
<nav aria-label="breadcrumb" class="breadcrumb-header float-start float-lg-end"> |
|||
<ol class="breadcrumb"> |
|||
<li class="breadcrumb-item"><a href="/my">首页</a></li> |
|||
<li class="breadcrumb-item active" aria-current="page">实名认证</li> |
|||
</ol> |
|||
</nav> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<section class="section"> |
|||
<div class="row"> |
|||
<div class="col-md-5"> |
|||
<div class="col-12 col-lg-12"> |
|||
<div class="card"> |
|||
<div class="card-body"> |
|||
<form id="form"> |
|||
<div class="row mb-3"> |
|||
<label for="oldPassword" class="col-sm-3 col-form-label text-sm-end">姓名</label> |
|||
<div class="col-sm-9"> |
|||
<input type="password" autocomplete class="form-control" id="oldPassword" |
|||
name="oldPassword"> |
|||
<div class="form-group"> |
|||
<label for="realname" class="form-label">姓名</label> |
|||
<input type="text" name="realName.realname" id="realname" class="form-control" placeholder="请如实填写您的姓名" value=""> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label for="idCard" class="form-label">身份证号</label> |
|||
<input type="text" name="realName.idCard" id="idCard" class="form-control" placeholder="请如实填写您的身份证号码" value=""> |
|||
</div> |
|||
<div class="row mb-3"> |
|||
<label for="password" class="col-sm-3 col-form-label text-sm-end">身份证号</label> |
|||
<div class="col-sm-9"> |
|||
<input type="password" autocomplete class="form-control" id="password" name="password"> |
|||
#if(realName?.status == 1) |
|||
<div class="form-group"> |
|||
<button type="button" class="btn btn-primary" disabled>已进行实名认证</button> |
|||
</div> |
|||
#else |
|||
<div class="form-group"> |
|||
<button type="button" id="submit" class="btn btn-primary">提交实名</button> |
|||
</div> |
|||
<div class="row mb-3"> |
|||
<div class="col-sm-9 offset-sm-3"> |
|||
<button type="submit" class="btn btn-primary">认证</button> |
|||
#end |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
|
|||
<div class="modal fade text-left" id="inlineForm" tabindex="-1" role="dialog" |
|||
aria-labelledby="myModalLabel33" aria-hidden="true"> |
|||
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" |
|||
role="document"> |
|||
<div class="modal-content"> |
|||
<div class="modal-header"> |
|||
<h4 class="modal-title" id="myModalLabel33">打开支付宝扫码认证</h4> |
|||
<button type="button" class="close" data-bs-dismiss="modal" |
|||
aria-label="Close"> |
|||
<i data-feather="x"></i> |
|||
</button> |
|||
</div> |
|||
<div class="modal-body"> |
|||
<div class="d-flex justify-content-center align-items-center flex-column"> |
|||
<div class="avatar avatar-2xl"> |
|||
<div id="qrcode"></div> |
|||
</div> |
|||
<p class="text-small">手机扫码认证完成后请手动点击查询认证结果</p> |
|||
<button id="queryRealName" type="button" class="btn btn-primary ms-1" |
|||
data-bs-dismiss="modal"> |
|||
<i class="bx bx-check d-block d-sm-none"></i> |
|||
<span class="d-none d-sm-block">认证完成查询认证结果</span> |
|||
</button> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
#include("../dashboard/_footer.html") |
|||
</div> |
|||
#end |
|||
|
|||
#define js() |
|||
|
|||
<script src="/assets/lib/formvalidation/js/formValidation.js"></script> |
|||
<script src="/assets/lib/formvalidation/js/framework/bootstrap.js"></script> |
|||
<script src="/assets/lib/formvalidation/js/language/zh_CN.js"></script> |
|||
<script> |
|||
//前端表单验证 |
|||
$('#form').formValidation({ |
|||
fields: { |
|||
oldPassword: { |
|||
validators: { |
|||
notEmpty: true, |
|||
} |
|||
}, |
|||
password: { |
|||
validators: { |
|||
notEmpty: true, |
|||
<script src="/assets/easy-qrcode/easy.qrcode.min.js" type="text/javascript" charset="utf-8"></script> |
|||
<script type="text/javascript"> |
|||
function generateRandomString(length) { |
|||
var result = ''; |
|||
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; |
|||
var charactersLength = characters.length; |
|||
for (var i = 0; i < length; i++) { |
|||
result += characters.charAt(Math.floor(Math.random() * charactersLength)); |
|||
} |
|||
}, |
|||
rePassword: { |
|||
validators: { |
|||
notEmpty: true, |
|||
return result; |
|||
} |
|||
var qrcode; |
|||
$(function () { |
|||
const myModal = new bootstrap.Modal('#inlineForm', {}) |
|||
$('#submit').click(function(){ |
|||
//获取数据 |
|||
let data = $("#form").serialize(); |
|||
//发起ajax请求 |
|||
$.ajax({ |
|||
method: 'post', |
|||
url: '/my/setting/doRealName', |
|||
//表单数据 |
|||
data: data, |
|||
}).then(ret => { |
|||
console.log(ret) |
|||
if(ret.state == "ok") { |
|||
if(qrcode){ |
|||
qrcode.clear(); |
|||
} |
|||
qrcode = new QRCode(document.getElementById("qrcode"), { |
|||
text: ret.certifyUrl, |
|||
width: 360, |
|||
height: 360, |
|||
colorDark : "#000000", |
|||
colorLight : "#ffffff", |
|||
correctLevel : QRCode.CorrectLevel.H, |
|||
quietZone: 20, |
|||
quietZoneColor: "rgba(0,0,0,0)", |
|||
}); |
|||
myModal.show() |
|||
} else { |
|||
alert(ret.msg) |
|||
} |
|||
}).on('success.form.fv', function (e) { |
|||
//阻止表单提交 |
|||
e.preventDefault(); |
|||
//得到表单对象 |
|||
let $form = $(e.target); |
|||
let data = $form.serialize(); |
|||
|
|||
alert('表单验证通过,即将发起ajax'); |
|||
//得到序列化数据 |
|||
}); |
|||
}) |
|||
$("#queryRealName").click(function(){ |
|||
$.ajax({ |
|||
url: "/login.php", |
|||
method: 'POST', |
|||
data |
|||
}).then(function (res) { |
|||
if (res.code === 200) { |
|||
//登录成功 |
|||
method: 'post', |
|||
url: '/my/setting/queryRealName' |
|||
}).then(ret => { |
|||
console.log(ret) |
|||
if(ret.state == "ok") { |
|||
alert("认证成功") |
|||
}else{ |
|||
//登录失败 |
|||
alert(ret.msg) |
|||
} |
|||
}); |
|||
}); |
|||
}) |
|||
</script> |
|||
#end |
|||
@ -0,0 +1,43 @@ |
|||
#@layout() |
|||
#define officialLayout() |
|||
<!--左侧主体内容部分--> |
|||
<div class="col jf-page-main jf-pdl0"> |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<h1>产品</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<!--项目列表 start--> |
|||
<div class="jf-project-list"> |
|||
|
|||
#setLocal(i=0, j=0) |
|||
#for(x : productPage.list) |
|||
#if(for.first || ++i % 4 == 0) |
|||
<div class="row"> |
|||
#end |
|||
<div class="col-3"> |
|||
<div class="jf-project-item jf-transition "> |
|||
<h1 class="jf-project-name"> |
|||
<a href="/product/#(x.id)">#(x.name)</a> |
|||
</h1> |
|||
</div> |
|||
</div> |
|||
#if(for.last || ++j % 4 == 0) |
|||
</div> |
|||
#end |
|||
#end |
|||
|
|||
</div> |
|||
<!--项目列表 end--> |
|||
|
|||
<!--分页组件--> |
|||
#@paginate(productPage.pageNumber, productPage.totalPage, "/product?p=") |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 包含侧边栏文件 --> |
|||
#include("_sidebar.html") |
|||
#end |
|||
|
|||
@ -1,55 +1,138 @@ |
|||
#@layout() |
|||
#set(seoTitle="贝塔网络官方产品") |
|||
#@officialLayout() |
|||
#define main() |
|||
<!--左侧主体内容部分--> |
|||
<div class="col jf-page-main jf-pdl0"> |
|||
<div class="jf-panel jf-article-list"> |
|||
<div class="jf-panel-header"> |
|||
<h1>产品</h1> |
|||
</div> |
|||
<div class="jf-panel-body"> |
|||
<!--项目列表 start--> |
|||
<div class="jf-project-list"> |
|||
|
|||
#setLocal(i=0, j=0) |
|||
#for(x : projectPage.list) |
|||
#if(for.first || ++i % 4 == 0) |
|||
<!-- Start Breadcrumbs --> |
|||
<div class="breadcrumbs"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
#end |
|||
<div class="col-3"> |
|||
<div class="jf-project-item jf-transition "> |
|||
<a href="/project/#(x.id)" class="jf-project-logo"> |
|||
<img src="/upload/avatar/#(x.avatar)" /> |
|||
</a> |
|||
<h1 class="jf-project-name"> |
|||
<a href="/project/#(x.id)">#(x.title)</a> |
|||
</h1> |
|||
|
|||
#-- |
|||
<p class="jf-project-info"> |
|||
###<span><i class="fa fa-eye"></i> 305</span> |
|||
<span><i class="fa fa-star-o"></i> 25</span> |
|||
<span><i class="fa fa-thumbs-o-up"></i> 99</span> |
|||
</p> |
|||
--# |
|||
<div class="col-lg-8 offset-lg-2 col-md-12 col-12"> |
|||
<div class="breadcrumbs-content"> |
|||
<h1 class="page-title">产品中心</h1> |
|||
</div> |
|||
<ul class="breadcrumb-nav"> |
|||
<li><a href="#(SSL)/">首页</a></li> |
|||
<li>产品中心</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- End Breadcrumbs --> |
|||
|
|||
<!-- Start Blog Singel Area --> |
|||
<section class="pricing-table section blog-section "> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-lg-9 col-md-12 col-12"> |
|||
<ul class="nav nav-pills"> |
|||
<li class="nav-item"> |
|||
<button type="button" class="nav-link btn active" aria-current="page" href="#">全部</button> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<button type="button" class="nav-link btn btn-link" href="#">套餐一</button> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<button type="button" class="nav-link btn btn-link" href="#">套餐二</button> |
|||
</li> |
|||
</ul> |
|||
<div class="row mt-3"> |
|||
#for(x : productPage.list) |
|||
<div class="col-lg-4 col-md-6 col-12 mb-3"> |
|||
<div class="card border-0 rounded-0 shadow"> |
|||
<div class="card-body mt-3 mb-3"> |
|||
<div class="row"> |
|||
<div class="col-10"> |
|||
<h4 class="card-title">#(x.name)</h4> |
|||
<ul class="list-group list-group-flush"> |
|||
<li class="list-group-item">CPU: #(x.cpuName)</li> |
|||
<li class="list-group-item">内存:#(x.memoryCapacity)</li> |
|||
<li class="list-group-item">显卡:#(x.graphicsCardModel)</li> |
|||
<li class="list-group-item">硬盘:#(x.dataDiskCapacity)</li> |
|||
<li class="list-group-item">网络:#(x.downloadSpeed)</li> |
|||
</ul> |
|||
</div> |
|||
<div class="col-2"> |
|||
<i class="bi bi-bookmark-plus fs-2"></i> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row align-items-center text-center g-0"> |
|||
<div class="col-5"> |
|||
<h5>$129</h5> |
|||
</div> |
|||
<div class="col-7"> |
|||
<a href="/order/#(x.id)" class="btn btn-dark w-100 p-2 rounded-0 text-warning">立即购买</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
#if(for.last || ++j % 4 == 0) |
|||
</div> |
|||
#end |
|||
#end |
|||
|
|||
</div> |
|||
<!--项目列表 end--> |
|||
|
|||
<!--分页组件--> |
|||
#@paginate(projectPage.pageNumber, projectPage.totalPage, "/project?p=") |
|||
</div> |
|||
|
|||
<aside class="col-lg-3 col-md-12 col-12"> |
|||
<div class="sidebar blog-grid-page"> |
|||
<!-- Start Single Widget --> |
|||
<div class="widget popular-feeds"> |
|||
<h5 class="widget-title">今日特价</h5> |
|||
<div class="popular-feed-loop"> |
|||
<div class="single-popular-feed"> |
|||
<div class="feed-desc"> |
|||
<a href="javascript:void(0)" class="cetagory">Creative</a> |
|||
<h6 class="post-title"><a href="blog-single-sidebar.html">Bringing Great Design |
|||
Ideas To Completion</a></h6> |
|||
<span class="time"><i class="lni lni-calendar"></i> 05th Nov 2023</span> |
|||
</div> |
|||
</div> |
|||
<div class="single-popular-feed"> |
|||
<div class="feed-desc"> |
|||
<a href="javascript:void(0)" class="cetagory">Jobs</a> |
|||
<h6 class="post-title"><a href="blog-single-sidebar.html">Live Life Smart And |
|||
Focus On The Positive</a></h6> |
|||
<span class="time"><i class="lni lni-calendar"></i> 24th March 2023</span> |
|||
</div> |
|||
</div> |
|||
<div class="single-popular-feed"> |
|||
<div class="feed-desc"> |
|||
<a href="javascript:void(0)" class="cetagory">Marketing</a> |
|||
<h6 class="post-title"><a href="blog-single-sidebar.html">We’re currently |
|||
acceping new projects.</a></h6> |
|||
<span class="time"><i class="lni lni-calendar"></i> 30th Jan 2023</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
|
|||
<!-- 包含侧边栏文件 --> |
|||
#include("_sidebar.html") |
|||
<!-- Start Single Widget --> |
|||
<div class="widget help-call"> |
|||
<h5 class="widget-title">联系方式</h5> |
|||
<div class="inner"> |
|||
<h3> |
|||
<span>+(123) 456-78-90</span> |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<!-- End Single Widget --> |
|||
</div> |
|||
</aside> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- End Blog Singel Area --> |
|||
#end |
|||
|
|||
#define js() |
|||
|
|||
<!-- ========================= JS here ========================= --> |
|||
<script src="/assets/official/js/bootstrap.min.js"></script> |
|||
<script src="/assets/official/js/wow.min.js"></script> |
|||
<script src="/assets/official/js/tiny-slider.js"></script> |
|||
<script src="/assets/official/js/glightbox.min.js"></script> |
|||
<script src="/assets/official/js/main.js"></script> |
|||
|
|||
<script type="text/javascript"> |
|||
$(document).ready(function() { |
|||
|
|||
}); |
|||
</script> |
|||
#end |
|||
|
|||
@ -0,0 +1,119 @@ |
|||
#set(seoTitle="JFinal 注册账号") |
|||
#@layout() |
|||
#define main() |
|||
<div class="col" style="margin-bottom: 20px;"> |
|||
|
|||
<!-- 注册 panel --> |
|||
<div id="regPanel" class="jf-panel"> |
|||
<div class="jf-panel-header"> |
|||
<h1 class="jf-login-title text-center">注册</h1> |
|||
</div> |
|||
|
|||
<div class="jf-panel-body mt15" style="width: 500px;margin:30px auto;"> |
|||
<!-- 内容区域 start--> |
|||
<form id="reg_form" action="/reg/save" method="post"> |
|||
<div class="form-group row mb-4"> |
|||
<label for="nickName" class="col-sm-2 col-form-label col-form-label-lg">昵称</label> |
|||
<div class="col-sm-10"> |
|||
<input type="text" autocomplete="off" class="form-control form-control-lg" id="nickName" name="nickName" placeholder="请输入昵称"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-4"> |
|||
<label for="userName" class="col-sm-2 col-form-label col-form-label-lg">邮箱</label> |
|||
<div class="col-sm-10"> |
|||
<input type="email" autocomplete="off" class="form-control form-control-lg" id="userName" name="userName" placeholder="请输入邮箱地址"> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row mb-4"> |
|||
<label for="password" class="col-sm-2 col-form-label col-form-label-lg">密码</label> |
|||
<div class="col-sm-10"> |
|||
<input type="password" autocomplete="off" class="form-control form-control-lg" id="password" name="password" placeholder="请输入密码"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row mb-4"> |
|||
<label class="col-sm-2 col-form-label-lg"> |
|||
<img title="点击刷新" onclick="updateRegCaptcha()" id="captchaImg" class="jf-login-captcha" src="/reg/captcha"/> |
|||
</label> |
|||
<div class="col-sm-10"> |
|||
<input type="text" autocomplete="off" class="form-control form-control-lg" id="captchaInput" name="captcha" placeholder="请输入验证码"> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="form-group row"> |
|||
<div class="col-12 text-right"> |
|||
<button type="submit" class="btn btn-primary btn-lg" style="padding-left:20px;padding-right:20px;">注册账号</button> |
|||
</div> |
|||
</div> |
|||
|
|||
</form> |
|||
<div class="jf-login-links"> |
|||
已有账号<a href="/login">直接登录</a> |
|||
<a class="ml-2" href="/reg/notActivated">还没激活?</a> |
|||
</div> |
|||
<!-- 内容区域 end--> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 注册成功 panel --> |
|||
<div id="regOkPanel" class="jf-panel" style="min-height: 400px; display: none;"> |
|||
<div class="jf-panel-header" style="margin-top:50px;"> |
|||
<h1 class="jf-login-title text-center">注册成功</h1> |
|||
</div> |
|||
|
|||
<div class="jf-panel-body mt15" style="min-width: 500px;margin:30px auto;"> |
|||
<!-- 内容区域 start--> |
|||
<div id="reg_ok_msg" style="text-align: center; font-size: 22px; margin-top: 40px;"> |
|||
请去往注册邮箱 |
|||
<span style="color:red;" id="regEmail">nickName</span> |
|||
查收激活邮件激活账号 |
|||
</div> |
|||
<!-- 内容区域 end--> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
#end |
|||
|
|||
#define js() |
|||
<script type="text/javascript" src="/assets/jquery_form/jquery.form.js"></script> |
|||
<script type="text/javascript" src="/assets/layer/layer/layer.js"></script> |
|||
|
|||
<script type="text/javascript"> |
|||
$(document).ready(function() { |
|||
$("#reg_form").ajaxForm({ |
|||
dataType: "json" |
|||
, beforeSubmit: function(formData, jqForm, options) { |
|||
// 表单提交之前回调 |
|||
} |
|||
, success: function(ret) { |
|||
if(ret.state == "ok") { |
|||
$("#regPanel").hide(); |
|||
$("#regOkPanel").show(); |
|||
$("#regEmail").text(ret.regEmail); |
|||
} else { |
|||
layer.msg(ret.msg, { |
|||
shift: 6 |
|||
, shade: 0.3 |
|||
, time: 0 |
|||
, offset: "165px" |
|||
, closeBtn: 1 |
|||
, shadeClose: false |
|||
} , function() { |
|||
updateRegCaptcha(); |
|||
} |
|||
); |
|||
} |
|||
|
|||
} |
|||
, error: function(ret) { } // ret.status != 200 时回调 |
|||
, complete: function(ret) { } // 无论是 success 还是 error,最终都会被回调 |
|||
}); |
|||
}); |
|||
|
|||
function updateRegCaptcha() { |
|||
$("#captchaImg").attr("src", "/reg/captcha?v=" + Math.random()); |
|||
$("#captchaInput").val(""); |
|||
} |
|||
</script> |
|||
#end |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
body{background-color:var(--bs-body-bg)}#auth{height:100vh;overflow-x:hidden}#auth #auth-right{height:100%;background:url(../png/4853433.png),linear-gradient(90deg,#2d499d,#3f5491)}#auth #auth-left{padding:5rem}#auth #auth-left .auth-title{font-size:4rem;margin-bottom:1rem}#auth #auth-left .auth-subtitle{font-size:1.7rem;line-height:2.5rem;color:#a8aebb}#auth #auth-left .auth-logo{margin-bottom:7rem}#auth #auth-left .auth-logo img{height:2rem}@media screen and (max-width: 1399.9px){#auth #auth-left{padding:3rem}}@media screen and (max-width: 767px){#auth #auth-left{padding:5rem}}@media screen and (max-width: 576px){#auth #auth-left{padding:5rem 3rem}}html[data-bs-theme=dark] #auth-right{background:url(../png/4853433.png),linear-gradient(90deg,#2d499d,#3f5491)} |
|||
@ -0,0 +1 @@ |
|||
body{background-color:var(--bs-body-bg)}#auth{height:100vh;overflow-x:hidden}#auth #auth-right{height:100%;background:url(../png/4853433.png),linear-gradient(-90deg,#2d499d,#3f5491)}#auth #auth-left{padding:5rem}#auth #auth-left .auth-title{font-size:4rem;margin-bottom:1rem}#auth #auth-left .auth-subtitle{font-size:1.7rem;line-height:2.5rem;color:#a8aebb}#auth #auth-left .auth-logo{margin-bottom:7rem}#auth #auth-left .auth-logo img{height:2rem}@media screen and (max-width: 1399.9px){#auth #auth-left{padding:3rem}}@media screen and (max-width: 767px){#auth #auth-left{padding:5rem}}@media screen and (max-width: 576px){#auth #auth-left{padding:5rem 3rem}}html[data-bs-theme=dark] #auth-right{background:url(../png/4853433.png),linear-gradient(-90deg,#2d499d,#3f5491)} |
|||
@ -0,0 +1 @@ |
|||
body{background-color:var(--bs-body-bg)}#auth{height:100vh;overflow-x:hidden}#auth #auth-right{height:100%;background:url(../png/4853433.png),linear-gradient(90deg,#2d499d,#3f5491)}#auth #auth-left{padding:5rem}#auth #auth-left .auth-title{font-size:4rem;margin-bottom:1rem}#auth #auth-left .auth-subtitle{font-size:1.7rem;line-height:2.5rem;color:#a8aebb}#auth #auth-left .auth-logo{margin-bottom:7rem}#auth #auth-left .auth-logo img{height:2rem}@media screen and (max-width: 1399.9px){#auth #auth-left{padding:3rem}}@media screen and (max-width: 767px){#auth #auth-left{padding:5rem}}@media screen and (max-width: 576px){#auth #auth-left{padding:5rem 3rem}}html[data-bs-theme=dark] #auth-right{background:url(../png/4853433.png),linear-gradient(90deg,#2d499d,#3f5491)} |
|||
@ -0,0 +1 @@ |
|||
body{background-color:var(--bs-body-bg)}#auth{height:100vh;overflow-x:hidden}#auth #auth-right{height:100%;background:url(./png/4853433.png),linear-gradient(-90deg,#2d499d,#3f5491)}#auth #auth-left{padding:5rem}#auth #auth-left .auth-title{font-size:4rem;margin-bottom:1rem}#auth #auth-left .auth-subtitle{font-size:1.7rem;line-height:2.5rem;color:#a8aebb}#auth #auth-left .auth-logo{margin-bottom:7rem}#auth #auth-left .auth-logo img{height:2rem}@media screen and (max-width: 1399.9px){#auth #auth-left{padding:3rem}}@media screen and (max-width: 767px){#auth #auth-left{padding:5rem}}@media screen and (max-width: 576px){#auth #auth-left{padding:5rem 3rem}}html[data-bs-theme=dark] #auth-right{background:url(./png/4853433.png),linear-gradient(-90deg,#2d499d,#3f5491)} |
|||
@ -0,0 +1 @@ |
|||
#error{background-color:#ebf3ff;padding:2rem 0;min-height:100vh}#error .img-error{height:435px;object-fit:contain;padding:3rem 0}#error .error-title{font-size:3rem;margin-top:1rem}html[data-bs-theme=dark] #error{background-color:#151521} |
|||
@ -0,0 +1 @@ |
|||
#error{background-color:#ebf3ff;padding:2rem 0;min-height:100vh}#error .img-error{height:435px;object-fit:contain;padding:3rem 0}#error .error-title{font-size:3rem;margin-top:1rem}html[data-bs-theme=dark] #error{background-color:#151521} |
|||
@ -0,0 +1 @@ |
|||
#error{background-color:#ebf3ff;padding:2rem 0;min-height:100vh}#error .img-error{height:435px;object-fit:contain;padding:3rem 0}#error .error-title{font-size:3rem;margin-top:1rem}html[data-bs-theme=dark] #error{background-color:#151521} |
|||
@ -0,0 +1 @@ |
|||
#error{background-color:#ebf3ff;padding:2rem 0;min-height:100vh}#error .img-error{height:435px;object-fit:contain;padding:3rem 0}#error .error-title{font-size:3rem;margin-top:1rem}html[data-bs-theme=dark] #error{background-color:#151521} |
|||
@ -0,0 +1 @@ |
|||
.comment{border:1px solid #C2C2D9;padding:40px;margin-bottom:30px;border-radius:5px;box-shadow:0 0 5px rgba(0,0,0,.1)}.comment-header{display:flex;align-items:center;margin-bottom:1px}@media screen and (max-width: 767px){.comment-header{flex-direction:column;justify-content:center}}.comment-header .avatar-content{width:10px;height:10px;border-radius:50%;margin-right:10px}.comment-header .comment-meta{flex-grow:1}.comment-body{margin-left:30px}@media screen and (max-width: 767px){.comment-body{margin-top:20px}}.comment-time{color:#435ebe;margin-bottom:10px}.comment-actions{display:flex;justify-content:flex-start;margin-top:10px}html[data-bs-theme=dark] .comment{border:1px solid #404053}html[data-bs-theme=dark] .comment-time{color:#6a9cd2} |
|||
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
.swal2-input.form-control,.swal2-textarea.form-control,.swal2-select.form-control{width:initial} |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue