chengkun
2025-06-05 4080b5997b38ca84b3b203c7101dcadb97b76925
提交
2,628 files added
559644 ■■■■■ changed files
.env.develop 1 ●●●● patch | view | raw | blame | history
.env.production 2 ●●●●● patch | view | raw | blame | history
.example.env 1 ●●●● patch | view | raw | blame | history
.gitignore 17 ●●●●● patch | view | raw | blame | history
.travis.yml 42 ●●●●● patch | view | raw | blame | history
FETCH_HEAD patch | view | raw | blame | history
LICENSE.txt 32 ●●●●● patch | view | raw | blame | history
app/AppService.php 22 ●●●●● patch | view | raw | blame | history
app/BaseController.php 302 ●●●●● patch | view | raw | blame | history
app/ExceptionHandle.php 58 ●●●●● patch | view | raw | blame | history
app/Request.php 8 ●●●●● patch | view | raw | blame | history
app/admin/common.php 44 ●●●●● patch | view | raw | blame | history
app/admin/controller/Administrators.php 186 ●●●●● patch | view | raw | blame | history
app/admin/controller/Adminmenu.php 128 ●●●●● patch | view | raw | blame | history
app/admin/controller/BigvInfo.php 83 ●●●●● patch | view | raw | blame | history
app/admin/controller/CancelPublishOrder.php 648 ●●●●● patch | view | raw | blame | history
app/admin/controller/Category.php 185 ●●●●● patch | view | raw | blame | history
app/admin/controller/Common.php 74 ●●●●● patch | view | raw | blame | history
app/admin/controller/CountryCode.php 191 ●●●●● patch | view | raw | blame | history
app/admin/controller/Currency.php 137 ●●●●● patch | view | raw | blame | history
app/admin/controller/DeliverRegion.php 136 ●●●●● patch | view | raw | blame | history
app/admin/controller/DeliverRegionLogistics.php 148 ●●●●● patch | view | raw | blame | history
app/admin/controller/DisPlatform.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/Goods.php 436 ●●●●● patch | view | raw | blame | history
app/admin/controller/GoodsBrand.php 181 ●●●●● patch | view | raw | blame | history
app/admin/controller/GoodsFreightAttr.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/GoodsMaterial.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/GoodsPurpose.php 133 ●●●●● patch | view | raw | blame | history
app/admin/controller/Goodskd.php 519 ●●●●● patch | view | raw | blame | history
app/admin/controller/Index.php 25 ●●●●● patch | view | raw | blame | history
app/admin/controller/Language.php 141 ●●●●● patch | view | raw | blame | history
app/admin/controller/LanguagePag.php 361 ●●●●● patch | view | raw | blame | history
app/admin/controller/Login.php 198 ●●●●● patch | view | raw | blame | history
app/admin/controller/LogisticsVas.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/Menu.php 125 ●●●●● patch | view | raw | blame | history
app/admin/controller/Message.php 325 ●●●●● patch | view | raw | blame | history
app/admin/controller/MsgCategory.php 131 ●●●●● patch | view | raw | blame | history
app/admin/controller/Notice.php 297 ●●●●● patch | view | raw | blame | history
app/admin/controller/PartnerSchool.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/PayBank.php 213 ●●●●● patch | view | raw | blame | history
app/admin/controller/PaymentTool.php 155 ●●●●● patch | view | raw | blame | history
app/admin/controller/PlatformLogisticsProduct.php 123 ●●●●● patch | view | raw | blame | history
app/admin/controller/PlatformRegion.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/PublicApi.php 99 ●●●●● patch | view | raw | blame | history
app/admin/controller/PublishOrder.php 626 ●●●●● patch | view | raw | blame | history
app/admin/controller/RemitRecord.php 132 ●●●●● patch | view | raw | blame | history
app/admin/controller/ReturnExchange.php 121 ●●●●● patch | view | raw | blame | history
app/admin/controller/ReturnExchangeType.php 114 ●●●●● patch | view | raw | blame | history
app/admin/controller/SalesPlatform.php 240 ●●●●● patch | view | raw | blame | history
app/admin/controller/Seller.php 313 ●●●●● patch | view | raw | blame | history
app/admin/controller/SellerBaseInfo.php 127 ●●●●● patch | view | raw | blame | history
app/admin/controller/SellerMenu.php 126 ●●●●● patch | view | raw | blame | history
app/admin/controller/StockCountry.php 120 ●●●●● patch | view | raw | blame | history
app/admin/controller/Supplier.php 508 ●●●●● patch | view | raw | blame | history
app/admin/controller/ThirdPartyLogisticsProductTemp.php 123 ●●●●● patch | view | raw | blame | history
app/admin/controller/ThirdPartyStockTemp.php 197 ●●●●● patch | view | raw | blame | history
app/admin/controller/Translation.php 45 ●●●●● patch | view | raw | blame | history
app/admin/controller/WithdrawalRecord.php 142 ●●●●● patch | view | raw | blame | history
app/admin/middleware.php 12 ●●●●● patch | view | raw | blame | history
app/admin/model/Language.php 16 ●●●●● patch | view | raw | blame | history
app/admin/model/LanguagePag.php 26 ●●●●● patch | view | raw | blame | history
app/admin/model/Message.php 13 ●●●●● patch | view | raw | blame | history
app/admin/model/MessageAttachment.php 8 ●●●●● patch | view | raw | blame | history
app/admin/util/MenuService.php 125 ●●●●● patch | view | raw | blame | history
app/admin/util/Opadmin.php 222 ●●●●● patch | view | raw | blame | history
app/admin/validate/AdminMenu.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/Administrators.php 27 ●●●●● patch | view | raw | blame | history
app/admin/validate/Category.php 20 ●●●●● patch | view | raw | blame | history
app/admin/validate/CountryCode.php 22 ●●●●● patch | view | raw | blame | history
app/admin/validate/Currency.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/DeliverRegion.php 21 ●●●●● patch | view | raw | blame | history
app/admin/validate/DeliverRegionLogistics.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/DisPlatform.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/DockingPlatform.php 20 ●●●●● patch | view | raw | blame | history
app/admin/validate/GoodsFreightAttr.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/GoodsMaterial.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/GoodsPurpose.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/Language.php 24 ●●●●● patch | view | raw | blame | history
app/admin/validate/LanguagePag.php 25 ●●●●● patch | view | raw | blame | history
app/admin/validate/LogisticsVas.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/Message.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/MsgCategory.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/Notice.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/PartnerSchool.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/PayBank.php 23 ●●●●● patch | view | raw | blame | history
app/admin/validate/PaymentTool.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/PlatformLogisticsProduct.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/PlatformRegion.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/ReturnExchange.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/ReturnExchangeType.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/SalesPlatform.php 17 ●●●●● patch | view | raw | blame | history
app/admin/validate/SellerAccountAdd.php 27 ●●●●● patch | view | raw | blame | history
app/admin/validate/SellerAccountEdit.php 22 ●●●●● patch | view | raw | blame | history
app/admin/validate/StockCountry.php 19 ●●●●● patch | view | raw | blame | history
app/admin/validate/SupplierAccountAdd.php 27 ●●●●● patch | view | raw | blame | history
app/admin/validate/SupplierAccountEdit.php 21 ●●●●● patch | view | raw | blame | history
app/admin/validate/SupplierMenu.php 19 ●●●●● patch | view | raw | blame | history
app/admin/view/administrators/index.html 120 ●●●●● patch | view | raw | blame | history
app/admin/view/adminmenu/index.html 102 ●●●●● patch | view | raw | blame | history
app/admin/view/bigv_info/index.html 210 ●●●●● patch | view | raw | blame | history
app/admin/view/cancel_publish_order/create.html 860 ●●●●● patch | view | raw | blame | history
app/admin/view/cancel_publish_order/index.html 105 ●●●●● patch | view | raw | blame | history
app/admin/view/category/index.html 264 ●●●●● patch | view | raw | blame | history
app/admin/view/common/bodyheader.html 31 ●●●●● patch | view | raw | blame | history
app/admin/view/common/element-plus.html 14 ●●●●● patch | view | raw | blame | history
app/admin/view/common/guide.html 50 ●●●●● patch | view | raw | blame | history
app/admin/view/common/header.html 7 ●●●●● patch | view | raw | blame | history
app/admin/view/common/left.html 66 ●●●●● patch | view | raw | blame | history
app/admin/view/common/side_menu.html 41 ●●●●● patch | view | raw | blame | history
app/admin/view/common/title.html 1 ●●●● patch | view | raw | blame | history
app/admin/view/country_code/index.html 218 ●●●●● patch | view | raw | blame | history
app/admin/view/currency/index.html 94 ●●●●● patch | view | raw | blame | history
app/admin/view/deliver_region/index.html 114 ●●●●● patch | view | raw | blame | history
app/admin/view/deliver_region_logistics/index.html 108 ●●●●● patch | view | raw | blame | history
app/admin/view/dis_platform/index.html 87 ●●●●● patch | view | raw | blame | history
app/admin/view/goods/create.html 748 ●●●●● patch | view | raw | blame | history
app/admin/view/goods/index.html 119 ●●●●● patch | view | raw | blame | history
app/admin/view/goods_brand/index.html 174 ●●●●● patch | view | raw | blame | history
app/admin/view/goods_freight_attr/index.html 92 ●●●●● patch | view | raw | blame | history
app/admin/view/goods_material/index.html 87 ●●●●● patch | view | raw | blame | history
app/admin/view/goods_purpose/index.html 87 ●●●●● patch | view | raw | blame | history
app/admin/view/goodskd/create.html 735 ●●●●● patch | view | raw | blame | history
app/admin/view/goodskd/index.html 98 ●●●●● patch | view | raw | blame | history
app/admin/view/index/index.html 83 ●●●●● patch | view | raw | blame | history
app/admin/view/language/index.html 116 ●●●●● patch | view | raw | blame | history
app/admin/view/language_pag/index.html 151 ●●●●● patch | view | raw | blame | history
app/admin/view/login/index.html 112 ●●●●● patch | view | raw | blame | history
app/admin/view/logistics_vas/index.html 91 ●●●●● patch | view | raw | blame | history
app/admin/view/menu/index.html 108 ●●●●● patch | view | raw | blame | history
app/admin/view/message/create.html 121 ●●●●● patch | view | raw | blame | history
app/admin/view/message/index.html 89 ●●●●● patch | view | raw | blame | history
app/admin/view/msg_category/index.html 94 ●●●●● patch | view | raw | blame | history
app/admin/view/notice/create.html 109 ●●●●● patch | view | raw | blame | history
app/admin/view/notice/index.html 84 ●●●●● patch | view | raw | blame | history
app/admin/view/partner_school/index.html 87 ●●●●● patch | view | raw | blame | history
app/admin/view/pay_bank/index.html 151 ●●●●● patch | view | raw | blame | history
app/admin/view/payment_tool/index.html 95 ●●●●● patch | view | raw | blame | history
app/admin/view/platform_logistics_product/index.html 99 ●●●●● patch | view | raw | blame | history
app/admin/view/platform_region/index.html 87 ●●●●● patch | view | raw | blame | history
app/admin/view/publish_order/create.html 840 ●●●●● patch | view | raw | blame | history
app/admin/view/publish_order/index.html 111 ●●●●● patch | view | raw | blame | history
app/admin/view/remit_record/index.html 166 ●●●●● patch | view | raw | blame | history
app/admin/view/return_exchange/index.html 115 ●●●●● patch | view | raw | blame | history
app/admin/view/return_exchange_type/index.html 91 ●●●●● patch | view | raw | blame | history
app/admin/view/sales_platform/index.html 146 ●●●●● patch | view | raw | blame | history
app/admin/view/seller/add.html 192 ●●●●● patch | view | raw | blame | history
app/admin/view/seller/index.html 146 ●●●●● patch | view | raw | blame | history
app/admin/view/seller_base_info/index.html 217 ●●●●● patch | view | raw | blame | history
app/admin/view/stock_country/index.html 91 ●●●●● patch | view | raw | blame | history
app/admin/view/supplier/add.html 138 ●●●●● patch | view | raw | blame | history
app/admin/view/supplier/index.html 139 ●●●●● patch | view | raw | blame | history
app/admin/view/third_party_logistics_product_temp/index.html 130 ●●●●● patch | view | raw | blame | history
app/admin/view/third_party_stock_temp/index.html 160 ●●●●● patch | view | raw | blame | history
app/admin/view/withdrawal_record/index.html 142 ●●●●● patch | view | raw | blame | history
app/common.php 1162 ●●●●● patch | view | raw | blame | history
app/common/service/YouDaoTrans.php 158 ●●●●● patch | view | raw | blame | history
app/common/service/sms/SmsDriver.php 86 ●●●●● patch | view | raw | blame | history
app/common/service/sms/engine/TencentSms.php 125 ●●●●● patch | view | raw | blame | history
app/common/toole/Dhkhttp.php 131 ●●●●● patch | view | raw | blame | history
app/common/toole/ExportExcel.php 138 ●●●●● patch | view | raw | blame | history
app/event.php 19 ●●●●● patch | view | raw | blame | history
app/home/controller/Index.php 115 ●●●●● patch | view | raw | blame | history
app/home/controller/Testpay.php 231 ●●●●● patch | view | raw | blame | history
app/home/controller/Wftest.php 723 ●●●●● patch | view | raw | blame | history
app/home/view/common/element-plus.html 13 ●●●●● patch | view | raw | blame | history
app/home/view/common/header.html 1 ●●●● patch | view | raw | blame | history
app/home/view/common/title.html 1 ●●●● patch | view | raw | blame | history
app/home/view/index/index.html 63 ●●●●● patch | view | raw | blame | history
app/home/view/index/index_old.html 93 ●●●●● patch | view | raw | blame | history
app/home/view/index/talent.html 72 ●●●●● patch | view | raw | blame | history
app/middleware.php 12 ●●●●● patch | view | raw | blame | history
app/provider.php 9 ●●●●● patch | view | raw | blame | history
app/service.php 9 ●●●●● patch | view | raw | blame | history
composer.json 62 ●●●●● patch | view | raw | blame | history
config/app.php 48 ●●●●● patch | view | raw | blame | history
config/captcha.php 39 ●●●●● patch | view | raw | blame | history
config/console.php 9 ●●●●● patch | view | raw | blame | history
config/cookie.php 20 ●●●●● patch | view | raw | blame | history
config/filesystem.php 24 ●●●●● patch | view | raw | blame | history
config/lang.php 46 ●●●●● patch | view | raw | blame | history
config/log.php 49 ●●●●● patch | view | raw | blame | history
config/middleware.php 14 ●●●●● patch | view | raw | blame | history
config/other.php 19 ●●●●● patch | view | raw | blame | history
config/pay.php 46 ●●●●● patch | view | raw | blame | history
config/qcloud.php 19 ●●●●● patch | view | raw | blame | history
config/route.php 45 ●●●●● patch | view | raw | blame | history
config/session.php 19 ●●●●● patch | view | raw | blame | history
config/trace.php 24 ●●●●● patch | view | raw | blame | history
config/view.php 25 ●●●●● patch | view | raw | blame | history
config/youdao.php 8 ●●●●● patch | view | raw | blame | history
extend/common/QRcode.php 3282 ●●●●● patch | view | raw | blame | history
extend/common/UploadFile.php 526 ●●●●● patch | view | raw | blame | history
extend/common/Uploadcos.php 70 ●●●●● patch | view | raw | blame | history
extend/common/cos-sdk-v5-7.phar patch | view | raw | blame | history
extend/listen/SellerBillLog.php 15 ●●●●● patch | view | raw | blame | history
extend/listen/SupplierBillLog.php 15 ●●●●● patch | view | raw | blame | history
extend/pay/Alipay.php 60 ●●●●● patch | view | raw | blame | history
extend/pay/Weixin.php 104 ●●●●● patch | view | raw | blame | history
extend/services/CategoryService.php 30 ●●●●● patch | view | raw | blame | history
extend/services/DbService.php 41 ●●●●● patch | view | raw | blame | history
extend/services/DeliverRegionService.php 20 ●●●●● patch | view | raw | blame | history
extend/services/LogisticsProductService.php 20 ●●●●● patch | view | raw | blame | history
extend/services/PlatformLogisticsProductService.php 20 ●●●●● patch | view | raw | blame | history
index.html 40 ●●●●● patch | view | raw | blame | history
lang/ar.php 56 ●●●●● patch | view | raw | blame | history
lang/ar/seller.php 22 ●●●●● patch | view | raw | blame | history
lang/en-us.php 27 ●●●●● patch | view | raw | blame | history
lang/en-us/lang-group.php 11 ●●●●● patch | view | raw | blame | history
lang/en-us/lang-validate.php 14 ●●●●● patch | view | raw | blame | history
lang/en-us/seller.php 23 ●●●●● patch | view | raw | blame | history
lang/zh-cn.php 56 ●●●●● patch | view | raw | blame | history
lang/zh-cn/lang-group.php 11 ●●●●● patch | view | raw | blame | history
lang/zh-cn/lang-validate.php 14 ●●●●● patch | view | raw | blame | history
public/1.html 13 ●●●●● patch | view | raw | blame | history
public/1.php 34 ●●●●● patch | view | raw | blame | history
public/aws-tokens 1 ●●●● patch | view | raw | blame | history
public/favicon.ico patch | view | raw | blame | history
public/index.php 27 ●●●●● patch | view | raw | blame | history
public/info.php 2 ●●●●● patch | view | raw | blame | history
public/nginx.htaccess patch | view | raw | blame | history
public/robots.txt 2 ●●●●● patch | view | raw | blame | history
public/router.php 19 ●●●●● patch | view | raw | blame | history
public/static/admin/css/admin.css 1331 ●●●●● patch | view | raw | blame | history
public/static/admin/css/image_viewer.css 11 ●●●●● patch | view | raw | blame | history
public/static/admin/css/layui.css 5760 ●●●●● patch | view | raw | blame | history
public/static/admin/font/iconfont.woff patch | view | raw | blame | history
public/static/admin/js/administrators/index.js 162 ●●●●● patch | view | raw | blame | history
public/static/admin/js/adminmenu/index.js 96 ●●●●● patch | view | raw | blame | history
public/static/admin/js/bigv_info/index.js 192 ●●●●● patch | view | raw | blame | history
public/static/admin/js/cancel_publish_order/create.js 629 ●●●●● patch | view | raw | blame | history
public/static/admin/js/cancel_publish_order/index.js 84 ●●●●● patch | view | raw | blame | history
public/static/admin/js/category/index.js 465 ●●●●● patch | view | raw | blame | history
public/static/admin/js/country_code/index.js 344 ●●●●● patch | view | raw | blame | history
public/static/admin/js/currency/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/deliver_region/index.js 183 ●●●●● patch | view | raw | blame | history
public/static/admin/js/deliver_region_logistics/index.js 186 ●●●●● patch | view | raw | blame | history
public/static/admin/js/dis_platform/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/function.js 116 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goods/create.js 503 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goods/index.js 149 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goods_brand/index.js 166 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goods_freight_attr/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goods_material/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goods_purpose/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goodskd/create.js 280 ●●●●● patch | view | raw | blame | history
public/static/admin/js/goodskd/index.js 71 ●●●●● patch | view | raw | blame | history
public/static/admin/js/index/index.js 25 ●●●●● patch | view | raw | blame | history
public/static/admin/js/jquery.config.js 268 ●●●●● patch | view | raw | blame | history
public/static/admin/js/language/index.js 182 ●●●●● patch | view | raw | blame | history
public/static/admin/js/language_pag/index.js 446 ●●●●● patch | view | raw | blame | history
public/static/admin/js/logistics_vas/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/menu/index.js 264 ●●●●● patch | view | raw | blame | history
public/static/admin/js/message/create.js 308 ●●●●● patch | view | raw | blame | history
public/static/admin/js/message/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/msg_category/index.js 96 ●●●●● patch | view | raw | blame | history
public/static/admin/js/notice/create.js 238 ●●●●● patch | view | raw | blame | history
public/static/admin/js/notice/index.js 142 ●●●●● patch | view | raw | blame | history
public/static/admin/js/partner_school/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/pay_bank/index.js 214 ●●●●● patch | view | raw | blame | history
public/static/admin/js/payment_tool/index.js 167 ●●●●● patch | view | raw | blame | history
public/static/admin/js/platform_logistics_product/index.js 142 ●●●●● patch | view | raw | blame | history
public/static/admin/js/platform_region/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/publish_order/create.js 623 ●●●●● patch | view | raw | blame | history
public/static/admin/js/publish_order/index.js 71 ●●●●● patch | view | raw | blame | history
public/static/admin/js/remit_record/index.js 149 ●●●●● patch | view | raw | blame | history
public/static/admin/js/return_exchange/index.js 201 ●●●●● patch | view | raw | blame | history
public/static/admin/js/return_exchange_type/index.js 155 ●●●●● patch | view | raw | blame | history
public/static/admin/js/sales_platform/index.js 230 ●●●●● patch | view | raw | blame | history
public/static/admin/js/seller/add.js 269 ●●●●● patch | view | raw | blame | history
public/static/admin/js/seller/index.js 196 ●●●●● patch | view | raw | blame | history
public/static/admin/js/seller_baseinfo/index.js 235 ●●●●● patch | view | raw | blame | history
public/static/admin/js/stock_country/index.js 143 ●●●●● patch | view | raw | blame | history
public/static/admin/js/supplier/add.js 121 ●●●●● patch | view | raw | blame | history
public/static/admin/js/supplier/index.js 199 ●●●●● patch | view | raw | blame | history
public/static/admin/js/third_party_logistics_product_temp/index.js 141 ●●●●● patch | view | raw | blame | history
public/static/admin/js/third_party_stock_temp/index.js 189 ●●●●● patch | view | raw | blame | history
public/static/admin/js/withdrawal_record/index.js 159 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.css 4085 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.css 4084 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.css 597 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.css 594 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.css 5406 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.css 5397 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.css 12043 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.css 12016 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.min.css 6 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.min.css.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.js 6315 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.js.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.min.js 7 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.min.js.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.js 4450 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.js.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.min.js 7 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.min.js.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.js 4497 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.js.map 1 ●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.min.js 7 ●●●●● patch | view | raw | blame | history
public/static/bootstrap-5.3.6-dist/js/bootstrap.min.js.map 1 ●●●● patch | view | raw | blame | history
public/static/css/normalize.css 349 ●●●●● patch | view | raw | blame | history
public/static/css/success.css 42 ●●●●● patch | view | raw | blame | history
public/static/element/icons-vue.js 26 ●●●●● patch | view | raw | blame | history
public/static/element/index.css 1 ●●●● patch | view | raw | blame | history
public/static/element/index.full.js 59091 ●●●●● patch | view | raw | blame | history
public/static/element/index_other.css 173 ●●●●● patch | view | raw | blame | history
public/static/element/zh-cn.js 152 ●●●●● patch | view | raw | blame | history
public/static/home/css/index/index.css 8 ●●●●● patch | view | raw | blame | history
public/static/home/images/amzon.png patch | view | raw | blame | history
public/static/home/images/bg1.jpg patch | view | raw | blame | history
public/static/home/images/bg2.jpg patch | view | raw | blame | history
public/static/home/images/bg3.jpg patch | view | raw | blame | history
public/static/home/images/camel-1.jpg patch | view | raw | blame | history
public/static/home/images/camel-2.png patch | view | raw | blame | history
public/static/home/images/ebay.png patch | view | raw | blame | history
public/static/home/images/img01.png patch | view | raw | blame | history
public/static/home/images/lingcheng-1.jpg patch | view | raw | blame | history
public/static/home/images/lingcheng-2.jpg patch | view | raw | blame | history
public/static/home/images/logo-center.png patch | view | raw | blame | history
public/static/home/images/shopify.png patch | view | raw | blame | history
public/static/home/images/tools1.jpg patch | view | raw | blame | history
public/static/home/images/tools2.jpg patch | view | raw | blame | history
public/static/home/images/tools3.jpg patch | view | raw | blame | history
public/static/home/images/tools4.jpg patch | view | raw | blame | history
public/static/home/images/tools5.jpg patch | view | raw | blame | history
public/static/home/images/tools6.jpg patch | view | raw | blame | history
public/static/home/images/tools7.jpg patch | view | raw | blame | history
public/static/home/images/tools8.jpg patch | view | raw | blame | history
public/static/home/images/walmart.png patch | view | raw | blame | history
public/static/home/images/wish.png patch | view | raw | blame | history
public/static/home/js/index.js 24 ●●●●● patch | view | raw | blame | history
public/static/images/acion.png patch | view | raw | blame | history
public/static/images/logo-no-bg.png patch | view | raw | blame | history
public/static/images/logo.jpg patch | view | raw | blame | history
public/static/images/logo.png patch | view | raw | blame | history
public/static/jquery/jquery-3.7.1.min.js 2 ●●●●● patch | view | raw | blame | history
public/static/js/language/language.js 47 ●●●●● patch | view | raw | blame | history
public/static/js/success.js 27 ●●●●● patch | view | raw | blame | history
public/static/js/supplier/common.js 147 ●●●●● patch | view | raw | blame | history
public/static/js/supplier/function.js 116 ●●●●● patch | view | raw | blame | history
public/static/js/supplier/jquery.config.js 268 ●●●●● patch | view | raw | blame | history
public/static/lang/1/ar.json 785 ●●●●● patch | view | raw | blame | history
public/static/lang/1/en-us.json 785 ●●●●● patch | view | raw | blame | history
public/static/lang/1/zh-cn.json 785 ●●●●● patch | view | raw | blame | history
public/static/tinymce/CHANGELOG.md 3561 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/icons/default/icons.min.js 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/langs/README.md 3 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/langs/zh_CN.js 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/license.md 6 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/models/dom/model.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/accordion/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/advlist/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/anchor/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/autolink/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/autoresize/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/autosave/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/charmap/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/code/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/codesample/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/directionality/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/emoticons/js/emojiimages.js 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/emoticons/js/emojiimages.min.js 3 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/emoticons/js/emojis.js 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/emoticons/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ar.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/bg_BG.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ca.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/cs.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/da.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/de.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/el.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/en.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/es.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/eu.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fa.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fi.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fr_FR.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/he_IL.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hi.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hr.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hu_HU.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/id.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/it.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ja.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/kk.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ko_KR.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ms.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/nb_NO.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/nl.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pl.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pt_BR.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pt_PT.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ro.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ru.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sk.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sl_SI.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sv_SE.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/th_TH.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/tr.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/uk.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/vi.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/zh_CN.js 87 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/zh_TW.js 93 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/help/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/image/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/importcss/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/link/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/lists/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/media/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/preview/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/quickbars/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/save/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/table/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/dark/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/dark/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/default/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/default/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/document/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/document/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/tinymce-5-dark/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/tinymce-5-dark/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/tinymce-5/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/tinymce-5/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/writer/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/content/writer/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/content.inline.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/skin.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/skin.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/skin.shadowdom.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/oxide/skin.shadowdom.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.inline.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.inline.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.inline.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.js 2 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css 1 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/themes/silver/theme.min.js 4 ●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/tinymce.d.ts 3250 ●●●●● patch | view | raw | blame | history
public/static/tinymce/js/tinymce/tinymce.min.js 4 ●●●● patch | view | raw | blame | history
public/static/vue/axios.min.js 2 ●●●●● patch | view | raw | blame | history
public/static/vue/mixin.js 251 ●●●●● patch | view | raw | blame | history
public/static/vue/mixin_admin.js 188 ●●●●● patch | view | raw | blame | history
public/static/vue/mixinbuyer.js 96 ●●●●● patch | view | raw | blame | history
public/static/vue/mixins/uploader-mixin.js 92 ●●●●● patch | view | raw | blame | history
public/static/vue/mixins/video-player-mixin.js 29 ●●●●● patch | view | raw | blame | history
public/static/vue/mixinseller.js 273 ●●●●● patch | view | raw | blame | history
public/static/vue/moment.min.js 1 ●●●● patch | view | raw | blame | history
public/static/vue/qs.min.js 1 ●●●● patch | view | raw | blame | history
public/static/vue/request.js 33 ●●●●● patch | view | raw | blame | history
public/static/vue/vue.global.js 16725 ●●●●● patch | view | raw | blame | history
public/static/vue/vue.global.prod.js 12 ●●●●● patch | view | raw | blame | history
route/app.php 33 ●●●●● patch | view | raw | blame | history
think 10 ●●●●● patch | view | raw | blame | history
vendor/.gitignore 1 ●●●● patch | view | raw | blame | history
vendor/adbario/php-dot-notation/LICENSE.md 21 ●●●●● patch | view | raw | blame | history
vendor/adbario/php-dot-notation/composer.json 29 ●●●●● patch | view | raw | blame | history
vendor/adbario/php-dot-notation/src/Dot.php 623 ●●●●● patch | view | raw | blame | history
vendor/adbario/php-dot-notation/src/helpers.php 24 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/.gitignore 12 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/.php_cs.dist 65 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/README-CN.md 31 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/README.md 31 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/composer.json 44 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/phpunit.xml 32 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/src/FileForm.php 16 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/src/FileForm/FileField.php 22 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/src/FileFormStream.php 321 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/tests/FileFormTest.php 81 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea-fileform/tests/bootstrap.php 3 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/.php_cs.dist 65 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/CHANGELOG.md 148 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/LICENSE.md 13 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/README.md 16 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/composer.json 80 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Exception/TeaError.php 53 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Exception/TeaRetryError.php 21 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Exception/TeaUnableRetryError.php 41 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Helper.php 112 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Model.php 114 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Parameter.php 50 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Request.php 123 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Response.php 372 ●●●●● patch | view | raw | blame | history
vendor/alibabacloud/tea/src/Tea.php 287 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/.gitattributes 1 ●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/.gitignore 16 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/APIDoc.md 822 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/CHANGELOG 182 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/README.md 203 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/composer.json 49 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK.sln 23 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/AlipayEasySDK.csproj 32 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Client.cs 324 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Models/AlipayOfflineMaterialImageUploadResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Client.cs 528 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Models/AlipaySystemOauthTokenResponse.cs 57 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Client.cs 318 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Models/AlipayOpenAppQrcodeCreateResponse.cs 41 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Client.cs 324 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Models/AlipayOfflineMaterialImageUploadResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Factory/Factory.cs 244 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Client.cs 1832 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicLifeMsgRecallResponse.cs 37 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentCreateResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentModifyResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageSingleSendResponse.cs 37 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageTotalSendResponse.cs 41 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicSettingCategoryQueryResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.cs 37 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Article.cs 34 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Context.cs 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Keyword.cs 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Template.cs 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Text.cs 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Client.cs 964 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceAddResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceUpdateResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateAddResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateUpdateResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Client.cs 322 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Models/AlipayOpenAppMiniTemplatemessageSendResponse.cs 37 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Client.cs 562 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenCertifyResponse.cs 21 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenInitializeResponse.cs 41 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenQueryResponse.cs 49 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/IdentityParam.cs 30 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/MerchantConfig.cs 18 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Client.cs 135 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Models/AlipayTradeAppPayResponse.cs 21 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Client.cs 1598 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayDataDataserviceBillDownloadurlQueryResponse.cs 41 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCancelResponse.cs 61 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCloseResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCreateResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeFastpayRefundQueryResponse.cs 109 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeQueryResponse.cs 177 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeRefundResponse.cs 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/PresetPayToolInfo.cs 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/RefundRoyaltyResult.cs 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeFundBill.cs 34 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleDetail.cs 38 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleInfo.cs 18 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Client.cs 536 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePayResponse.cs 165 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePrecreateResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/TradeFundBill.cs 30 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/VoucherDetail.cs 58 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Client.cs 324 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/AlipayTradeCreateResponse.cs 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/HuabeiConfig.cs 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Client.cs 139 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Models/AlipayTradePagePayResponse.cs 21 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Client.cs 140 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Models/AlipayTradeWapPayResponse.cs 21 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Client.cs 314 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Models/AlipaySecurityRiskContentDetectResponse.cs 49 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/AES/Client.cs 114 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Client.cs 304 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Models/AlipayOpenApiGenericResponse.cs 37 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/README.md 248 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Image/ClientTest.cs 32 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/OAuth/ClientTest.cs 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Qrcode/ClientTest.cs 31 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Video/ClientTest.cs 32 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Factory/FactoryTest.cs 33 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayCertPublicKey_RSA2.crt 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayRootCert.crt 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/appCertPublicKey_2019051064521003.crt 23 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/privateKey.json 4 ●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/sample.mp4 patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/sample.png patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Marketing/OpenLife/ClientTest.cs 205 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Marketing/Pass/ClientTest.cs 100 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Marketing/TemplateMessage/ClientTest.cs 34 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Member/Identification/ClientTest.cs 72 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/App/ClientTest.cs 54 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Common/ClientTest.cs 154 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/FaceToFace/ClientTest.cs 51 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Huabei/ClientTest.cs 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Page/ClientTest.cs 50 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Wap/ClientTest.cs 65 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Security/TextRisk/ClientTest.cs 31 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/TestAccount.cs 87 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/UnitTest.csproj 50 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Util/AES/ClientTest.cs 31 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/csharp/UnitTest/Util/Generic/ClientTest.cs 79 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/README.md 233 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/pom.xml 195 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/image/Client.java 178 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/image/models/AlipayOfflineMaterialImageUploadResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/oauth/Client.java 261 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/oauth/models/AlipaySystemOauthTokenResponse.java 133 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/qrcode/Client.java 176 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/qrcode/models/AlipayOpenAppQrcodeCreateResponse.java 85 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/video/Client.java 178 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/video/models/AlipayOfflineMaterialImageUploadResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/factory/Factory.java 231 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/factory/MultipleFactory.java 201 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunKMSClient.java 286 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunKMSConfig.java 72 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunKMSSigner.java 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunRpcClient.java 353 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/AccessKeyCredentials.java 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/BasicSessionCredentials.java 51 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/EcsRamRoleCredentials.java 47 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/ICredentials.java 7 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/exceptions/CredentialException.java 11 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/CompatibleUrlConnClient.java 155 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/CompositeX509TrustManager.java 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/FormatType.java 29 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/HttpMessage.java 182 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/HttpRequest.java 40 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/HttpResponse.java 33 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/MethodType.java 17 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/TrueHostnameVerifier.java 11 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/CredentialsProviderFactory.java 7 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/ECSMetadataServiceCredentialsFetcher.java 110 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/EcsRamRoleCredentialsProvider.java 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/ICredentialsProvider.java 7 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/RamRoleArnCredentialsProvider.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/StaticCredentialsProvider.java 16 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/AcsURLEncoder.java 17 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/Base64Utils.java 33 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/CredentialType.java 8 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/HmacSHA1Signer.java 41 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/ParameterUtils.java 81 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/StringUtils.java 7 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/AsymmetricSignRequest.java 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/AsymmetricSignResponse.java 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/GetPublicKeyRequest.java 18 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/GetPublicKeyResponse.java 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/RuntimeOptions.java 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/Client.java 793 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicLifeMsgRecallResponse.java 73 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageContentCreateResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageContentModifyResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageSingleSendResponse.java 73 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageTotalSendResponse.java 85 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicSettingCategoryQueryResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.java 73 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Article.java 69 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Context.java 92 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Keyword.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Template.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Text.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/Client.java 439 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassInstanceAddResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassInstanceUpdateResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassTemplateAddResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassTemplateUpdateResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/templatemessage/Client.java 178 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/templatemessage/models/AlipayOpenAppMiniTemplatemessageSendResponse.java 73 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/Client.java 287 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/AlipayUserCertifyOpenCertifyResponse.java 25 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/AlipayUserCertifyOpenInitializeResponse.java 85 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/AlipayUserCertifyOpenQueryResponse.java 109 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/IdentityParam.java 60 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/MerchantConfig.java 24 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/app/Client.java 115 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/app/models/AlipayTradeAppPayResponse.java 25 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/Client.java 698 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayDataDataserviceBillDownloadurlQueryResponse.java 85 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeCancelResponse.java 145 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeCloseResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeCreateResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeFastpayRefundQueryResponse.java 289 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeQueryResponse.java 493 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeRefundResponse.java 253 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/PresetPayToolInfo.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/RefundRoyaltyResult.java 96 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/TradeFundBill.java 72 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/TradeSettleDetail.java 84 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/TradeSettleInfo.java 24 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/Client.java 265 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/AlipayTradePayResponse.java 457 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/AlipayTradePrecreateResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/TradeFundBill.java 60 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/VoucherDetail.java 144 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/huabei/Client.java 179 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/huabei/models/AlipayTradeCreateResponse.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/huabei/models/HuabeiConfig.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/page/Client.java 118 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/page/models/AlipayTradePagePayResponse.java 25 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/wap/Client.java 119 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/wap/models/AlipayTradeWapPayResponse.java 25 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/security/textrisk/Client.java 174 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/security/textrisk/models/AlipaySecurityRiskContentDetectResponse.java 109 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/aes/Client.java 97 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/generic/Client.java 273 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/generic/models/AlipayOpenApiGenericResponse.java 73 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/generic/models/AlipayOpenApiGenericSDKResponse.java 25 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/TestAccount.java 134 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/image/ClientTest.java 38 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/oauth/ClientTest.java 44 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/qrcode/ClientTest.java 34 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/video/ClientTest.java 38 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/marketing/openlife/ClientTest.java 202 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/marketing/pass/ClientTest.java 100 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/marketing/templatemessage/ClientTest.java 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/member/identification/ClientTest.java 74 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/multipleFactory/MultipleFactoryTest.java 62 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/app/ClientTest.java 62 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/common/ClientTest.java 154 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/facetoface/ClientTest.java 56 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/huabei/ClientTest.java 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/page/ClientTest.java 58 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/wap/ClientTest.java 74 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/security/textrisk/ClientTest.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/util/aes/ClientTest.java 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/util/generic/ClientTest.java 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/alipayCertPublicKey_RSA2.crt 43 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/alipayRootCert.crt 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/aliyunAccessKey.json 4 ●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/appCertPublicKey_2021002177673029.crt 24 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/privateKey.json 4 ●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/sample.mp4 patch | view | raw | blame | history
vendor/alipaysdk/easysdk/java/src/test/resources/fixture/sample.png patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel.sln 17 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/EasySDKKernel.csproj 23 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/AlipayConstants.cs 65 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/CertEnvironment.cs 81 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Client.cs 521 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Config.cs 106 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Context.cs 46 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/AES.cs 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/AntCertificationUtil.cs 326 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/ArgumentValidator.cs 34 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/DictionaryUtil.cs 63 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/JsonUtil.cs 53 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/MultipartUtil.cs 79 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/PageUtil.cs 59 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/ResponseChecker.cs 31 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/SignContentExtractor.cs 213 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/Signer.cs 260 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/pom.xml 215 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/AlipayConstants.java 75 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/CertEnvironment.java 82 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/Client.java 493 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/Config.java 110 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/Context.java 81 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/AES.java 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/AntCertificationUtil.java 396 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/JsonUtil.java 51 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/MultipartUtil.java 77 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/PageUtil.java 59 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/ResponseChecker.java 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/SignContentExtractor.java 203 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/Signer.java 115 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/README.md 227 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/Image/Client.php 198 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/Image/Models/AlipayOfflineMaterialImageUploadResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/OAuth/Client.php 283 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/OAuth/Models/AlipaySystemOauthTokenResponse.php 156 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/Qrcode/Client.php 196 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/Qrcode/Models/AlipayOpenAppQrcodeCreateResponse.php 104 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/Video/Client.php 198 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Base/Video/Models/AlipayOfflineMaterialImageUploadResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/AlipayConstants.php 63 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/CertEnvironment.php 60 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Config.php 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/EasySDKKernel.php 466 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Exceptions/RuntimeException.php 10 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Factory.php 245 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/MultipleFactory.php 249 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/AES.php 94 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/AlipayEncrypt.php 12 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/AntCertificationUtil.php 612 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/JsonUtil.php 56 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/PageUtil.php 60 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/ResponseChecker.php 19 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/SignContentExtractor.php 58 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Kernel/Util/Signer.php 72 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Client.php 866 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicLifeMsgRecallResponse.php 91 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentCreateResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentModifyResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageSingleSendResponse.php 91 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageTotalSendResponse.php 104 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicSettingCategoryQueryResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.php 91 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Article.php 87 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Context.php 114 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Keyword.php 51 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Template.php 53 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Text.php 51 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Client.php 482 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassInstanceAddResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassInstanceUpdateResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassTemplateAddResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassTemplateUpdateResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/TemplateMessage/Client.php 200 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Marketing/TemplateMessage/Models/AlipayOpenAppMiniTemplatemessageSendResponse.php 91 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Member/Identification/Client.php 321 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/AlipayUserCertifyOpenCertifyResponse.php 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/AlipayUserCertifyOpenInitializeResponse.php 104 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/AlipayUserCertifyOpenQueryResponse.php 130 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/IdentityParam.php 77 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/MerchantConfig.php 38 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/App/Client.php 129 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/App/Models/AlipayTradeAppPayResponse.php 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Client.php 757 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayDataDataserviceBillDownloadurlQueryResponse.php 104 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeCancelResponse.php 169 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeCloseResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeCreateResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeFastpayRefundQueryResponse.php 352 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeQueryResponse.php 573 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeRefundResponse.php 313 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/PresetPayToolInfo.php 53 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/RefundRoyaltyResult.php 116 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/TradeFundBill.php 90 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/TradeSettleDetail.php 103 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/TradeSettleInfo.php 52 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Client.php 293 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/AlipayTradePayResponse.php 534 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/AlipayTradePrecreateResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/TradeFundBill.php 77 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/VoucherDetail.php 168 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Huabei/Client.php 202 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Huabei/Models/AlipayTradeCreateResponse.php 117 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Huabei/Models/HuabeiConfig.php 51 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Page/Client.php 133 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Page/Models/AlipayTradePagePayResponse.php 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Wap/Client.php 135 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Payment/Wap/Models/AlipayTradeWapPayResponse.php 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Security/TextRisk/Client.php 192 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Security/TextRisk/Models/AlipaySecurityRiskContentDetectResponse.php 132 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Util/AES/Client.php 111 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Util/Generic/Client.php 309 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Util/Generic/Models/AlipayOpenApiGenericResponse.php 91 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/src/Util/Generic/Models/AlipayOpenApiGenericSDKResponse.php 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/TestAccount.php 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/base/image/ClientTest.php 23 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/base/oauth/ClientTest.php 37 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/base/qrcode/ClientTest.php 20 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/base/video/ClientTest.php 24 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/marketing/openlife/ClientTest.php 145 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/marketing/pass/ClientTest.php 102 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/marketing/templatemessage/ClientTest.php 27 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/member/identification/ClientTest.php 55 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/multipleFactory/ClientTest.php 35 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/payment/app/ClientTest.php 39 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/payment/common/ClientTest.php 93 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/payment/facetoface/ClientTest.php 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/payment/huabei/ClientTest.php 25 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/payment/page/ClientTest.php 36 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/payment/wap/ClientTest.php 41 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/resources/fixture/alipayCertPublicKey_RSA2.crt 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/resources/fixture/alipayRootCert.crt 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/resources/fixture/appCertPublicKey_2019051064521003.crt 23 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/resources/fixture/privateKey.json 4 ●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/resources/fixture/sample.mp4 patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/resources/fixture/sample.png patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/security/textrisk/ClientTest.php 20 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/util/aes/ClientTest.php 27 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/php/test/util/generic/ClientTest.php 95 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/image/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/image/main.tea 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/oauth/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/oauth/main.tea 150 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/qrcode/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/qrcode/main.tea 83 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/video/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/base/video/main.tea 88 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/kernel/Teafile 22 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/kernel/main.tea 50 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/marketing/openlife/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/marketing/openlife/main.tea 644 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/marketing/pass/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/marketing/pass/main.tea 317 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/marketing/templateMessage/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/marketing/templateMessage/main.tea 83 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/member/identification/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/member/identification/main.tea 204 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/app/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/app/main.tea 42 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/common/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/common/main.tea 650 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/faceToFace/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/faceToFace/main.tea 215 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/huabei/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/huabei/main.tea 91 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/page/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/page/main.tea 44 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/wap/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/payment/wap/main.tea 45 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/security/textRisk/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/security/textRisk/main.tea 82 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/trans/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/trans/main.tea 94 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/util/aes/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/util/aes/main.tea 15 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/util/generic/Teafile 26 ●●●●● patch | view | raw | blame | history
vendor/alipaysdk/easysdk/tea/util/generic/main.tea 157 ●●●●● patch | view | raw | blame | history
vendor/autoload.php 25 ●●●●● patch | view | raw | blame | history
vendor/bin/CertificateDownloader.php 119 ●●●●● patch | view | raw | blame | history
vendor/bin/CertificateDownloader.php.bat 5 ●●●●● patch | view | raw | blame | history
vendor/bin/var-dump-server 119 ●●●●● patch | view | raw | blame | history
vendor/bin/var-dump-server.bat 5 ●●●●● patch | view | raw | blame | history
vendor/composer/ClassLoader.php 579 ●●●●● patch | view | raw | blame | history
vendor/composer/InstalledVersions.php 359 ●●●●● patch | view | raw | blame | history
vendor/composer/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/composer/autoload_classmap.php 16 ●●●●● patch | view | raw | blame | history
vendor/composer/autoload_files.php 23 ●●●●● patch | view | raw | blame | history
vendor/composer/autoload_namespaces.php 10 ●●●●● patch | view | raw | blame | history
vendor/composer/autoload_psr4.php 46 ●●●●● patch | view | raw | blame | history
vendor/composer/autoload_real.php 50 ●●●●● patch | view | raw | blame | history
vendor/composer/autoload_static.php 289 ●●●●● patch | view | raw | blame | history
vendor/composer/installed.json 3183 ●●●●● patch | view | raw | blame | history
vendor/composer/installed.php 443 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/README.md 189 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/composer.json 54 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/extension.neon 22 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/MatchAllResult.php 46 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/MatchAllStrictGroupsResult.php 46 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/MatchAllWithOffsetsResult.php 48 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/MatchResult.php 39 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/MatchStrictGroupsResult.php 39 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/MatchWithOffsetsResult.php 41 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php 142 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PHPStan/PregMatchFlags.php 70 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php 65 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php 119 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php 91 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php 112 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/PcreException.php 55 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/Preg.php 430 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/Regex.php 176 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/ReplaceResult.php 43 ●●●●● patch | view | raw | blame | history
vendor/composer/pcre/src/UnexpectedNullMatchException.php 20 ●●●●● patch | view | raw | blame | history
vendor/composer/platform_check.php 26 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/.gitignore 6 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/README.md 407 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/composer.json 21 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/generator.php 327 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/ASECryptoStream.php 90 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/AplusContent.php 274 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Authorization.php 41 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/CatalogItems.php 79 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Easy.php 110 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/FbaInboundEligibility.php 41 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/FbaInventory.php 45 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/FbaSmallAndLight.php 136 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Feeds.php 145 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Finances.php 120 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/FulfillmentInbound.php 421 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/FulfillmentOutbound.php 288 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/ListingsItems.php 131 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/ListingsRestrictions.php 45 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/MerchantFulfillment.php 176 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Messaging.php 334 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Notifications.php 188 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Orders.php 231 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/ProductFees.php 80 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/ProductPricing.php 165 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/ProductTypeDefinitions.php 73 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Reports.php 208 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Sales.php 47 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Sellers.php 34 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Services.php 161 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/ShipmentInvoicing.php 78 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Shipping.php 199 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Solicitations.php 66 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Tokens.php 38 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/Uploads.php 43 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentInventory.php 38 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentOrders.php 86 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentPayments.php 36 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentSandboxTestData.php 56 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentShipping.php 84 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentTransactions.php 54 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorInvoices.php 36 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorOrders.php 125 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorShipments.php 36 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Api/VendorTransactionStatus.php 36 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Client.php 117 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Credentials.php 318 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Helper/Feeder.php 130 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/HttpClientFactoryTrait.php 13 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/IncorrectResponseException.php 6 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/Signer.php 107 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/SignerException.php 6 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/SimpleTokenStorage.php 38 ●●●●● patch | view | raw | blame | history
vendor/double-break/spapi-php/src/TokenStorageInterface.php 7 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/.php_cs 23 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/CHANGELOG.md 1352 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/Dockerfile 18 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/LICENSE 27 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/README.md 97 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/UPGRADING.md 1203 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/composer.json 92 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Client.php 501 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/ClientInterface.php 87 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php 321 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php 84 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php 91 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php 72 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php 410 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php 27 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/ClientException.php 9 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php 37 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php 23 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php 7 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/RequestException.php 191 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/SeekException.php 27 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/ServerException.php 9 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php 6 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Exception/TransferException.php 6 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php 585 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php 27 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php 45 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php 219 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php 92 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php 195 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/Proxy.php 55 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php 545 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/HandlerStack.php 277 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/MessageFormatter.php 185 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Middleware.php 254 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Pool.php 134 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php 111 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php 264 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/RequestOptions.php 263 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/RetryMiddleware.php 128 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/TransferStats.php 126 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/UriTemplate.php 237 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/Utils.php 92 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/functions.php 334 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/guzzle/src/functions_include.php 6 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/CHANGELOG.md 116 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/LICENSE 24 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/README.md 546 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/composer.json 53 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/AggregateException.php 17 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/CancellationException.php 10 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/Coroutine.php 169 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/Create.php 84 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/Each.php 90 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/EachPromise.php 247 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/FulfilledPromise.php 84 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/Is.php 46 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/Promise.php 278 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/PromiseInterface.php 97 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/PromisorInterface.php 16 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/RejectedPromise.php 91 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/RejectionException.php 48 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/TaskQueue.php 67 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/TaskQueueInterface.php 24 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/Utils.php 276 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/functions.php 363 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/promises/src/functions_include.php 6 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/.github/FUNDING.yml 2 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/.github/stale.yml 14 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/.github/workflows/ci.yml 30 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/.github/workflows/integration.yml 36 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/.github/workflows/static.yml 29 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/.php_cs.dist 56 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/CHANGELOG.md 324 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/LICENSE 26 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/README.md 844 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/composer.json 71 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/AppendStream.php 246 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/BufferStream.php 142 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/CachingStream.php 147 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/DroppingStream.php 45 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/FnStream.php 163 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Header.php 71 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/InflateStream.php 56 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/LazyOpenStream.php 42 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/LimitStream.php 157 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Message.php 251 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/MessageTrait.php 269 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/MimeType.php 140 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/MultipartStream.php 158 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/NoSeekStream.php 25 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/PumpStream.php 170 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Query.php 113 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Request.php 152 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Response.php 155 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Rfc7230.php 19 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/ServerRequest.php 379 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Stream.php 270 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php 152 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/StreamWrapper.php 165 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/UploadedFile.php 328 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Uri.php 810 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/UriComparator.php 55 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/UriNormalizer.php 219 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/UriResolver.php 222 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/Utils.php 428 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/functions.php 422 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/psr7/src/functions_include.php 6 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/uri-template/CHANGELOG.md 55 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/uri-template/LICENSE 23 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/uri-template/README.md 33 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/uri-template/composer.json 76 ●●●●● patch | view | raw | blame | history
vendor/guzzlehttp/uri-template/src/UriTemplate.php 295 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/.editorconfig 10 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/.gitignore 4 ●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/.php_cs 7 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/.scrutinizer.yml 34 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/.travis.yml 29 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/clover/.gitignore 2 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/composer.json 30 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/phpspec.yml 6 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/phpunit.php 3 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/phpunit.xml 29 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/readme.md 20 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/spec/CachedAdapterSpec.php 435 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/CacheInterface.php 101 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/CachedAdapter.php 346 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/AbstractCache.php 418 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Adapter.php 115 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Memcached.php 59 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Memory.php 22 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Noop.php 171 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/PhpRedis.php 62 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Predis.php 75 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Psr6Cache.php 59 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/src/Storage/Stash.php 60 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/AdapterCacheTests.php 104 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/InspectionTests.php 16 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/MemcachedTests.php 35 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/MemoryCacheTests.php 255 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/NoopCacheTests.php 35 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/PhpRedisTests.php 45 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/PredisTests.php 55 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/Psr6CacheTest.php 45 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem-cached-adapter/tests/StashTest.php 43 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/CODE_OF_CONDUCT.md 76 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/SECURITY.md 16 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/composer.json 68 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/deprecations.md 19 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/AbstractAdapter.php 72 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php 705 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php 12 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Ftp.php 584 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Ftpd.php 48 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Local.php 533 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/NullAdapter.php 144 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php 33 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Polyfill/StreamedCopyTrait.php 51 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php 44 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php 9 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/Polyfill/StreamedWritingTrait.php 60 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Adapter/SynologyFtp.php 8 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/AdapterInterface.php 118 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Config.php 107 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/ConfigAwareTrait.php 49 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/ConnectionErrorException.php 9 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/ConnectionRuntimeException.php 9 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/CorruptedPathDetected.php 17 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Directory.php 31 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Exception.php 8 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/File.php 205 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/FileExistsException.php 37 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/FileNotFoundException.php 37 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Filesystem.php 409 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/FilesystemException.php 7 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/FilesystemInterface.php 284 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/FilesystemNotFoundException.php 12 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Handler.php 137 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/InvalidRootException.php 9 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/MountManager.php 648 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/NotSupportedException.php 37 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/AbstractPlugin.php 24 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/EmptyDir.php 34 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/ForcedCopy.php 44 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/ForcedRename.php 44 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/GetWithMetadata.php 51 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/ListFiles.php 35 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/ListPaths.php 36 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/ListWith.php 60 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/PluggableTrait.php 97 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Plugin/PluginNotFoundException.php 10 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/PluginInterface.php 20 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/ReadInterface.php 88 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/RootViolationException.php 10 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/SafeStorage.php 39 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/UnreadableFileException.php 18 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Util.php 354 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Util/ContentListingFormatter.php 122 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Util/MimeType.php 80 ●●●●● patch | view | raw | blame | history
vendor/league/flysystem/src/Util/StreamHasher.php 36 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/CHANGELOG.md 59 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/composer.json 34 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php 13 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/ExtensionLookup.php 14 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/ExtensionMimeTypeDetector.php 56 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/ExtensionToMimeTypeMap.php 10 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php 106 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php 2298 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/MimeTypeDetector.php 19 ●●●●● patch | view | raw | blame | history
vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php 30 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/.editorconfig 22 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/.phive/phars.xml 4 ●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/.php-cs-fixer.dist.php 71 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/.phpdoc/template/base.html.twig 15 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/.tool-versions 1 ●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/LICENSE 24 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/README.md 114 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/composer.json 76 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/ContentLength.rst 79 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/FlySystem.rst 33 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/Nginx.rst 16 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/Options.rst 61 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/PSR7Streams.rst 18 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/StreamOutput.rst 33 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/Symfony.rst 126 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/Varnish.rst 22 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/guides/index.rst 100 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/phpdoc.dist.xml 39 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/phpunit.xml.dist 14 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/psalm.xml 53 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Bigint.php 174 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/DeflateStream.php 27 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception.php 12 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception/EncodingException.php 14 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception/FileNotFoundException.php 23 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception/FileNotReadableException.php 23 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception/IncompatibleOptionsException.php 14 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception/OverflowException.php 18 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Exception/StreamNotReadableException.php 23 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/File.php 470 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Option/Archive.php 276 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Option/File.php 122 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Option/Method.php 23 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Option/Version.php 27 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/Stream.php 265 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/src/ZipStream.php 608 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/test/BigintTest.php 66 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/test/ZipStreamTest.php 619 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/test/bootstrap.php 7 ●●●●● patch | view | raw | blame | history
vendor/maennchen/zipstream-php/test/bug/BugHonorFileTimeTest.php 40 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/.github/workflows/main.yml 153 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/README.md 173 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/classes/src/Complex.php 388 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/classes/src/Exception.php 13 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/classes/src/Functions.php 823 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/classes/src/Operations.php 210 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/composer.json 40 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/examples/complexTest.php 154 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/examples/testFunctions.php 52 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/examples/testOperations.php 35 ●●●●● patch | view | raw | blame | history
vendor/markbaker/complex/license.md 25 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/.github/workflows/main.yaml 124 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/README.md 215 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/buildPhar.php 62 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Builder.php 70 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Decomposition/Decomposition.php 27 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Decomposition/LU.php 260 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Decomposition/QR.php 191 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Div0Exception.php 13 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Exception.php 13 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Functions.php 376 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Matrix.php 423 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operations.php 157 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operators/Addition.php 68 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operators/DirectSum.php 64 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operators/Division.php 35 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operators/Multiplication.php 86 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operators/Operator.php 78 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/classes/src/Operators/Subtraction.php 68 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/composer.json 52 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/examples/test.php 33 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/infection.json.dist 17 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/license.md 25 ●●●●● patch | view | raw | blame | history
vendor/markbaker/matrix/phpstan.neon 6 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/LICENSE 18 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/README.md 194 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/SECURITY.md 11 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/composer.json 36 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/src/Enum.php 318 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/src/PHPUnit/Comparator.php 54 ●●●●● patch | view | raw | blame | history
vendor/myclabs/php-enum/stubs/Stringable.php 11 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/CHANGELOG.md 1622 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/CONTRIBUTING.md 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/README.md 141 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/composer.json 122 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ArrayEnabled.php 122 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/BinaryComparison.php 136 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php 5665 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Category.php 21 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DAverage.php 44 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCount.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCountA.php 44 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DGet.php 49 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMax.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMin.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DProduct.php 44 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDev.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDevP.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DSum.php 44 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVar.php 47 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVarP.php 47 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DatabaseAbstract.php 177 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Constants.php 38 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Current.php 60 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Date.php 167 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateParts.php 154 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php 163 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days.php 62 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days360.php 118 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Difference.php 153 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Helpers.php 287 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php 104 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/NetworkDays.php 119 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Time.php 130 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeParts.php 135 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php 80 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Week.php 274 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/WorkDay.php 198 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/YearFrac.php 124 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentHelper.php 190 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentProcessor.php 159 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/BranchPruner.php 201 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/CyclicReferenceStack.php 65 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/FormattedNumber.php 147 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Logger.php 126 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/Operand.php 10 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php 355 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselI.php 141 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselJ.php 176 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselK.php 130 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselY.php 137 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BitWise.php 247 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Compare.php 82 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Complex.php 120 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexFunctions.php 592 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexOperations.php 128 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Constants.php 11 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBase.php 69 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBinary.php 163 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertDecimal.php 213 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertHex.php 175 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertOctal.php 174 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertUOM.php 679 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/EngineeringValidations.php 27 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Erf.php 109 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ErfC.php 77 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Exception.php 22 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ExceptionHandler.php 24 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Amortization.php 213 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/CashFlowValidations.php 41 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic.php 195 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Cumulative.php 138 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Interest.php 213 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/InterestAndPrincipal.php 44 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Payments.php 116 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Single.php 107 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/NonPeriodic.php 301 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/Periodic.php 157 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Constants.php 19 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Coupons.php 407 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Depreciation.php 265 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Dollar.php 127 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/FinancialValidations.php 122 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Helpers.php 58 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/InterestRate.php 71 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php 151 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php 283 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php 134 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/SecurityValidations.php 32 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php 153 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/TreasuryBill.php 146 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaParser.php 616 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaToken.php 131 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php 322 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ErrorValue.php 68 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ExcelError.php 155 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/Value.php 317 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/MakeMatrix.php 12 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php 39 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Boolean.php 36 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Conditional.php 211 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Operations.php 163 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Address.php 123 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/ExcelMatch.php 249 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Filter.php 72 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Formula.php 41 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/HLookup.php 121 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Helpers.php 74 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Hyperlink.php 41 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Indirect.php 128 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Lookup.php 105 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupBase.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupRefValidations.php 34 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Matrix.php 138 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Offset.php 148 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/RowColumnInformation.php 210 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Selection.php 51 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Sort.php 309 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Unique.php 131 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/VLookup.php 117 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Absolute.php 37 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Angle.php 63 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Arabic.php 92 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Base.php 65 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Ceiling.php 165 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Combinations.php 103 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Exp.php 37 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Factorial.php 126 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Floor.php 191 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Gcd.php 65 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Helpers.php 111 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/IntClass.php 40 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Lcm.php 111 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Logarithms.php 102 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php 179 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Operations.php 155 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Random.php 99 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Roman.php 846 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Round.php 236 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SeriesSum.php 53 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sign.php 38 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sqrt.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Subtotal.php 127 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sum.php 110 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SumSquares.php 133 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosecant.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosine.php 116 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cotangent.php 118 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Secant.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Sine.php 116 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Tangent.php 160 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trunc.php 36 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/AggregateBase.php 59 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages.php 259 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages/Mean.php 126 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Conditional.php 293 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Confidence.php 51 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Counts.php 96 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Deviations.php 138 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Beta.php 279 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Binomial.php 231 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/ChiSquared.php 331 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/DistributionValidations.php 21 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Exponential.php 54 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/F.php 63 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Fisher.php 72 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Gamma.php 148 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/GammaBase.php 388 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/HyperGeometric.php 75 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/LogNormal.php 139 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/NewtonRaphson.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Normal.php 180 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Poisson.php 66 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StandardNormal.php 158 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StudentT.php 132 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Weibull.php 57 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/MaxMinBase.php 17 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Maximum.php 85 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Minimum.php 85 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Percentiles.php 202 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Permutations.php 100 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Size.php 97 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StandardDeviations.php 89 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Standardize.php 49 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StatisticalValidations.php 36 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Trends.php 425 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/VarianceBase.php 28 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Variances.php 186 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CaseConvert.php 77 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CharacterConvert.php 81 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Concatenate.php 137 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Extract.php 270 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Format.php 313 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Helpers.php 82 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Replace.php 116 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Search.php 97 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Text.php 233 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Trim.php 50 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php 119 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Web/Service.php 73 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/Translations.xlsx patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/bg/config 24 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/bg/functions 409 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/cs/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/cs/functions 520 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/da/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/da/functions 538 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/de/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/de/functions 534 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/en/uk/config 24 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/es/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/es/functions 538 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fi/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fi/functions 538 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fr/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fr/functions 525 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/hu/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/hu/functions 538 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/it/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/it/functions 537 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nb/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nb/functions 539 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nl/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nl/functions 537 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pl/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pl/functions 536 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/br/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/br/functions 528 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/functions 538 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/ru/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/ru/functions 555 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/sv/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/sv/functions 533 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/tr/config 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/tr/functions 537 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressHelper.php 177 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressRange.php 27 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AdvancedValueBinder.php 211 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php 825 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellAddress.php 148 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellRange.php 134 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/ColumnRange.php 125 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php 678 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataType.php 89 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidation.php 421 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidator.php 117 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php 79 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php 96 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IValueBinder.php 14 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IgnoredErrors.php 62 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/RowRange.php 93 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/StringValueBinder.php 118 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/CellReferenceHelper.php 119 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Axis.php 344 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/AxisText.php 63 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Chart.php 770 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/ChartColor.php 160 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php 412 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeriesValues.php 569 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Exception.php 9 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/GridLines.php 13 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Layout.php 524 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Legend.php 174 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/PlotArea.php 207 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Properties.php 884 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/IRenderer.php 22 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraph.php 40 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraphRendererBase.php 882 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/MtJpGraphRenderer.php 38 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/PHP Charting Libraries.txt 23 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Title.php 171 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/TrendLine.php 217 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php 469 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/CellsFactory.php 20 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache1.php 82 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache3.php 80 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Comment.php 343 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DefinedName.php 269 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php 509 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php 140 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Exception.php 9 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php 175 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Dimension.php 110 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Downloader.php 101 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Handler.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php 860 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Sample.php 299 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Size.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/TextGrid.php 124 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IComparable.php 13 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php 236 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedFormula.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedRange.php 55 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/BaseReader.php 223 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php 744 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv/Delimiter.php 145 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/DefaultReadFilter.php 18 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Exception.php 9 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric.php 584 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/PageSetup.php 147 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Properties.php 161 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Styles.php 273 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php 1142 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php 15 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReader.php 124 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods.php 805 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/AutoFilter.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/BaseLoader.php 21 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/DefinedNames.php 70 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php 97 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/PageSettings.php 171 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/Properties.php 136 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Security/XmlScanner.php 117 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Slk.php 564 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls.php 7550 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color.php 35 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF5.php 73 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF8.php 73 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BuiltIn.php 29 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ConditionalFormatting.php 49 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/DataValidationHelper.php 72 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ErrorCode.php 24 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Escher.php 607 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/MD5.php 193 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/RC4.php 59 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/Border.php 37 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellAlignment.php 50 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellFont.php 39 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/FillPattern.php 46 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 2352 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/AutoFilter.php 161 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/BaseParserClass.php 21 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Chart.php 1572 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ColumnAndRowAttributes.php 219 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php 331 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php 65 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Hyperlinks.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Namespaces.php 118 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/PageSetup.php 170 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Properties.php 95 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SharedFormula.php 26 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViewOptions.php 138 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViews.php 199 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Styles.php 436 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/TableReader.php 116 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Theme.php 64 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/WorkbookView.php 141 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php 718 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/DataValidations.php 177 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/PageSettings.php 130 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Properties.php 155 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style.php 107 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Alignment.php 58 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Border.php 110 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Fill.php 63 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Font.php 79 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/NumberFormat.php 33 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/StyleBase.php 30 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php 1235 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/ITextElement.php 34 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/RichText.php 164 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/Run.php 73 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/TextElement.php 69 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Settings.php 191 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/CodePage.php 113 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php 548 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Drawing.php 152 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher.php 52 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer.php 60 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer.php 69 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php 300 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer.php 142 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer.php 32 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE.php 83 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php 50 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php 195 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Font.php 718 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/IntOrFloat.php 17 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE.php 552 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/ChainedBlockStream.php 187 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS.php 207 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/File.php 62 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/Root.php 406 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLERead.php 307 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/PasswordHasher.php 106 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/StringHelper.php 650 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/TimeZone.php 75 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php 425 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/ExponentialBestFit.php 108 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LinearBestFit.php 75 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LogarithmicBestFit.php 80 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php 203 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PowerBestFit.php 98 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/Trend.php 122 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/XMLWriter.php 96 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Xls.php 273 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php 1572 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Alignment.php 501 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Border.php 221 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Borders.php 374 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Color.php 418 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Conditional.php 337 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellMatcher.php 271 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellStyleAssessor.php 38 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalColorScale.php 92 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php 76 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php 235 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php 55 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php 212 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/StyleMerger.php 115 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard.php 66 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Blanks.php 95 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/CellValue.php 183 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/DateValue.php 109 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Duplicates.php 74 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Errors.php 91 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Expression.php 69 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/TextValue.php 158 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardAbstract.php 179 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardInterface.php 25 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Fill.php 317 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Font.php 835 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php 517 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/BaseFormatter.php 25 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php 211 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php 189 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php 70 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php 315 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/PercentageFormatter.php 48 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Accounting.php 102 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Currency.php 125 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Date.php 125 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/DateTime.php 47 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/DateTimeWizard.php 46 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Duration.php 153 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Locale.php 39 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Number.php 57 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/NumberBase.php 81 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Percentage.php 40 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Scientific.php 33 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Time.php 105 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Wizard.php 8 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Protection.php 184 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/RgbTint.php 172 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php 705 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Supervisor.php 156 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Theme.php 259 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php 1084 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php 380 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column/Rule.php 406 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFit.php 51 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php 557 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/CellIterator.php 85 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Column.php 110 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnCellIterator.php 198 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnDimension.php 131 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnIterator.php 165 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Dimension.php 124 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing.php 260 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing/Shadow.php 247 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooter.php 426 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooterDrawing.php 24 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Iterator.php 70 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php 335 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageBreak.php 57 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageMargins.php 193 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageSetup.php 824 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Pane.php 48 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ProtectedRange.php 45 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Protection.php 474 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Row.php 110 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php 188 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowDimension.php 110 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowIterator.php 155 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/SheetView.php 199 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php 578 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/Column.php 240 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/TableStyle.php 218 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Validations.php 118 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php 3664 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php 137 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Csv.php 306 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Exception.php 9 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Html.php 1868 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/IWriter.php 87 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods.php 159 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/AutoFilters.php 57 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Comment.php 30 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Style.php 320 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Content.php 356 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Formula.php 119 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Meta.php 122 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/MetaInf.php 60 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Mimetype.php 16 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/NamedExpressions.php 137 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Settings.php 152 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Styles.php 65 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Thumbnails.php 16 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/WriterPart.php 31 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php 227 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php 58 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php 101 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Tcpdf.php 84 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls.php 892 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/BIFFwriter.php 212 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/CellDataValidation.php 78 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ConditionalHelper.php 59 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ErrorCode.php 28 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Escher.php 497 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Font.php 133 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Parser.php 1654 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellAlignment.php 59 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellBorder.php 40 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellFill.php 46 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/ColorMap.php 90 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Workbook.php 1135 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php 3145 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Xf.php 374 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php 722 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/AutoFilter.php 125 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Chart.php 1935 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Comments.php 251 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php 281 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DefinedNames.php 242 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DocProps.php 250 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php 583 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/FunctionPrefix.php 193 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php 511 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsRibbon.php 46 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsVBA.php 40 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/StringTable.php 344 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Style.php 727 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Table.php 115 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Theme.php 744 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php 214 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php 1599 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/WriterPart.php 29 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream0.php 17 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream2.php 21 ●●●●● patch | view | raw | blame | history
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream3.php 21 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/CHANGELOG.md 16 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/LICENSE.txt 19 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/README.md 9 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/composer.json 25 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/src/CacheException.php 10 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/src/CacheItemInterface.php 105 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/src/CacheItemPoolInterface.php 138 ●●●●● patch | view | raw | blame | history
vendor/psr/cache/src/InvalidArgumentException.php 13 ●●●●● patch | view | raw | blame | history
vendor/psr/container/.gitignore 3 ●●●●● patch | view | raw | blame | history
vendor/psr/container/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/psr/container/README.md 13 ●●●●● patch | view | raw | blame | history
vendor/psr/container/composer.json 27 ●●●●● patch | view | raw | blame | history
vendor/psr/container/src/ContainerExceptionInterface.php 12 ●●●●● patch | view | raw | blame | history
vendor/psr/container/src/ContainerInterface.php 36 ●●●●● patch | view | raw | blame | history
vendor/psr/container/src/NotFoundExceptionInterface.php 10 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/CHANGELOG.md 31 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/README.md 12 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/composer.json 30 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/src/ClientExceptionInterface.php 10 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/src/ClientInterface.php 20 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/src/NetworkExceptionInterface.php 24 ●●●●● patch | view | raw | blame | history
vendor/psr/http-client/src/RequestExceptionInterface.php 24 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/README.md 12 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/composer.json 35 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/src/RequestFactoryInterface.php 18 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/src/ResponseFactoryInterface.php 18 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/src/ServerRequestFactoryInterface.php 24 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/src/StreamFactoryInterface.php 45 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/src/UploadedFileFactoryInterface.php 34 ●●●●● patch | view | raw | blame | history
vendor/psr/http-factory/src/UriFactoryInterface.php 17 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/CHANGELOG.md 36 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/README.md 16 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/composer.json 26 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/docs/PSR7-Interfaces.md 130 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/docs/PSR7-Usage.md 159 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/MessageInterface.php 189 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/RequestInterface.php 131 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/ResponseInterface.php 70 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/ServerRequestInterface.php 263 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/StreamInterface.php 160 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/UploadedFileInterface.php 125 ●●●●● patch | view | raw | blame | history
vendor/psr/http-message/src/UriInterface.php 326 ●●●●● patch | view | raw | blame | history
vendor/psr/log/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/psr/log/README.md 58 ●●●●● patch | view | raw | blame | history
vendor/psr/log/composer.json 26 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/AbstractLogger.php 15 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/InvalidArgumentException.php 7 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/LogLevel.php 18 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/LoggerAwareInterface.php 14 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/LoggerAwareTrait.php 22 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/LoggerInterface.php 97 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/LoggerTrait.php 98 ●●●●● patch | view | raw | blame | history
vendor/psr/log/src/NullLogger.php 26 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/.editorconfig 12 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/LICENSE.md 21 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/README.md 8 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/composer.json 25 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/src/CacheException.php 10 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/src/CacheInterface.php 114 ●●●●● patch | view | raw | blame | history
vendor/psr/simple-cache/src/InvalidArgumentException.php 13 ●●●●● patch | view | raw | blame | history
vendor/ralouphie/getallheaders/LICENSE 21 ●●●●● patch | view | raw | blame | history
vendor/ralouphie/getallheaders/README.md 27 ●●●●● patch | view | raw | blame | history
vendor/ralouphie/getallheaders/composer.json 26 ●●●●● patch | view | raw | blame | history
vendor/ralouphie/getallheaders/src/getallheaders.php 46 ●●●●● patch | view | raw | blame | history
vendor/services.php 8 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Idn.php 933 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Info.php 23 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/README.md 12 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php 384 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php 33 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php 8 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php 2638 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php 308 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php 71 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php 273 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php 5778 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php 65 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/bootstrap.php 145 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/bootstrap80.php 125 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-idn/composer.json 40 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/Normalizer.php 310 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/README.md 14 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php 17 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php 945 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php 2065 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php 876 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php 3695 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/bootstrap.php 23 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/bootstrap80.php 19 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-intl-normalizer/composer.json 36 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/Mbstring.php 1045 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/README.md 13 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php 119 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php 1397 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php 5 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php 1489 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/bootstrap.php 172 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/bootstrap80.php 167 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-mbstring/composer.json 38 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/Php80.php 115 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/PhpToken.php 103 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/README.md 25 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php 31 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php 16 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php 20 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php 16 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php 16 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/bootstrap.php 42 ●●●●● patch | view | raw | blame | history
vendor/symfony/polyfill-php80/composer.json 37 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/CHANGELOG.md 72 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/AmqpCaster.php 212 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ArgsStub.php 80 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/Caster.php 170 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ClassStub.php 106 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ConstStub.php 33 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/CutArrayStub.php 30 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/CutStub.php 64 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/DOMCaster.php 304 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/DateCaster.php 127 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/DoctrineCaster.php 62 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/DsCaster.php 70 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/DsPairStub.php 28 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/EnumStub.php 30 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ExceptionCaster.php 388 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/FiberCaster.php 43 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/FrameStub.php 30 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/GmpCaster.php 32 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ImagineCaster.php 37 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ImgStub.php 26 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/IntlCaster.php 172 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/LinkStub.php 108 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/MemcachedCaster.php 81 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/MysqliCaster.php 33 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/PdoCaster.php 122 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/PgSqlCaster.php 156 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php 33 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/RdKafkaCaster.php 186 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/RedisCaster.php 149 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ReflectionCaster.php 440 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/ResourceCaster.php 100 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/SplCaster.php 234 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/StubCaster.php 84 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/SymfonyCaster.php 97 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/TraceStub.php 36 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/UuidCaster.php 30 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/XmlReaderCaster.php 91 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Caster/XmlResourceCaster.php 63 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/AbstractCloner.php 388 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/ClonerInterface.php 23 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/Cursor.php 43 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/Data.php 422 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/DumperInterface.php 53 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/Stub.php 67 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Cloner/VarCloner.php 286 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php 79 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php 23 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php 119 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Command/ServerDumpCommand.php 112 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/AbstractDumper.php 197 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/CliDumper.php 643 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php 32 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php 22 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php 51 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php 126 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php 43 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/DataDumperInterface.php 24 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/HtmlDumper.php 986 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Dumper/ServerDumper.php 53 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Exception/ThrowingCasterException.php 26 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/README.md 15 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Resources/bin/var-dump-server 67 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css 130 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Resources/functions/dump.php 50 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js 10 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Server/Connection.php 99 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Server/DumpServer.php 115 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/Test/VarDumperTestTrait.php 84 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/VarDumper.php 112 ●●●●● patch | view | raw | blame | history
vendor/symfony/var-dumper/composer.json 49 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/README.MD 19 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/composer.json 24 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/AbstractClient.php 722 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/AbstractModel.php 129 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/CircuitBreaker.php 155 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/CommonClient.php 45 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/Credential.php 107 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/Exception/TencentCloudSDKException.php 77 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/Http/HttpConnection.php 86 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/Profile/ClientProfile.php 227 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/Profile/HttpProfile.php 215 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/common/src/TencentCloud/Common/Sign.php 49 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/README.MD 20 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/composer.json 23 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSignStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsSignRequest.php 245 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsSignResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsTemplateRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsTemplateResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddTemplateStatus.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatistics.php 149 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatisticsRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatisticsResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSignStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsSignRequest.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsSignResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsTemplateRequest.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsTemplateResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteTemplateStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSignListStatus.php 169 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsSignListRequest.php 73 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsSignListResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsTemplateListRequest.php 73 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsTemplateListResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeTemplateListStatus.php 121 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySignStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsSignRequest.php 257 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsSignResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsTemplateRequest.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsTemplateResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifyTemplateStatus.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatus.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusByPhoneNumberRequest.php 121 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusByPhoneNumberResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusRequest.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatus.php 137 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusByPhoneNumberRequest.php 121 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusByPhoneNumberResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusRequest.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendSmsRequest.php 141 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendSmsResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatus.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatistics.php 77 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatisticsRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatisticsResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatistics.php 161 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatisticsRequest.php 81 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatisticsResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/SmsClient.php 91 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSignStatus.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsSignRequest.php 245 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsSignResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsTemplateRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsTemplateResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddTemplateStatus.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatistics.php 149 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatisticsRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatisticsResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSignStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsSignRequest.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsSignResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsTemplateRequest.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsTemplateResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteTemplateStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribePhoneNumberInfoRequest.php 57 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribePhoneNumberInfoResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSignListStatus.php 161 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsSignListRequest.php 77 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsSignListResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsTemplateListRequest.php 109 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsTemplateListResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeTemplateListStatus.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySignStatus.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsSignRequest.php 257 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsSignResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsTemplateRequest.php 129 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsTemplateResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifyTemplateStatus.php 53 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PhoneNumberInfo.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatus.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusByPhoneNumberRequest.php 121 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusByPhoneNumberResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusRequest.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatus.php 137 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusByPhoneNumberRequest.php 121 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusByPhoneNumberResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusRequest.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionRequest.php 77 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionStatus.php 65 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendSmsRequest.php 161 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendSmsResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatus.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatistics.php 77 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatisticsRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatisticsResponse.php 66 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatistics.php 125 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatisticsRequest.php 113 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatisticsResponse.php 70 ●●●●● patch | view | raw | blame | history
vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/SmsClient.php 96 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.github/ISSUE_TEMPLATE/1-bug-report.yml 67 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.github/ISSUE_TEMPLATE/2-feature_request.md 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.github/ISSUE_TEMPLATE/3-custom.md 10 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.github/ISSUE_TEMPLATE/config.yml 8 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.github/workflows/build.yml 48 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.github/workflows/php-cs-fixer.yml 31 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/.gitignore 11 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/CONTRIBUTING.md 119 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/LICENSE.txt 32 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/README.md 85 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/composer.json 59 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/logo.png patch | view | raw | blame | history
vendor/topthink/framework/phpunit.xml.dist 27 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/helper.php 677 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/lang/zh-cn.php 157 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/App.php 651 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Cache.php 200 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Config.php 209 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Console.php 787 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Container.php 558 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Cookie.php 223 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Db.php 117 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Env.php 199 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Event.php 291 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Exception.php 59 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Facade.php 99 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/File.php 198 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Http.php 279 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Lang.php 273 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Log.php 249 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Manager.php 173 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Middleware.php 248 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Pipeline.php 106 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Request.php 2218 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Response.php 425 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Route.php 885 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Service.php 63 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Session.php 65 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/Validate.php 1698 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/View.php 187 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/Driver.php 385 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/TagSet.php 121 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/driver/File.php 308 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/driver/Memcache.php 204 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/driver/Memcached.php 215 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/driver/Redis.php 254 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/cache/driver/Wincache.php 170 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/Command.php 504 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/Input.php 465 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/LICENSE 19 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/Output.php 231 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/Table.php 300 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/bin/README.md 1 ●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/bin/hiddeninput.exe patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/Clear.php 85 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/Help.php 70 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/Lists.php 74 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/Make.php 99 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/RouteList.php 128 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/RunServer.php 72 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/ServiceDiscover.php 52 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/VendorPublish.php 69 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/Version.php 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Command.php 54 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Controller.php 55 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Event.php 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Listener.php 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Middleware.php 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Model.php 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Service.php 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Subscribe.php 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/Validate.php 38 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/command.stub 26 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/controller.api.stub 64 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/controller.plain.stub 9 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/controller.stub 85 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/event.stub 8 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/listener.stub 17 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/middleware.stub 19 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/model.stub 14 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/service.stub 27 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/subscribe.stub 8 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/make/stubs/validate.stub 25 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/optimize/Route.php 66 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/command/optimize/Schema.php 109 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/input/Argument.php 138 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/input/Definition.php 375 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/input/Option.php 221 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/Ask.php 336 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/Descriptor.php 323 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/Formatter.php 198 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/Question.php 211 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/descriptor/Console.php 153 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/driver/Buffer.php 52 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/driver/Console.php 369 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/driver/Nothing.php 33 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/formatter/Stack.php 116 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/formatter/Style.php 190 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/question/Choice.php 163 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/console/output/question/Confirmation.php 57 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php 71 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/contract/LogHandlerInterface.php 28 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/contract/ModelRelationInterface.php 98 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php 23 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php 56 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/event/AppInit.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/event/HttpEnd.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/event/HttpRun.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/event/LogRecord.php 29 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/event/LogWrite.php 23 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/event/RouteLoaded.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/AlwaysErrorMsg.php 12 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/ClassNotFoundException.php 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/ErrorException.php 57 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/FileException.php 17 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/FuncNotFoundException.php 27 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/Handle.php 371 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/HttpException.php 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/HttpResponseException.php 31 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/InvalidArgumentException.php 21 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/InvalidCacheException.php 19 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/RouteNotFoundException.php 26 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/exception/ValidateException.php 37 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/App.php 59 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Cache.php 48 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Config.php 37 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Console.php 56 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Cookie.php 40 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Env.php 44 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Event.php 42 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Lang.php 41 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Log.php 58 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Middleware.php 42 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Request.php 134 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Route.php 82 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Session.php 45 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/Validate.php 95 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/facade/View.php 42 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/file/UploadedFile.php 129 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/initializer/BootService.php 26 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/initializer/Error.php 120 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/initializer/RegisterService.php 48 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/log/Channel.php 163 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/log/ChannelSet.php 34 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/log/driver/File.php 207 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/log/driver/Socket.php 307 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/middleware/AllowCrossDomain.php 63 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/middleware/CheckRequestCache.php 183 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/middleware/FormTokenCheck.php 44 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/middleware/LoadLangPack.php 113 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/middleware/SessionInit.php 71 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/File.php 161 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/Html.php 34 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/Json.php 61 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/Jsonp.php 73 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/Redirect.php 102 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/View.php 150 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/response/Xml.php 127 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/Dispatch.php 348 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/Domain.php 41 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/Resource.php 263 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/ResourceRegister.php 72 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/Rule.php 1036 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/RuleGroup.php 732 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/RuleItem.php 328 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/RuleName.php 212 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/Url.php 478 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/dispatch/Callback.php 65 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/dispatch/Controller.php 115 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/route/dispatch/Url.php 117 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/service/ModelService.php 52 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/service/PaginatorService.php 52 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/service/ValidateService.php 31 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/session/Store.php 325 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/session/driver/Cache.php 50 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/session/driver/File.php 248 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/validate/ValidateRule.php 172 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/think/view/driver/Php.php 209 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/src/tpl/think_exception.tpl 502 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/AppTest.php 207 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/CacheTest.php 154 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/ConfigTest.php 46 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/ContainerTest.php 314 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/DbTest.php 49 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/DispatchTest.php 32 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/EnvTest.php 80 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/EventTest.php 134 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/HttpTest.php 153 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/InteractsWithApp.php 30 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/LogTest.php 132 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/MiddlewareTest.php 110 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/RouteTest.php 230 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/SessionTest.php 225 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/UrlRouteTest.php 60 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/ViewTest.php 122 ●●●●● patch | view | raw | blame | history
vendor/topthink/framework/tests/bootstrap.php 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/.gitignore 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/LICENSE 32 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/README.md 62 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/1.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/2.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/3.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/4.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/5.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/6.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/7.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/bgs/8.jpg patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/ttfs/1.ttf patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/ttfs/2.ttf patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/ttfs/3.ttf patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/ttfs/4.ttf patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/ttfs/5.ttf patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/ttfs/6.ttf patch | view | raw | blame | history
vendor/topthink/think-captcha/assets/zhttfs/1.otf patch | view | raw | blame | history
vendor/topthink/think-captcha/composer.json 32 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/src/Captcha.php 353 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/src/CaptchaController.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/src/CaptchaService.php 23 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/src/config.php 43 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/src/facade/Captcha.php 18 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-captcha/src/helper.php 54 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/.gitignore 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/.travis.yml 26 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/README.md 95 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/composer.json 26 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/phpunit.xml.dist 25 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/src/Container.php 559 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/src/Facade.php 99 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/src/exception/ClassNotFoundException.php 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/src/exception/FuncNotFoundException.php 27 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/tests/ContainerTest.php 327 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-container/tests/bootstrap.php 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/.gitignore 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/README.md 5 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/composer.json 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/phpunit.xml.dist 25 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/src/Filesystem.php 89 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/src/facade/Filesystem.php 33 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/src/filesystem/CacheStore.php 54 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/src/filesystem/Driver.php 144 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/src/filesystem/driver/Local.php 59 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/tests/FilesystemTest.php 131 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-filesystem/tests/bootstrap.php 2 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/.github/workflows/ci.yml 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/.github/workflows/php.yml 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/.gitignore 4 ●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/README.md 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/composer.json 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/phpunit.xml.dist 17 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/Collection.php 678 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/contract/Arrayable.php 8 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/contract/Jsonable.php 8 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/helper.php 317 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/helper/Arr.php 669 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/helper/Macroable.php 66 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/src/helper/Str.php 234 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/tests/ArrTest.php 372 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/tests/CollectionTest.php 70 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/tests/IsAssocTest.php 48 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/tests/MergeDeepTest.php 69 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/tests/StrTest.php 59 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-helper/tests/TestCase.php 13 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/.gitignore 4 ●●●● patch | view | raw | blame | history
vendor/topthink/think-image/.travis.yml 22 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/README.md 29 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/composer.json 26 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/phpunit.xml 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/src/Image.php 610 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/src/image/Exception.php 18 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/src/image/gif/Decoder.php 207 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/src/image/gif/Encoder.php 222 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/src/image/gif/Gif.php 88 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/CropTest.php 67 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/FlipTest.php 43 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/InfoTest.php 60 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/RotateTest.php 42 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/TestCase.php 33 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/TextTest.php 58 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/ThumbTest.php 284 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/WaterTest.php 58 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/autoload.php 15 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-image/tests/images/test.bmp patch | view | raw | blame | history
vendor/topthink/think-image/tests/images/test.gif patch | view | raw | blame | history
vendor/topthink/think-image/tests/images/test.jpg patch | view | raw | blame | history
vendor/topthink/think-image/tests/images/test.png patch | view | raw | blame | history
vendor/topthink/think-image/tests/images/test.ttf patch | view | raw | blame | history
vendor/topthink/think-image/tests/tmp/.gitignore 2 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/README.md 14 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/composer.json 28 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/src/MultiApp.php 223 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/src/Service.php 32 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/src/Url.php 229 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/src/command/Build.php 180 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/src/command/Clear.php 66 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-multi-app/src/command/stubs/controller.stub 12 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/.gitattributes 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/.gitignore 8 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/README.md 27 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/composer.json 45 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/DbManager.php 401 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/Model.php 1191 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/Paginator.php 558 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/BaseBuilder.php 966 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/BaseQuery.php 1631 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Builder.php 781 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/CacheItem.php 220 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Connection.php 409 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/ConnectionInterface.php 226 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Fetch.php 544 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Mongo.php 766 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/PDOConnection.php 1987 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Query.php 639 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Raw.php 54 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/Where.php 175 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/builder/Mongo.php 691 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/builder/Mysql.php 525 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/builder/Oracle.php 134 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/builder/Pgsql.php 123 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/builder/Sqlite.php 118 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/builder/Sqlsrv.php 194 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/AggregateQuery.php 131 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php 238 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php 726 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/ParamsBind.php 149 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/ResultOperation.php 266 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php 102 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php 227 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/Transaction.php 131 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/concern/WhereQuery.php 656 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/Mongo.php 1214 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/Mysql.php 169 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/Oracle.php 124 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/Pgsql.php 111 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/Sqlite.php 97 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/Sqlsrv.php 130 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/pgsql.sql 117 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/connector/pgsql12.sql 117 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/BindParamException.php 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/DataNotFoundException.php 44 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/DbEventException.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/DbException.php 45 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/InvalidArgumentException.php 23 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/ModelEventException.php 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/ModelNotFoundException.php 44 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/db/exception/PDOException.php 45 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/facade/Db.php 32 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/Collection.php 300 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/Pivot.php 73 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/Relation.php 252 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/Attribute.php 753 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/AutoWriteId.php 64 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/Conversion.php 403 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/ModelEvent.php 109 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/OptimLock.php 85 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/RelationShip.php 894 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/SoftDelete.php 238 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/TimeStamp.php 237 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/concern/Virtual.php 101 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/contract/EnumTransform.php 10 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/contract/FieldTypeTransform.php 17 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/BelongsTo.php 361 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/BelongsToMany.php 692 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/HasMany.php 381 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/HasManyThrough.php 404 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/HasOne.php 331 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/HasOneThrough.php 167 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/MorphMany.php 398 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/MorphOne.php 371 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/MorphTo.php 402 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/MorphToMany.php 498 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/model/relation/OneToOne.php 377 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php 219 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/stubs/Exception.php 59 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/stubs/Facade.php 69 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-orm/stubs/load_stubs.php 9 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/.gitignore 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-template/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/README.md 70 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/composer.json 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/phpunit.xml 12 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/Template.php 1316 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/facade/Template.php 83 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/template/TagLib.php 341 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/template/contract/DriverInterface.php 35 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/template/driver/File.php 84 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/template/exception/TemplateNotFoundException.php 33 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/src/template/taglib/Cx.php 715 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/bootstrap.php 3 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/tag/Demo.php 46 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/template/extend.html 2 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/template/fetch.html 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/template/include.html 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/template/layout.html 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-template/tests/think/TemplateTest.php 247 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/.gitignore 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/README.md 15 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/composer.json 31 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/src/Console.php 173 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/src/Html.php 126 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/src/Service.php 21 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/src/TraceDebug.php 109 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/src/config.php 10 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-trace/src/tpl/page_trace.tpl 71 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/.gitignore 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/README.md 82 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/composer.json 23 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/Validate.php 2171 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/contract/Enumable.php 22 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/exception/ValidateException.php 45 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/facade/Validate.php 80 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/helper.php 67 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/validate/ValidateRule.php 187 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-validate/src/validate/ValidateRuleSet.php 74 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-view/.gitignore 1 ●●●● patch | view | raw | blame | history
vendor/topthink/think-view/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-view/README.md 36 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-view/composer.json 20 ●●●●● patch | view | raw | blame | history
vendor/topthink/think-view/src/Think.php 241 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/CHANGELOG.md 201 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/LICENSE 201 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/README.md 617 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/README_APIv2.md 326 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/SECURITY.md 30 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/UPGRADING.md 445 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/bin/CertificateDownloader.php 233 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/bin/README.md 81 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/composer.json 52 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/phpstan.v8.4.neon 7 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Builder.php 150 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/BuilderChainable.php 96 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/BuilderTrait.php 103 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/ClientDecorator.php 150 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/ClientDecoratorInterface.php 59 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/ClientJsonTrait.php 245 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/ClientXmlTrait.php 186 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Crypto/AesEcb.php 58 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Crypto/AesGcm.php 104 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Crypto/AesInterface.php 70 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Crypto/Hash.php 116 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Crypto/Rsa.php 359 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Exception/InvalidArgumentException.php 9 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Exception/WeChatPayException.php 27 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Formatter.php 148 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Transformer.php 208 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Util/MediaUtil.php 173 ●●●●● patch | view | raw | blame | history
vendor/wechatpay/wechatpay/src/Util/PemUtil.php 101 ●●●●● patch | view | raw | blame | history
.env.develop
New file
@@ -0,0 +1 @@
APP_DEBUG =  true APP_TRACE =  true
.env.production
New file
@@ -0,0 +1,2 @@
APP_DEBUG =  true
APP_TRACE =  true
.example.env
New file
@@ -0,0 +1 @@
APP_DEBUG = true DB_TYPE = mysql DB_HOST = 127.0.0.1 DB_NAME = test DB_USER = username DB_PASS = password DB_PORT = 3306 DB_CHARSET = utf8 DEFAULT_LANG = zh-cn
.gitignore
New file
@@ -0,0 +1,17 @@
*.log
.env
composer.phar
composer.lock
.DS_Store
Thumbs.db
/.idea
/.vscode
/.settings
/.buildpath
/.project
/config/database.php
/config/cache.php
/public/.htaccess
/public/.user.ini
/public/static/upload
/runtime
.travis.yml
New file
@@ -0,0 +1,42 @@
sudo: false
language: php
branches:
  only:
    - stable
cache:
  directories:
    - $HOME/.composer/cache
before_install:
  - composer self-update
install:
  - composer install --no-dev --no-interaction --ignore-platform-reqs
  - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip .
  - composer require --update-no-dev --no-interaction "topthink/think-image:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0"
  - composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0"
  - composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0"
  - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip .
script:
  - php think unit
deploy:
  provider: releases
  api_key:
    secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw=
  file:
    - ThinkPHP_Core.zip
    - ThinkPHP_Full.zip
  skip_cleanup: true
  on:
    tags: true
FETCH_HEAD
LICENSE.txt
New file
@@ -0,0 +1,32 @@
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
版权所有Copyright © 2006-2023 by ThinkPHP (http://thinkphp.cn)
All rights reserved。
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
Apache Licence是著名的非盈利开源组织Apache采用的协议。
该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
允许代码修改,再作为开源或商业软件发布。需要满足
的条件:
1. 需要给代码的用户一份Apache Licence ;
2. 如果你修改了代码,需要在被修改的文件中说明;
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
带有原来代码中的协议,商标,专利声明和其他原来作者规
定需要包含的说明;
4. 如果再发布的产品中包含一个Notice文件,则在Notice文
件中需要带有本协议内容。你可以在Notice中增加自己的
许可,但不可以表现为对Apache Licence构成更改。
具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
app/AppService.php
New file
@@ -0,0 +1,22 @@
<?php
declare (strict_types = 1);
namespace app;
use think\Service;
/**
 * 应用服务类
 */
class AppService extends Service
{
    public function register()
    {
        // 服务注册
    }
    public function boot()
    {
        // 服务启动
    }
}
app/BaseController.php
New file
@@ -0,0 +1,302 @@
<?php
declare (strict_types=1);
namespace app;
error_reporting(E_ERROR | E_PARSE);
use think\App;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Response;
use think\Validate;
use think\facade\Request;
use think\facade\View;
use think\facade\Config;
/**
 * 控制器基础类
 */
abstract class BaseController {
    /**
     * Request实例
     * @var \think\Request
     */
    protected $request;
    /**
     * 应用实例
     * @var \think\App
     */
    protected $app;
    /**
     * 是否批量验证
     * @var bool
     */
    protected $batchValidate = FALSE;
    /**
     * 控制器中间件
     * @var array
     */
    protected $middleware = [];
    /**
     * 构造方法
     * @access public
     * @param App $app 应用对象
     */
    public function __construct(App $app) {
        $this->app = $app;
        $this->request = $this->app->request;
        // 控制器初始化
        $this->initialize();
    }
    // 初始化
    protected function initialize() {
    }
    /**
     * 验证数据
     * @access protected
     * @param array $data 数据
     * @param string|array $validate 验证器名或者验证规则数组
     * @param array $message 提示信息
     * @param bool $batch 是否批量验证
     * @return array|string|true
     * @throws ValidateException
     */
    protected function validate(array $data, $validate, array $message = [], bool $batch = FALSE) {
        if (is_array($validate)) {
            $v = new Validate();
            $v->rule($validate);
        } else {
            if (strpos($validate, '.')) {
                // 支持场景
                [$validate, $scene] = explode('.', $validate);
            }
            $class = FALSE !== strpos($validate, '\\') ? $validate : app()->parseClass('validate', $validate);
            $v = new $class();
            if (!empty($scene)) {
                $v->scene($scene);
            }
        }
        $v->message($message);
        // 是否批量验证
        if ($batch || $this->batchValidate) {
            $v->batch(TRUE);
        }
        return $v->failException(TRUE)->check($data);
    }
    /**
     * 操作成功跳转的快捷方法
     * @access protected
     * @param mixed $msg 提示信息
     * @param string $url 跳转的URL地址
     * @param mixed $data 返回的数据
     * @param integer $wait 跳转等待时间
     * @param array $header 发送的Header信息
     * @return void
     */
    protected function success($msg = '', string $url = NULL, $data = '', int $wait = 3, array $header = []) {
        if (is_null($url) && isset($_SERVER["HTTP_REFERER"])) {
            $url = $_SERVER["HTTP_REFERER"];
        } elseif ($url) {
            $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : (string)app()->route->buildUrl($url);
        }
        $result = [
            'code'    => 1,
            'msg'     => $msg,
            'data'    => $data,
            'url'     => $url,
            'wait'    => $wait,
            'message' => $msg,
        ];
        if (!$result['url']) {
            $result['url'] = $_SERVER["HTTP_REFERER"];
        }
        $type = $this->getResponseType();
        // 把跳转模板的渲染下沉,这样在 response_send 行为里通过getData()获得的数据是一致性的格式
        if ('html' == strtolower($type)) {
            $type = 'view';
            $response = Response::create(app()->config->get('jump.dispatch_success_tmpl'), $type)->assign($result)->header($header);
        } else {
            $response = Response::create($result, $type)->header($header);
        }
        throw new HttpResponseException($response);
    }
    /**
     * 操作错误跳转的快捷方法
     * @access protected
     * @param mixed $msg 提示信息
     * @param string $url 跳转的URL地址
     * @param mixed $data 返回的数据
     * @param integer $wait 跳转等待时间
     * @param array $header 发送的Header信息
     * @return void
     */
    protected function error($msg = '', string $url = NULL, $data = '', int $wait = 3, array $header = []) {
        if (is_null($url)) {
            $url = request::isAjax() ? '' : 'javascript:history.back(-1);';
        } elseif ($url) {
            $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : (string)app()->route->buildUrl($url);
        }
        $result = [
            'code'  => 0,
            'msg'   => $msg,
            'data'  => $data,
            'url'   => $url,
            'wait'  => $wait,
            'error' => $msg,
        ];
        if (!$result['url']) {
            $result['url'] = $_SERVER["HTTP_REFERER"];
        }
        $type = $this->getResponseType();
//        pr($result);
//        exit;
        if ('html' == strtolower($type)) {
            $type = 'view';
            $response = Response::create(app()->config->get('jump.dispatch_error_tmpl'), $type)->assign($result)->header($header);
        } else {
            $response = Response::create($result, $type)->header($header);
        }
        throw new HttpResponseException($response);
    }
    /**
     * 返回封装后的API数据到客户端
     * @access protected
     * @param mixed $data 要返回的数据
     * @param integer $code 返回的code
     * @param mixed $msg 提示信息
     * @param string $type 返回数据格式
     * @param array $header 发送的Header信息
     * @return void
     */
    protected function result($data, $code = 0, $msg = '', $type = 'json', array $header = []) {
        $result = [
            'code' => $code,
            'msg'  => $msg,
            'time' => time(),
            'data' => $data,
        ];
        $type = $type ?: $this->getResponseType();
        $response = Response::create($result, $type)->header($header);
        throw new HttpResponseException($response);
    }
    /**
     * Ajax方式返回数据到客户端
     * @access protected
     * @param mixed $data 要返回的数据
     * @param String $type AJAX返回数据格式
     * @return void
     */
    protected function ajaxReturn($data, $type = '') {
        if (empty($type))
            $type = Config::get('app.DEFAULT_AJAX_RETURN');
        switch (strtoupper($type)) {
            case 'JSON' :
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($data));
            case 'XML' :
                // 返回xml格式数据
                header('Content-Type:text/xml; charset=utf-8');
                exit(xml_encode($data));
            case 'JSONP':
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                $handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
                exit($handler . '(' . json_encode($data) . ');');
            case 'EVAL' :
                // 返回可执行的js脚本
                header('Content-Type:text/html; charset=utf-8');
                exit($data);
        }
    }
    /**
     * URL重定向
     * @access protected
     * @param string $url 跳转的URL表达式
     * @param integer $code http code
     * @param array $with 隐式传参
     * @return void
     */
    protected function redirect($url, $code = 302, $with = []) {
        $response = Response::create($url, 'redirect');
        $response->code($code)->with($with);
        throw new HttpResponseException($response);
    }
    /**
     * 获取当前的response 输出类型
     * @access protected
     * @return string
     */
    protected function getResponseType() {
        return request::isJson() || request::isAjax() ? 'json' : 'html';
    }
    // 成功响应
    protected function successResponse($message) {
        if(is_array($message)){
            return array_merge(['code' => 200], $message);
        }
        else{
            return ['code' => 200, 'message' => $message];
        }
    }
    // 错误响应
    protected function errorResponse($message) {
        if(is_array($message)){
            return array_merge(['code' => 400], $message);
        }
        else{
            return ['code' => 400, 'message' => $message];
        }
    }
    // 正确响应
    protected function successResponseHtml($title, $message, $url) {
        View::assign('title', $title);
        View::assign('content', $message);
        View::assign('url', $url);
        View::assign('color', 'success');
        View::assign('buttonType', 'primary');
        return View::fetch('common/success');
    }
    // 错误响应
    protected function errorResponseHtml($title, $message, $url) {
        View::assign('title', $title);
        View::assign('content', $message);
        View::assign('url', $url);
        View::assign('color', 'error');
        View::assign('buttonType', 'danger');
        return View::fetch('common/success');
    }
}
app/ExceptionHandle.php
New file
@@ -0,0 +1,58 @@
<?php
namespace app;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\exception\Handle;
use think\exception\HttpException;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Response;
use Throwable;
/**
 * 应用异常处理类
 */
class ExceptionHandle extends Handle
{
    /**
     * 不需要记录信息(日志)的异常类列表
     * @var array
     */
    protected $ignoreReport = [
        HttpException::class,
        HttpResponseException::class,
        ModelNotFoundException::class,
        DataNotFoundException::class,
        ValidateException::class,
    ];
    /**
     * 记录异常信息(包括日志或者其它方式记录)
     *
     * @access public
     * @param  Throwable $exception
     * @return void
     */
    public function report(Throwable $exception): void
    {
        // 使用内置的方式记录异常日志
        parent::report($exception);
    }
    /**
     * Render an exception into an HTTP response.
     *
     * @access public
     * @param \think\Request   $request
     * @param Throwable $e
     * @return Response
     */
    public function render($request, Throwable $e): Response
    {
        // 添加自定义异常处理机制
        // 其他错误交给系统处理
        return parent::render($request, $e);
    }
}
app/Request.php
New file
@@ -0,0 +1,8 @@
<?php
namespace app;
// 应用请求对象类
class Request extends \think\Request
{
}
app/admin/common.php
New file
@@ -0,0 +1,44 @@
<?php
use think\facade\Db;
//////
function getlayuiicon($id) {
    $layuiicon[1] = 'layui-icon-read';
    $layuiicon[2] = 'layui-icon-list';
    $layuiicon[3] = 'layui-icon-refresh';
    $layuiicon[4] = 'layui-icon-survey';
    $layuiicon[5] = 'layui-icon-notice';
    $layuiicon[6] = 'layui-icon-auz';
    $layuiicon[7] = 'layui-icon-theme';
    $layuiicon[8] = 'layui-icon-user';
    $layuiicon[9] = 'layui-icon-util';
    $layuiicon[10] = 'layui-icon-circle';
    $layuiicon[11] = 'layui-icon-senior';
    $layuiicon[12] = 'layui-icon-cart';
    return $layuiicon[$id];
}
function getguide($guidearr = array()) {
    $str = '';
    if (isset($guidearr) && is_array($guidearr)) {
        foreach ($guidearr as $arr) {
            if($arr['text']) {
                $str .= '<span lay-separator="">/</span>';
                if (isset($arr['url']) && $arr['url']) {
                    $str .= '<a href=' . $arr['url'] . '>';
                } else {
                    $str .= '<a>';
                }
                $str .= $arr['text'];
                $str .= '</a>';
            }
        }
    }
    return $str;
}
app/admin/controller/Administrators.php
New file
@@ -0,0 +1,186 @@
<?php
namespace app\admin\controller;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Administrators extends Common {
    public function index() {
        ////////
        View::assign('menuitem', strtolower('administrators-index'));
        $other['title'] = '管理员';
        $guide['one']['text'] = '安全中心';
        $guide['two']['text'] = '管理员';
        $guide['two']['url'] = url('/admin/administrators/index')->build();
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    public function adminlist() {
        if (Request::isPost()) {
            $kw = input('kw');
            $condition = [];
            if (!empty($kw)) {
                $condition[] = array('user_name|real_name', 'like', "%$kw%");
            }
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'initialize desc,id asc';
            $count = Db::name('administrators')->where($condition)->count();
            $list = Db::name('administrators')->field("id,user_name,real_name,ban_access,phone,initialize,login_time,login_ip")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                $list = [];
            }
            $other['admin_info'] = $this->cinfo;
            $d['code'] = 200;
            $d['list'] = $list;
            $d['other'] = $other;
            return $d;
        }
    }
    public function update_ban_access() {
        header('Content-Type:text/html;charset=utf-8');
        if (Request::isPost()) {
            $id = input('id');
            $sub_ban_access = input('ban_access');
            $info = Db::name('administrators')->field('id')->where('id', $id)->find();
            if (empty($info)) {
                $d['code'] = 400;
                $d['message'] = '信息不存在';
                return $d;
            }
            ///
            if (is_numeric($id)) {
                if ($sub_ban_access == '1') {
                    $dd['ban_access'] = 1;
                    $d['ban_access'] = 1;
                    $d['message'] = '允许登录';
                } else {
                    $dd['ban_access'] = 0;
                    $d['ban_access'] = 0;
                    $d['message'] = '禁止登录';
                }
                $backval = Db::name('administrators')->where('id', $id)->save($dd);
                if ($backval === FALSE) {
                    $d['code'] = 400;
                } else {
                    $d['code'] = 200;
                }
            } else {
                $d['code'] = 400;
            }
        } else {
            $d['code'] = 400;
        }
        return $d;
    }
    public function save_admin() {
        if (Request::isPost()) {
            header('Content-Type:text/html;charset=utf-8');
            $data = Request::post();
            $id = input('post.id');
            $password = input('pwd');
            if (empty($password)) {
            } else {
                $data['password'] = joinmd5($password);
            }
            if (is_numeric($id)) {//更新数据
                /////验证密码复杂度///////////
                $validate = new \app\admin\validate\Administrators();
                $result = $validate->scene('edit')->check($data);
                if (!$result) {
                    $d['code'] = 400;
                    $d['message'] = $validate->getError();
                    return $d;
                }
                $backval = Db::name('administrators')->where('id', $id)->withoutField('id')->save($data);
                if ($backval === false) {
                    $d['code'] = 400;
                    $d['message'] = '编辑失败';
                } else {
                    ////增加系统操作记录//
                    $d['code'] = 200;
                    $d['message'] = '编辑成功';
                }
            } else {
                unset($data['id']);
                $data['add_time'] = time();
                $data['start_time'] = time();
                $data['end_time'] = time() + 3600 * 24 * 7;
                /////验证试卷名称是否存在///////////
                $validate = new \app\admin\validate\Administrators();
                $result = $validate->check($data);
                if (!$result) {
                    $d['code'] = 400;
                    $d['message'] = $validate->getError();
                    return $d;
                }
                //添加数据
                $result = Db::name('administrators')->insertGetId($data);
                if ($result !== false) {
                    $d['code'] = 200;
                    $d['message'] = '添加成功';
                } else {
                    $d['code'] = 400;
                    $d['message'] = '添加失败';
                }
            }
        } else {
            $d['code'] = 400;
            $d['message'] = '非法请求';
        }
        return $d;
    }
    public function delete_admin() {
        if (Request::isPost()) {
            $id = input('id');
            if (is_numeric($id)) {
                $condition['id'] = $id;
                $info = Db::name('administrators')->field('id,initialize')->where($condition)->find();
                if ($info) {
                    ///////////////////
                    if ($info['initialize'] == '1') {
                        $d['code'] = 400;
                        $d['message'] = '该账号不能删除!';
                        return $d;
                    }
                    if ($this->cinfo['initialize'] == 1 || $this->admin_id == $info['id']) {
                        Db::name('administrators')->where('id', $id)->delete();
                        /////////////////////////////
                        $d['code'] = 200;
                        $d['message'] = '删除成功!';
                    } else {
                        $d['code'] = 400;
                        $d['message'] = '您没有删除权限';
                    }
                } else {
                    $d['code'] = 400;
                    $d['message'] = '子账号不存在';
                }
            } else {
                $d['code'] = 400;
                $d['message'] = '参数有误!';
            }
            return $d;
        }
    }
}
app/admin/controller/Adminmenu.php
New file
@@ -0,0 +1,128 @@
<?php
namespace app\admin\controller;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Adminmenu extends Common {
    /**
     * 菜单列表
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '总共后台菜单';
            $guide['one']['text'] = '后台菜单管理';
            $guide['two']['text'] = '总后台菜单列表';
            View::assign('guide', $guide);
            View::assign('other', $other);
            return View::fetch('index');
        } else {
            $order = 'order_id asc,id asc';
            $menulist = Db::name('admin_menu')->field("id,title,menu_index,menu_icon,menu_url,show_menu,father_id,order_id")->order($order)->select()->toArray();
            $list = _generateListTree($menulist, 0, ['id', 'father_id']);;
            $result['list'] = $list;
            return $this->successResponse($result);
        }
    }
    /**
     * 更新菜单显示状态
     */
    public function updateShowMenu() {
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        if (!is_numeric($id)) {
            return $this->errorResponse('参数错误');
        }
        $show_menu = input('show_menu');
        $info = Db::name('admin_menu')->field('id')->where('id', $id)->find();
        if (empty($info)) {
            return $this->errorResponse('信息不存在');
        }
        if ($show_menu == '1') {
            $data['show_menu'] = 1;
        } else {
            $data['show_menu'] = 0;
        }
        $backval = Db::name('admin_menu')->where('id', $id)->save($data);
        if ($backval === FALSE) {
            return $this->errorResponse('更新失败');
        } else {
            $this->delCache();
            return $this->successResponse('更新成功');
        }
    }
    /**
     * 保存菜单
     * @return array|int[]
     */
    public function saveMenu() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        $data = Request::post();
        $id = $data['id'];
        if (is_numeric($id)) {
            //更新数据
            $validate = new \app\admin\validate\AdminMenu();
            $result = $validate->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////保存////////////
            Db::name('admin_menu')->where('id', $id)->withoutField('id')->save($data);
            ////////////////////////
            $this->delCache();
            $res['message'] = '菜单编辑成功';
            return $this->successResponse($res);
        } else {
            unset($data['id']);
            $validate = new \app\admin\validate\AdminMenu();
            $result = $validate->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////////////////////
            Db::startTrans();
            try {
                $data['add_time'] = time();
                $new_id = Db::name('admin_menu')->insertGetId($data);
                if ($new_id) {
                    Db::name('admin_menu')->where('id', $new_id)->save(['order_id' => $new_id]);
                    ///////执行成功,提交事务///////
                    Db::commit();
                    $this->delCache();
                    $res['message'] = '菜单添加成功';
                    return $this->successResponse($res);
                } else {
                    //任一执行失败,执行回滚操作
                    Db::rollback();
                    return $this->errorResponse('菜单添加失败');
                }
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                return $this->errorResponse('菜单添加失败');
            }
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('admin_menu')->clear();
    }
}
app/admin/controller/BigvInfo.php
New file
@@ -0,0 +1,83 @@
<?php
namespace app\admin\controller;
use app\supplier\model\GoodsAnnex;
use think\facade\Config;
use think\facade\Db;
use think\facade\Request;
use think\facade\View;
use think\Exception;
class BigvInfo extends Common {
    /*
     * 品牌管理
     */
    public function index(): string {
        $other['title'] = '大V管理';
        $guide['one']['text'] = '数据审核';
        $guide['two']['text'] = '大V管理';
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    /*
     * 获取商品品牌列表
     */
    public function getBigvInfoList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $kw = input('kw');
            if (!empty($kw)) {
                $condition[] = array('SBI.first_name', 'like', "%$kw%");
            }
            $p = input('page', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'BIGV.is_show desc,BIGV.id asc';
            $count = Db::name('seller_bigv_info')->alias('BIGV')
                ->join('seller_base_info SBI', 'SBI.seller_id=BIGV.seller_id')->where($condition)->count();
            $list = Db::name('seller_bigv_info')->alias('BIGV')
                ->join('seller_base_info SBI', 'SBI.seller_id=BIGV.seller_id')
                ->field("BIGV.*,SBI.first_name")->withAttr('personal_images', function($value) {
                    return json_decode($value, true);
                })->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                $list = [];
            }
            $result['code'] = 200;
            $result['list'] = $list;
            $result['other'] = $other;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,is_show';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name('seller_bigv_info')->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/CancelPublishOrder.php
New file
@@ -0,0 +1,648 @@
<?php
namespace app\admin\controller;
use app\supplier\model\DistributionArea as DistributionAreaModel;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\supplier\model\GoodsAnnex;
use app\supplier\model\GoodsSpec;
use app\supplier\model\GoodsAttribute;
use app\supplier\model\GoodsLabel;
use app\supplier\model\GoodsRetailPriceLimit;
//use app\supplier\model\Goods;
//商品零售价限制
class CancelPublishOrder extends Common {
    /**
     * 商品管理
     * @return string
     */
    public function index() {
        return View::fetch();
    }
    /**
     * 获取刊登列表
     * @return mixed
     */
    public function getPublishOrder() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $platform_goods_code = input('platform_goods_code');
            $supplier_goods_code = input('supplier_goods_code');
            $condition['poc.status'] = 0;//
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'id asc';
            $count = \app\supplier\model\PublishOrder::alias('po')
                ->alias('po')
                ->join('web_publish_order_cancel poc', 'po.id=poc.publish_order_id')
                ->where($condition)
                ->count();
            $list = \app\supplier\model\PublishOrder::alias('po')
                ->alias('po')
                ->join('web_publish_order_cancel poc', 'po.id=poc.publish_order_id')
                ->field("poc.id as cancel_id,po.id,supplier_goods_code,publish_order_code,first_cate_code,second_cate_code,three_cate_code,public_type,brand_code,poc.add_time,publish_status,update_time,goods_title_cn,(select url from web_publish_order_picture where publish_order_id=po.id order by id asc limit 1) as picture,poc.status,poc.remark,poc.reason_id")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if ($list) {
                $categorylist = get_category();
                $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
                foreach ($list as &$item) {
                    $item['first_cate_name'] = $categorylist[$item['first_cate_code']]['cate_name'];
                    $item['second_cate_name'] = $categorylist[$item['second_cate_code']]['cate_name'];
                    $item['three_cate_name'] = $categorylist[$item['three_cate_code']]['cate_name'];
                    $item['add_time'] = date('Y-m-d H:i:s', $item['add_time']);
                }
                $result['list'] = $list;
                $result['other'] = $other;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 取消刊登审核
     * @return array|int[]
     */
    public function reviewPublishOrder() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $publish_order_id = input('post.publish_order_id');
            $cancel_id = input('post.cancel_id');
            if (is_numeric($cancel_id)) {
                $status = input('post.status');
                //更新数据
                $info = Db::name('publish_order_cancel')->field('id,status')->where('id', $cancel_id)->find();
                if (!$info) {
                    return $this->errorResponse(lang('request_method_incorrect'));
                }
                if($info['status']==1){
                    return $this->errorResponse('该申请已审核通过,不能重复审核');
                }
                if ($status == 1) {
                    Db::name('publish_order_cancel')->where('id', $cancel_id)->update(['status' => 1]);
                    Db::name('publish_order')->where('id', $publish_order_id)->update(['publish_status' => 0, 'audit_status' => 1, 'review_comments' => '']);
                    $message = '操作成功,审核通过';
                } else {
                    $comments = trim(input('comments'));
                    if (!$comments) {
                        return $this->errorResponse('请填写审核不通过原因');
                    }
                    Db::name('publish_order_cancel')->where('id', $cancel_id)->update(['status' => 1, 'comments' => $comments]);
                    $message = '操作成功,审核不通过';
                }
                // 提交事务
                Db::commit();
                return $this->successResponse($message);
            } else {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 创建商品
     * @return string
     */
    public function create() {
        ////////
        $id = input('id');
        if (!is_numeric($id)) {
            $this->redirect(url('/supplier/cancelPublishOrder/index')->build());
        }
        $cancel_id = input('cancel_id');
        $other['id'] = $id;
        $other['cancel_id'] = $cancel_id;
        View::assign('other', $other);
        return View::fetch();
    }
    public function getGoodsInfo() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $supplier_goods_code = input('supplier_goods_code');
        if (!is_numeric($supplier_goods_code)) {
            return $this->errorResponse(lang('invalid_id'));
        }
        try {
            $where = [
                'supplier_goods_code' => $supplier_goods_code,
            ];
            $info = Db::name('goods')->field('id,first_cate_code,second_cate_code,three_cate_code,brand_code')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            $info['goods_purpose'] = json_decode($info['goods_purpose'], TRUE);
            //////获取描述标题数据/////////
            $where_other = [
                'goods_id' => $info['id'],
            ];
            $goods_desc = Db::name('goods_desc')->field('goods_title_en,goods_title_cn')->where($where_other)->find();
            //获取描述内容数据
            $goods_desc_content = Db::name('goods_desc_content')->field('goods_desc_en,goods_desc_cn')->where($where_other)->find();
            ////////////////
            $result['info'] = $info;
            $result['goods_desc'] = $goods_desc;
            $result['goods_desc_content'] = $goods_desc_content;
            return $this->successResponse($result);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 获取商品分销信息
     * @return array|int[]
     */
    public function getGoodsDisInfo() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $supplier_goods_code = input('supplier_goods_code');
            $condition['g.istemp'] = 1;//编辑过的商品
            if ($supplier_goods_code) {
                $condition['g.supplier_goods_code'] = $supplier_goods_code;
            }
            $info = \app\supplier\model\Goods::alias('g')
                ->join('goods_desc gd', 'g.id=gd.goods_id')
                ->join('goods_desc_content gdc', 'g.id=gdc.goods_id')
                ->field("g.id,g.warehouse_mode,g.sales_form,g.supplier_goods_code,g.platform_goods_code,g.goods_purpose,g.add_time,g.status,g.publish_status,g.whether_dis,g.is_limit_dis_platform,gd.goods_title_cn,gd.goods_title_en,gd.goods_keyword_en,gd.goods_keyword_cn,g.first_cate_code,g.second_cate_code,g.three_cate_code,g.docking_way,g.price_method,g.freight_attr_code,g.is_tort,g.is_stop_buy,g.recommend_man,gdc.goods_desc_en,gdc.goods_desc_cn")->where($condition)->find();
            if ($info) {
                $categorylist = get_category();
                $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
                $info['first_cate_name'] = $categorylist[$info['first_cate_code']]['cate_name'];
                $info['second_cate_name'] = $categorylist[$info['second_cate_code']]['cate_name'];
                $info['three_cate_name'] = $categorylist[$info['three_cate_code']]['cate_name'];
                $info['attr_name'] = Db::name('goods_freight_attr')->where('attr_code', $info['freight_attr_code'])->value('attr_name');
                $info['goods_keyword_en'] = $info['goods_keyword_en'] ? json_decode($info['goods_keyword_en'], TRUE) : [];
                $info['goods_keyword_cn'] = $info['goods_keyword_cn'] ? json_decode($info['goods_keyword_cn'], TRUE) : [];
                $info['goodsSpecInfo'] = Db::name('goods_spec')->field('*')->where('goods_id', $info['id'])->find();
                $goods_attribute_info = Db::name('goods_attribute')->field('*')
                    ->withAttr('material_main', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_one', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_two', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_three', function ($value, $data) {
                        if ($value) {
                            $value = json_decode($value, TRUE);
                            return Db::name('goods_material')->whereIn('id', $value)->column('material_name');
                        } else {
                            return [];
                        }
                    })
                    ->where('goods_id', $info['id'])->find();
                $info['goodsAttributeInfo'] = $goods_attribute_info;
                $info['goodsAttributExtendList'] = Db::name('goods_attribute_extend')->field('*')->where('goods_id', $info['id'])->select()->toArray();
                $info['goodsRetailPriceLimitList'] = GoodsRetailPriceLimit::field('*')->where('goods_id', $info['id'])
                    ->withAttr('sale_country_code', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value("CONCAT(country_code,' ',country)");
                    })
                    ->withAttr('sales_platform', function ($value, $data) {
                        return Db::name('sales_platform')->where('id', $value)->value("platform_name");
                    })
                    ->order('id asc')->select()->toArray();///
                $info['goodsLabelList'] = GoodsLabel::field('label_type,goods_label')->where('goods_id', $info['id'])->order('id asc')->select()->toArray();///
                if ($info['is_limit_dis_platform'] == 1) {
                    $info['goodsLimitDisPlatformList'] = Db::name('goods_limit_dis_platform')
                        ->alias('a')
                        ->join('dis_platform b', 'a.dis_platform = b.id')
                        ->field('b.platform_name')->where('goods_id', $info['id'])->order('a.id asc')->select()->toArray();///
                } else {
                    $info['goodsLimitDisPlatformList'] = [];
                }
                $result['info'] = $info;
                ///分销区域//
                $disAreaList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('distribution_area da', 'da.id=gda.distribution_area_id')
                    ->field("gda.one_shipment,gda.distribution_area_id")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)->withAttr('one_shipment', function ($value, $data) {
                        return $value == 1 ? '一件代发' : '';
                    })->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disAreaList'] = $disAreaList;
                //分销库存
                $disStockList = Db::name('goods_distribution_area_stock')
                    ->alias('gdas')
                    ->join('third_party_stock tps', 'tps.id=gdas.third_party_stock_id')
                    ->field("gdas.distribution_area_id,gdas.supplier_stock_amount,gdas.platform_stock_amount,gdas.goods_distribution_area_id,tps.third_party_stock_name,tps.docking_code,tps.stock_type")->where('gdas.goods_id', $info['id'])->where('gdas.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disStockList'] = $disStockList;
                //分销价格///
                $disPriceList = Db::name('goods_distribution_area_price')
                    ->alias('gdap')
                    ->join('goods_distribution_area gda', 'gda.id=gdap.goods_distribution_area_id')
                    ->join('logistics_product lp', 'lp.id=gdap.logistics_product_id')
                    ->field("gdap.distribution_area_id,gdap.goods_distribution_area_id,lp.product_name_cn,gdap.supply_price,gdap.dis_price,gdap.package_goods_amount,gda.take_effect_time")->where('gdap.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('take_effect_time', function ($value, $data) {
                        return date('Y-m-d H:i:s', $value);
                    })->select()->toArray();
                $result['disPriceList'] = $disPriceList;
                //退货地址列表//
                $disReturnGoodsList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('third_party_stock tps', 'tps.id=gda.third_party_stock_id')
                    ->join('third_party_stock_address tpsa', 'tpsa.id=gda.third_party_stock_address_id')
                    ->field("gda.distribution_area_id,tps.third_party_stock_name,tpsa.stock_address,tpsa.stock_city,tpsa.stock_province,tpsa.stock_post_code,tpsa.stock_country_id,tpsa.receive_man,tpsa.tel")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('stock_country_id', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value('country');
                    })
                    ->select()->toArray();
                $result['disReturnGoodsList'] = $disReturnGoodsList;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getGoodsPictureList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $goods_id = input('goods_id');
            $picture_type = input('picture_type');
            if (is_array($picture_type)) {
                $where[] = ['a.goods_id', '=', $goods_id];
                if (is_array($picture_type)) {
                    $where[] = ['b.type', 'in', $picture_type];
                }
                $list = Db::name('goods_picture')
                    ->alias('a')
                    ->join('goods_picture_type b', 'a.id=b.picture_id')
                    ->field('DISTINCT  a.id,a.url')->where($where)->order('id asc')->select()->toArray();
            } else {
                $where[] = ['goods_id', '=', $goods_id];
                $list = Db::name('goods_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            }
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 根据类型获取商品图片数量
     * @return void
     */
    public function getGoodsPictureCount() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $goods_id = input('goods_id');
            $goodsPictureCount['type0'] = Db::name('goods_picture')->where(['goods_id' => $goods_id])->count();
            $goodsPictureCount['type1'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 1])->count();
            $goodsPictureCount['type2'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 2])->count();
            $goodsPictureCount['type3'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 3])->count();
            $goodsPictureCount['type4'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 4])->count();
            $goodsPictureCount['type5'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 5])->count();
            $goodsPictureCount['type6'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 6])->count();
            $goodsPictureCount['type7'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 7])->count();
            $result['goodsPictureCount'] = $goodsPictureCount;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分销区域
     */
    private function getDisArea($id) {
        return Db::name('distribution_area')
            ->alias('da')
            ->join('deliver_region dr', 'dr.deliver_region_id=da.deliver_region_id')
            ->field("da.dis_currency,dr.region_name,da.dis_model")
            ->where('da.id', $id)->find();
    }
    /**
     * 获取刊登信息
     * @return array|int[]
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function getPublishOrderInfo() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        $cancel_id = input('cancel_id');
        if (!is_numeric($id)) {
            return $this->errorResponse(lang('invalid_id'));
        }
        try {
            $where = [
                'id' => $id,
            ];
            $info = Db::name('publish_order')->field('*')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            //////获取描述标题数据/////////
            $cancelInfo = Db::name('publish_order_cancel')->field('*')->where('id',$cancel_id)->find();
            ////////////////
            $result['info'] = $info;
            $result['cancelInfo'] = $cancelInfo;
            return $this->successResponse($result);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 保存刊登信息
     * @return array
     */
    public function savePublishOrder() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $id = $data['id'];
            // 验证ID的合法性
            if (!is_numeric($id) || $id <= 0) {
                return $this->errorResponse(lang('invalid_id'));
            }
            // 数据验证
            $validate = new \app\supplier\validate\PublishOrder();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            /////////////////
            $img_count = Db::name('publish_order_picture')->where('publish_order_id', $id)->count();
            if ($img_count == 0) {
                return $this->errorResponse('请上传图片');
            }
            $data['update_time'] = time();
            $data['istemp'] = 1;
            $data['publish_status'] = 0;//未刊登
            $data['audit_status'] = 2;//提交待审核
            $where['id'] = $id;
            $update_result = Db::name('publish_order')->where($where)->withoutField('id,supplier_id,publish_order_code')->update($data);
            if ($update_result === FALSE) {
                // 回滚事务
                Db::rollback();
                return $this->errorResponse(lang('editing_failed'));
            }
            // 提交事务
            Db::commit();
            $result['url'] = url('/supplier/publishOrder/index')->build();
            $result['message'] = lang('successfully_saved');
            return $this->successResponse($result);
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除刊登信息
     * @return array
     */
    public function deletePublishOrder() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        if (!$id || !is_numeric($id)) {
            throw new Exception(lang('parameter_error'));
        }
        $condition['id'] = $id;
        $info = Db::name('publish_order')->field('id,publish_status,audit_status')->where($condition)->find();
        if (!$info) {
            return $this->errorResponse(lang('delete_failed'));
        } else {
            if ($info['publish_status'] == 1) {
                return $this->errorResponse('刊登单已发布,不能删除');
            }
        }
        // 启动事务
        Db::startTrans();
        try {
            $del_result = Db::name('publish_order')->where('id', $id)->delete();
            if ($del_result) {
                ////执行成功,提交事务
                Db::commit();
                return $this->successResponse(lang('delete_successful'));
            } else {
                Db::rollback();
                return $this->errorResponse(lang('delete_failed'));
            }
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 上传商品图片
     * @return array|int[]
     */
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getPublishOrderPictureList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $publish_order_id = input('publish_order_id');
            $where[] = ['publish_order_id', '=', $publish_order_id];
            $list = Db::name('publish_order_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除商品图片
     * @return array|int[]
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function deletePublishOrderPicture() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        if (!$id || !is_numeric($id)) {
            return $this->errorResponse(lang('parameter_error'));
        }
        $condition['id'] = $id;
        $info = Db::name('publish_order_picture')->field('id,publish_order_id,url')->where($condition)->find();
        if (!$info) {
            return $this->errorResponse(lang('delete_failed'));
        }
        // 启动事务
        Db::startTrans();
        try {
            $del_result = Db::name('publish_order_picture')->where('id', $id)->delete();
            if ($del_result) {
                ////执行成功,提交事务
                Db::commit();
                delpic($info['url']);
                return $this->successResponse(lang('delete_successful'));
            } else {
                Db::rollback();
                return $this->errorResponse(lang('delete_failed'));
            }
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分类列表
     * @return array
     */
    public function getCategoryList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $result['list'] = $this->getchildrenids(0);
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 循环获取分类数据
     * @param $id
     * @return array|void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    protected function getchildrenids($id) {
        $where['father_code'] = $id;
        $result = Db::name('category')->field('id,cate_code as value,cate_name as label')->where($where)->cacheAlways(TRUE, 0, 'category')->order('id asc')->select()->toArray();
        if ($result) {
            foreach ($result as &$val) {
                $val['children'] = $this->getchildrenids($val['value']); ////
            }
            return $result;
        }
    }
    /**
     * 商品发布
     * @return array|int[]
     */
    public function goodsPublish() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
            $publish_order_id = input('publish_order_id');
            $goods_info = Db::name('goods')->field('id')->where('id', $publish_order_id)->find();
            if ($goods_info) {
                $update_data = [
                    'publish_status' => 1,
                    'update_time'    => time(),
                ];
                Db::name('goods')->where('id', $publish_order_id)->update($update_data);
            } else {
                return $this->errorResponse(lang('goods_not_exist'));
            }
            // 提交事务
            Db::commit();
            return $this->successResponse(lang('goods_publish_success'));
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/Category.php
New file
@@ -0,0 +1,185 @@
<?php
namespace app\admin\controller;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use think\Exception;
class Category extends Common {
    private $viewPath = 'category';
    /**
     * 菜单列表
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
//            $other['title'] = '总共后台菜单';
            $guide['one']['text'] = '基础信息设置';
            $guide['two']['text'] = '商品分类管理';
            View::assign('guide', $guide);
//            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch('index');
        }
    }
    public function getCategoryList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $father_code = input('father_code');
            $where[] = ['father_code', '=', $father_code];
            $order = 'order_id asc,id asc';
            $list = Db::name('category')->field('*')->where($where)->order($order)->select()->toArray();
            if (!$list) {
                return $this->errorResponse('暂无菜单');
            }
            $reuslt['list'] = $list;
            return $this->successResponse($reuslt);
        } catch (\Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    ///获取平台列表
    public function getPlatformList() {
        try {
            if (!Request::isPost()) {
                throw new Exception('请求方式错误');
            }
            $order = 'order_id asc,docking_platform_id asc';
            $list = Db::name('docking_platform')->field('*')->order($order)->select()->toArray();
            if (!$list) {
                throw new Exception('暂无平台信息');
            }
            $reuslt['list'] = $list;
            return $this->successResponse($reuslt);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 保存分类 信息
     * @return array|int[]
     */
    public function saveCategory() {
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $id = $data['id'];
            if (is_numeric($id)) {
                //更新数据
                $validate = new \app\admin\validate\Category();
                $result = $validate->check($data);
                if (!$result) {
                    throw new Exception($validate->getError());
                }
                //////保存////////////
                Db::name('category')->where('id', $id)->withoutField('id')->save($data);
                ////////////////////////
                ///////执行成功,提交事务///////
                Db::commit();
                $this->delCache();
                $res['message'] = '编辑成功';
                return $this->successResponse($res);
            } else {
                unset($data['id']);
                $data['status'] = 1;
                $validate = new \app\admin\validate\Category();
                $result = $validate->check($data);
                if (!$result) {
                    throw new Exception($validate->getError());
                }
                //////////////////////
                $new_id = Db::name('category')->insertGetId($data);
                if (!$new_id) {
                    throw new Exception('添加失败');
                }
                Db::name('category')->where('id', $new_id)->save(['order_id' => $new_id]);
                ///////执行成功,提交事务///////
                Db::commit();
                $this->delCache();
                $res['message'] = '添加成功';
                return $this->successResponse($res);
            }
        } catch (Exception $e) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($e->getMessage());
        }
    }
    //保存对接平台信息
    public function savePlatform() {
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $docking_platform_id = $data['docking_platform_id'];
            if (is_numeric($docking_platform_id)) {
                //更新数据
                $validate = new \app\admin\validate\DockingPlatform();
                $result = $validate->check($data);
                if (!$result) {
                    return $this->errorResponse($validate->getError());
                }
                //////保存////////////
                Db::name('docking_platform')->where('docking_platform_id', $docking_platform_id)->withoutField('docking_platform_id')->save($data);
                ////////////////////////
                Db::commit();
                $this->delDPCache();
                $res['message'] = '编辑成功';
                return $this->successResponse($res);
            } else {
                unset($data['docking_platform_id']);
                $validate = new \app\admin\validate\DockingPlatform();
                $result = $validate->check($data);
                if (!$result) {
                    return $this->errorResponse($validate->getError());
                }
                //////////////////////
                $new_id = Db::name('docking_platform')->insertGetId($data);
                if (!$new_id) {
                    throw new Exception('添加失败');
                }
                Db::name('docking_platform')->where('docking_platform_id', $new_id)->save(['order_id' => $new_id]);
                ///////执行成功,提交事务///////
                $this->delDPCache();
                Db::commit();
                $res['message'] = '添加成功';
                return $this->successResponse($res);
            }
        } catch (Exception $e) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('category')->clear();
    }
    private function delDPCache() {
        Cache::tag('docking_platform')->clear();
    }
}
app/admin/controller/Common.php
New file
@@ -0,0 +1,74 @@
<?php
namespace app\admin\controller;
use think\facade\View;
use think\facade\Request;
//use app\Gateway;
use think\facade\Config;
use think\facade\Db;
use think\Validate;
use app\BaseController;
use think\facade\Log;
use think\facade\Session;
class Common extends BaseController
{
    public $Opadmin = null;
    public $admin_id = null;
    public $cinfo = null;
    public function __construct()
    {
        Log::record(getcurrurl());
        header('Content-Type:text/html;charset=utf-8');
        $this->Opadmin = new \app\admin\util\Opadmin();
        if (!$this->Opadmin->islogin()) {
            $this->redirect(url('/admin/login/index')->build());
        }
        $this->cinfo = $this->Opadmin->info;
        $this->admin_id = $this->Opadmin->info['id'];
        $menulist = $this->Opadmin->menu();
        View::assign('menulist', $menulist);
        View::assign('cinfo', $this->Opadmin->info);
        View::assign('menuitem', Request()->controller(true) . '-' . Request()->action(true));
    }
    protected function getCountrychildrenids($id)
    {
        $where['father_id'] = $id;
        $result = Db::name('country_code')->field('id as value,cate_name as label')->where($where)->cacheAlways(TRUE, 0, 'country_codes')->order('order_id asc,id asc')->select()->toArray();
        if ($result) {
            foreach ($result as &$val) {
                $val['children'] = $this->getCountrychildrenids($val['value']); ////
            }
            return $result;
        } else {
            return [];
        }
    }
    //////上传文件到cos/////////////////
    protected function uploadFileToCos($file = '')
    {
        if ($file && Config::get('qcloud.isopencos') == 1) {
            $key = getCosName($file);
            $localPath = '.' . $file;
            $cos = new \common\Uploadcos();
            $result = $cos->cosUpload($key, $localPath);
            return $result;
        }
    }
    //////删除cos中的文件/////////////////
    protected function deleteFileFromCos($file = '', $versionId = '')
    {
        if ($file && Config::get('qcloud.isopencos') == 1) {
            $key = getCosName($file);
            $cos = new \common\Uploadcos();
            $result = $cos->cosDelete($key, $versionId);
            return $result;
        }
    }
}
app/admin/controller/CountryCode.php
New file
@@ -0,0 +1,191 @@
<?php
namespace app\admin\controller;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class CountryCode extends Common {
    private $viewPath = 'country_code';
    /**
     * 菜单列表
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $guide['one']['text'] = '基础信息设置';
            $guide['two']['text'] = '国家城市管理';
            View::assign('guide', $guide);
            View::assign('viewPath', $this->viewPath);
            return View::fetch('index');
        }
    }
    public function getCountryCodeList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $father_id = input('father_id');
            $where[] = ['father_id','=',$father_id];
            $order = 'order_id asc,id asc';
            $list = Db::name('country_code')->field('id,cate_name,cate_code,order_id,status,father_id')->where($where)->order($order)->select()->toArray();
            if(!$list){
                return $this->errorResponse('暂无菜单');
            }
            $reuslt['list'] = $list;
            return $this->successResponse($reuslt);
        } catch (\Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 更新显示状态
     */
    public function updateShow() {
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        if (!is_numeric($id)) {
            return $this->errorResponse('参数错误');
        }
        $status = input('status');
        $info = Db::name('country_code')->field('id')->where('id', $id)->find();
        if (empty($info)) {
            return $this->errorResponse('信息不存在');
        }
        if ($status == '1') {
            $data['status'] = 1;
        } else {
            $data['status'] = 0;
        }
        $backval = Db::name('country_code')->where('id', $id)->save($data);
        if ($backval === FALSE) {
            return $this->errorResponse('更新失败');
        } else {
            $this->delCache();
            return $this->successResponse('更新成功');
        }
    }
    /**
     * 保存国家信息
     * @return array|int[]
     */
    public function saveCountryCode() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        $data = Request::post();
        $id = $data['id'];
        if (is_numeric($id)) {
            //更新数据
            $validate = new \app\admin\validate\CountryCode();
            $result = $validate->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////保存////////////
            Db::name('country_code')->where('id', $id)->withoutField('id')->save($data);
            ////////////////////////
            $this->delCache();
            $res['message'] = '编辑成功';
            return $this->successResponse($res);
        } else {
            unset($data['id']);
            $data['status'] = 1;
            $validate = new \app\admin\validate\CountryCode();
            $result = $validate->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////////////////////
            Db::startTrans();
            try {
                $new_id = Db::name('country_code')->insertGetId($data);
                if ($new_id) {
                    Db::name('country_code')->where('id', $new_id)->save(['order_id' => $new_id]);
                    ///////执行成功,提交事务///////
                    Db::commit();
                    $this->delCache();
                    $res['message'] = '添加成功';
                    return $this->successResponse($res);
                } else {
                    //任一执行失败,执行回滚操作
                    Db::rollback();
                    return $this->errorResponse('添加失败');
                }
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                return $this->errorResponse('添加失败');
            }
        }
    }
    /*
     * 保存城市信息
     */
    public function saveCityCode() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        $data = Request::post();
        $id = $data['id'];
        if (is_numeric($id)) {
            //更新数据
            $validate = new \app\admin\validate\CountryCode();
            $result = $validate->scene('city')->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////保存////////////
            Db::name('country_code')->where('id', $id)->withoutField('id')->save($data);
            ////////////////////////
            $this->delCache();
            $res['message'] = '编辑成功';
            return $this->successResponse($res);
        } else {
            unset($data['id']);
            $data['status'] = 1;
            $validate = new \app\admin\validate\CountryCode();
            $result = $validate->scene('city')->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////////////////////
            Db::startTrans();
            try {
                $new_id = Db::name('country_code')->insertGetId($data);
                if ($new_id) {
                    Db::name('country_code')->where('id', $new_id)->save(['order_id' => $new_id]);
                    ///////执行成功,提交事务///////
                    Db::commit();
                    $this->delCache();
                    $res['message'] = '添加成功';
                    return $this->successResponse($res);
                } else {
                    //任一执行失败,执行回滚操作
                    Db::rollback();
                    return $this->errorResponse('添加失败');
                }
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                return $this->errorResponse('添加失败');
            }
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('country_code')->clear();
    }
}
app/admin/controller/Currency.php
New file
@@ -0,0 +1,137 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
//use \app\admin\validate\DeliverRegion as DeliverRegionValidate;
class Currency extends Common {
    private $tableName = 'currency';
    private $viewPath = 'currency';
    /**
     * 分销区域列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '币种管理';
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('currency_name|currency_code', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name($this->tableName)->where($condition)->count();
                $list = Db::name($this->tableName)->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存分销区域
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new \app\admin\validate\Currency();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name($this->tableName)->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                $this->delCache();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name($this->tableName)->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name($this->tableName)->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                $this->delCache();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除分销区域
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name($this->tableName)->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('id', $id)->delete();
            //提交事务
            Db::commit();
            $this->delCache();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('currency')->clear();
    }
}
app/admin/controller/DeliverRegion.php
New file
@@ -0,0 +1,136 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\DeliverRegion as DeliverRegionValidate;
class DeliverRegion extends Common {
    /**
     * 分销区域列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('region_name|region_code', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,deliver_region_id asc';
                $count = Db::name('deliver_region')->where($condition)->count();
                $list = Db::name('deliver_region')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存分销区域
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new DeliverRegionValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $deliver_region_id = input('post.deliver_region_id');
            if (is_numeric($deliver_region_id)) {
                //更新数据
                $update_result = Db::name('deliver_region')->where('deliver_region_id', $deliver_region_id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['deliver_region_id']);
                $add_result = Db::name('deliver_region')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('deliver_region')->where('deliver_region_id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    public function getCurrencyList() {
        try{
            $order = 'order_id asc,id asc';
            $list = Db::name('currency')->field("*")->order($order)->cacheAlways(TRUE, 0, 'currency')->select()->toArray();
            if (!$list) {
                $list = [];
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        }
        catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除分销区域
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $deliver_region_id = input('deliver_region_id');
            if (!is_numeric($deliver_region_id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['deliver_region_id'] = $deliver_region_id;
            $info = Db::name('deliver_region')->field('deliver_region_id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('deliver_region')->where('deliver_region_id', $deliver_region_id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/DeliverRegionLogistics.php
New file
@@ -0,0 +1,148 @@
<?php
namespace app\admin\controller;
use function think\db\getLastSql;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\DeliverRegionLogistics as DeliverRegionLogisticsValidate;
class DeliverRegionLogistics extends Common {
    /**
     * 分销区域物流列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'drg.order_id asc,drg.id asc';
                $count = Db::name('deliver_region_logistics')
                    ->alias('drg')
                    ->join('web_deliver_region dr', 'drg.deliver_region_id=dr.deliver_region_id')
                    ->where($condition)->count();
                $list = Db::name('deliver_region_logistics')
                    ->alias('drg')
                    ->join('web_deliver_region dr', 'drg.deliver_region_id=dr.deliver_region_id')
                    ->field("drg.*,dr.region_code,dr.region_name")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
//                echo Db::getLastSql();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
//                print_r($list);
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存分销区域物流
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new DeliverRegionLogisticsValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('deliver_region_logistics')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('deliver_region_logistics')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('deliver_region_logistics')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除分销区域物流
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('deliver_region_logistics')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('deliver_region_logistics')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    public function getDeliverRegionList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $order = 'order_id asc';
            $list = Db::name('deliver_region')->field("*")->order($order)->select()->toArray();
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/DisPlatform.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\DisPlatform as DisPlatformValidate;
class DisPlatform extends Common {
    /**
     * 分销平台列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('platform_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('dis_platform')->where($condition)->count();
                $list = Db::name('dis_platform')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存分销平台
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new DisPlatformValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('dis_platform')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('dis_platform')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('dis_platform')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除分销平台
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('dis_platform')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('dis_platform')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/Goods.php
New file
@@ -0,0 +1,436 @@
<?php
namespace app\admin\controller;
use app\supplier\model\DistributionArea as DistributionAreaModel;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\supplier\model\GoodsAnnex;
use app\supplier\model\GoodsSpec;
use app\supplier\model\GoodsAttribute;
use app\supplier\model\GoodsLabel;
use app\supplier\model\GoodsRetailPriceLimit;
//use app\supplier\model\Goods;
//商品零售价限制
class Goods extends Common {
    /**
     * 商品管理
     * @return string
     */
    public function index() {
        return View::fetch();
    }
    /**
     * 获取商品列表
     * @return mixed
     */
    public function getGoodsList() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $platform_goods_code = input('platform_goods_code');
            $supplier_goods_code = input('supplier_goods_code');
            $condition['g.istemp'] = 1;//编辑过的商品
            if ($platform_goods_code) {
                $condition['g.platform_goods_code'] = $platform_goods_code;
            }
            if ($supplier_goods_code) {
                $condition['g.supplier_goods_code'] = $supplier_goods_code;
            }
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'g.id asc';
            $count = \app\supplier\model\Goods::alias('g')->where($condition)->count();
            $list = \app\supplier\model\Goods::alias('g')
                ->join('goods_desc gd', 'g.id=gd.goods_id')
                ->field("g.id,g.sales_form,g.supplier_goods_code,g.platform_goods_code,g.goods_purpose,g.add_time,g.status,g.publish_status,g.whether_dis,gd.goods_title_cn,g.first_cate_code,g.second_cate_code,g.three_cate_code,(select url from web_goods_picture where goods_id=g.id order by id asc limit 1) as picture,g.review_comments,g.is_show")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                throw new \Exception(lang('no_data_found'));
            }
            $categorylist = get_category();
            $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
            foreach ($list as &$item) {
                $item['first_cate_name'] = $categorylist[$item['first_cate_code']]['cate_name'];
                $item['second_cate_name'] = $categorylist[$item['second_cate_code']]['cate_name'];
                $item['three_cate_name'] = $categorylist[$item['three_cate_code']]['cate_name'];
            }
            $result['list'] = $list;
            $result['other'] = $other;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,is_show';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name('goods')->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 审核商品
     * @return array|int[]
     */
    public function reviewGoods() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('post.id');
            if (!is_numeric($id)) {
                throw new \Exception(lang('invalid_id'));
            }
            $status = input('post.status');
            //更新数据
            $info = Db::name('goods')->field('id,status')->where('id', $id)->find();
            if (!$info) {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
            if ($status == 1) {
                Db::name('goods')->where('id', $id)->update(['status' => 1, 'review_comments' => '']);
                $message = '操作成功,审核通过';
            } else {
                $review_comments = trim(input('review_comments'));
                if (!$review_comments) {
                    throw new \Exception('请填写审核不通过原因');
                }
                Db::name('goods')->where('id', $id)->update(['status' => 3, 'review_comments' => $review_comments]);
                $message = '操作成功,审核不通过';
            }
            // 提交事务
            Db::commit();
            return $this->successResponse($message);
        } catch (\Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 创建商品
     * @return string
     */
    public function create() {
        ////////
        View::assign('menuitem', 'goods-index');
        $id = input('id');
        if (!is_numeric($id)) {
            $this->redirect(url('/admin/goods/index')->build());
        }
        $other['id'] = $id;
        View::assign('other', $other);
        return View::fetch();
    }
    public function getGoodsInfo() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new \Exception(lang('invalid_id'));
            }
            $where = [
                'id' => $id,
            ];
            $info = Db::name('goods')->field('id,first_cate_code,second_cate_code,three_cate_code,brand_code')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            $info['goods_purpose'] = json_decode($info['goods_purpose'], TRUE);
            //////获取描述标题数据/////////
            $where_other = [
                'goods_id' => $info['id'],
            ];
            $goods_desc = Db::name('goods_desc')->field('goods_title_en,goods_title_cn')->where($where_other)->find();
            //获取描述内容数据
            $goods_desc_content = Db::name('goods_desc_content')->field('goods_desc_en,goods_desc_cn')->where($where_other)->find();
            ////////////////
            $result['info'] = $info;
            $result['goods_desc'] = $goods_desc;
            $result['goods_desc_content'] = $goods_desc_content;
            return $this->successResponse($result);
        } catch (\Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 获取商品分销信息
     * @return array|int[]
     */
    public function getGoodsDisInfo() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            $condition['g.istemp'] = 1;//编辑过的商品
            if ($id) {
                $condition['g.id'] = $id;
            }
            $info = \app\supplier\model\Goods::alias('g')
                ->join('goods_desc gd', 'g.id=gd.goods_id')
                ->join('goods_desc_content gdc', 'g.id=gdc.goods_id')
                ->field("g.id,g.warehouse_mode,g.sales_form,g.supplier_goods_code,g.platform_goods_code,g.goods_purpose,g.add_time,g.status,g.publish_status,g.whether_dis,g.is_limit_dis_platform,gd.goods_title_cn,gd.goods_title_en,gd.goods_keyword_en,gd.goods_keyword_cn,g.first_cate_code,g.second_cate_code,g.three_cate_code,g.docking_way,g.price_method,g.freight_attr_code,g.is_tort,g.is_stop_buy,g.recommend_man,gdc.goods_desc_en,gdc.goods_desc_cn")->where($condition)->find();
            if ($info) {
//                $categorylist = get_category();
//                $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
//                $info['first_cate_name'] = $categorylist[$info['first_cate_code']]['cate_name'];
//                $info['second_cate_name'] = $categorylist[$info['second_cate_code']]['cate_name'];
//                $info['three_cate_name'] = $categorylist[$info['three_cate_code']]['cate_name'];
                $info['attr_name'] = Db::name('goods_freight_attr')->where('attr_code', $info['freight_attr_code'])->value('attr_name');
                $info['goods_keyword_en'] = $info['goods_keyword_en'] ? json_decode($info['goods_keyword_en'], TRUE) : [];
                $info['goods_keyword_cn'] = $info['goods_keyword_cn'] ? json_decode($info['goods_keyword_cn'], TRUE) : [];
                $info['goodsSpecInfo'] = Db::name('goods_spec')->field('*')->where('goods_id', $info['id'])->find();
                $goods_attribute_info = Db::name('goods_attribute')->field('*')
                    ->withAttr('material_main', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_one', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_two', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_three', function ($value, $data) {
                        if ($value) {
                            $value = json_decode($value, TRUE);
                            return Db::name('goods_material')->whereIn('id', $value)->column('material_name');
                        } else {
                            return [];
                        }
                    })
                    ->where('goods_id', $info['id'])->find();
                $info['goodsAttributeInfo'] = $goods_attribute_info;
                $info['goodsAttributExtendList'] = Db::name('goods_attribute_extend')->field('*')->where('goods_id', $info['id'])->select()->toArray();
                $info['goodsRetailPriceLimitList'] = GoodsRetailPriceLimit::field('*')->where('goods_id', $info['id'])
                    ->withAttr('sale_country_code', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value("CONCAT(country_code,' ',country)");
                    })
                    ->withAttr('sales_platform', function ($value, $data) {
                        return Db::name('sales_platform')->where('id', $value)->value("platform_name");
                    })
                    ->order('id asc')->select()->toArray();///
                $info['goodsLabelList'] = GoodsLabel::field('label_type,goods_label')->where('goods_id', $info['id'])->order('id asc')->select()->toArray();///
                if ($info['is_limit_dis_platform'] == 1) {
                    $info['goodsLimitDisPlatformList'] = Db::name('goods_limit_dis_platform')
                        ->alias('a')
                        ->join('dis_platform b', 'a.dis_platform = b.id')
                        ->field('b.platform_name')->where('goods_id', $info['id'])->order('a.id asc')->select()->toArray();///
                } else {
                    $info['goodsLimitDisPlatformList'] = [];
                }
                $result['info'] = $info;
                ///分销区域//
                $disAreaList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('distribution_area da', 'da.id=gda.distribution_area_id')
                    ->field("gda.one_shipment,gda.distribution_area_id")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)->withAttr('one_shipment', function ($value, $data) {
                        return $value == 1 ? '一件代发' : '';
                    })->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disAreaList'] = $disAreaList;
                //分销库存
                $disStockList = Db::name('goods_distribution_area_stock')
                    ->alias('gdas')
                    ->join('third_party_stock tps', 'tps.id=gdas.third_party_stock_id')
                    ->field("gdas.distribution_area_id,gdas.supplier_stock_amount,gdas.platform_stock_amount,gdas.goods_distribution_area_id,tps.third_party_stock_name,tps.docking_code,tps.stock_type")->where('gdas.goods_id', $info['id'])->where('gdas.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disStockList'] = $disStockList;
                //分销价格///
                $disPriceList = Db::name('goods_distribution_area_price')
                    ->alias('gdap')
                    ->join('goods_distribution_area gda', 'gda.id=gdap.goods_distribution_area_id')
                    ->join('logistics_product lp', 'lp.id=gdap.logistics_product_id')
                    ->field("gdap.distribution_area_id,gdap.goods_distribution_area_id,lp.product_name_cn,gdap.supply_price,gdap.dis_price,gdap.package_goods_amount,gda.take_effect_time")->where('gdap.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('take_effect_time', function ($value, $data) {
                        return date('Y-m-d H:i:s', $value);
                    })->select()->toArray();
                $result['disPriceList'] = $disPriceList;
                //退货地址列表//
                $disReturnGoodsList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('third_party_stock tps', 'tps.id=gda.third_party_stock_id')
                    ->join('third_party_stock_address tpsa', 'tpsa.id=gda.third_party_stock_address_id')
                    ->field("gda.distribution_area_id,tps.third_party_stock_name,tpsa.stock_address,tpsa.stock_city,tpsa.stock_province,tpsa.stock_post_code,tpsa.stock_country_id,tpsa.receive_man,tpsa.tel")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('stock_country_id', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value('country');
                    })
                    ->select()->toArray();
                $result['disReturnGoodsList'] = $disReturnGoodsList;
                $categorylist = get_category();
                $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
                $catelist = Db::name('goods_category')
                    ->alias('GC')
                    ->join('docking_platform DP', 'DP.cate_code=GC.cate_code')
                    ->field('GC.*,DP.docking_platform_name')->where(['GC.goods_id' => $info['id'], 'GC.status' => 1])->select()->toArray();
                foreach ($catelist as &$value) {
                    $value['first_cate_name'] = $categorylist[$value['first_cate_code']]['cate_name'];
                    $value['second_cate_name'] = $categorylist[$value['second_cate_code']]['cate_name'];
                    $value['three_cate_name'] = $categorylist[$value['three_cate_code']]['cate_name'];
                }
                $result['catelist']=$catelist;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getGoodsPictureList() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $goods_id = input('goods_id');
            $picture_type = input('picture_type');
            if (is_array($picture_type)) {
                $where[] = ['a.goods_id', '=', $goods_id];
                if (is_array($picture_type)) {
                    $where[] = ['b.type', 'in', $picture_type];
                }
                $list = Db::name('goods_picture')
                    ->alias('a')
                    ->join('goods_picture_type b', 'a.id=b.picture_id')
                    ->field('DISTINCT  a.id,a.url')->where($where)->order('id asc')->select()->toArray();
            } else {
                $where[] = ['goods_id', '=', $goods_id];
                $list = Db::name('goods_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            }
            if (!$list) {
                throw new \Exception(lang('no_data_found'));
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 根据类型获取商品图片数量
     * @return void
     */
    public function getGoodsPictureCount() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $goods_id = input('goods_id');
            $goodsPictureCount['type0'] = Db::name('goods_picture')->where(['goods_id' => $goods_id])->count();
            $goodsPictureCount['type1'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 1])->count();
            $goodsPictureCount['type2'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 2])->count();
            $goodsPictureCount['type3'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 3])->count();
            $goodsPictureCount['type4'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 4])->count();
            $goodsPictureCount['type5'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 5])->count();
            $goodsPictureCount['type6'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 6])->count();
            $goodsPictureCount['type7'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 7])->count();
            $result['goodsPictureCount'] = $goodsPictureCount;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分销区域
     */
    private function getDisArea($id) {
        return Db::name('distribution_area')
            ->alias('da')
            ->join('deliver_region dr', 'dr.deliver_region_id=da.deliver_region_id')
            ->field("da.dis_currency,dr.region_name,da.dis_model")
            ->where('da.id', $id)->find();
    }
    /**
     * 获取分类列表
     * @return array
     */
    public function getCategoryList() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $result['list'] = $this->getchildrenids(0);
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 循环获取分类数据
     * @param $id
     * @return array|void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    protected function getchildrenids($id) {
        $where['father_code'] = $id;
        $result = Db::name('category')->field('id,cate_code as value,cate_name as label')->where($where)->cacheAlways(TRUE, 0, 'category')->order('id asc')->select()->toArray();
        if ($result) {
            foreach ($result as &$val) {
                $val['children'] = $this->getchildrenids($val['value']); ////
            }
            return $result;
        }
    }
}
app/admin/controller/GoodsBrand.php
New file
@@ -0,0 +1,181 @@
<?php
namespace app\admin\controller;
use app\supplier\model\GoodsAnnex;
use think\facade\Config;
use think\facade\Db;
use think\facade\Request;
use think\facade\View;
use think\Exception;
class GoodsBrand extends Common {
    /*
     * 品牌管理
     */
    public function index(): string {
        View::assign('menuitem', strtolower('goodsBrand-index'));
        $other['title'] = '品牌管理';
        $guide['one']['text'] = '数据审核';
        $guide['two']['text'] = '品牌审核';
        $guide['two']['url'] = url('/admin/supplier/index')->build();
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    /*
     * 获取商品品牌列表
     */
    public function getGoodsBrandList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $kw = input('kw');
            $condition['istemp'] = 1;
            $condition['finish_status'] = 1;
            $condition['status'] = 0;
            if (!empty($kw)) {
                $condition[] = array('brand_name', 'like', "%$kw%");
            }
            $p = input('page', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'id desc';
            $count = Db::name('goods_brand')->where($condition)->count();
            $list = Db::name('goods_brand')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                $list = [];
            }
            $result['code'] = 200;
            $result['list'] = $list;
            $result['other'] = $other;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 获取品牌证书列表
     */
    public function getBrandCertList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $brand_id = input('brand_id');
            $where['brand_id'] = $brand_id;
            $list = Db::name('goods_brand_cert')->field('id,title,filename,filesize,ext')->where($where)->withAttr('filesize', function ($value) {
                return getsizebytype($value);
            })->order('id asc')->select()->toArray();///
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 获取品牌协议列表
     */
    public function getBrandAgreementList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $brand_id = input('brand_id');
            $where['brand_id'] = $brand_id;
            $list = Db::name('goods_brand_agreement')->field('id,title,filename,filesize,ext')->where($where)->withAttr('filesize', function ($value) {
                return getsizebytype($value);
            })->order('id asc')->select()->toArray();///
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 获取品牌备案范围列表
     */
    public function getGoodsBrandFilingsList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $brand_id = input('brand_id');
            $where['GBF.brand_id'] = $brand_id;
            $list = Db::name('goods_brand_filings')
                ->alias('GBF')
                ->join('stock_country SC', 'GBF.stock_country_id=SC.id')
                ->join('dis_platform DP', 'GBF.dis_platform_id=DP.id')
                ->field('GBF.*,SC.country,DP.platform_name')->where($where)->order('GBF.id asc')->select()->toArray();///
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 品牌审核
     * @return array|int[]
     */
    public function reviewGoodsBrand() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $brand_id = input('post.brand_id');
            if (is_numeric($brand_id)) {
                $status = input('post.status');
                //更新数据
                $info = Db::name('goods_brand')->field('id,status')->where('id', $brand_id)->find();
                if (!$info) {
                    throw new Exception(lang('no_data_found'));
                }
                if ($info['status'] == 1) {
                    throw new Exception('该申请已审核通过,不能重复审核');
                }
                if ($status == 1) {
                    Db::name('goods_brand')->where('id', $brand_id)->update(['status' => 1]);
                    $message = '操作成功,审核通过';
                } else {
                    Db::name('goods_brand')->where('id', $brand_id)->update(['status' => 2]);
                    $message = '操作成功,审核不通过';
                }
                // 提交事务
                Db::commit();
                return $this->successResponse($message);
            } else {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/GoodsFreightAttr.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\GoodsFreightAttr as GoodsFreightAttrValidate;
class GoodsFreightAttr extends Common {
    /**
     * 货运属性列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('attr_name|attr_code', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('goods_freight_attr')->where($condition)->count();
                $list = Db::name('goods_freight_attr')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存货运属性
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new GoodsFreightAttrValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('goods_freight_attr')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('goods_freight_attr')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('goods_freight_attr')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除货运属性
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('goods_freight_attr')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('goods_freight_attr')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/GoodsMaterial.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\GoodsMaterial as GoodsMaterialValidate;
class GoodsMaterial extends Common {
    /**
     * 材质管理列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('material_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('goods_material')->where($condition)->count();
                $list = Db::name('goods_material')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存材质
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new GoodsMaterialValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('goods_material')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('goods_material')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('goods_material')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除材质
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('goods_material')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('goods_material')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/GoodsPurpose.php
New file
@@ -0,0 +1,133 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\GoodsPurpose as GoodsPurposeValidate;
class GoodsPurpose extends Common {
    /**
     * 商品用途列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('purpose_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('goods_purpose')->where($condition)->count();
                $list = Db::name('goods_purpose')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存商品用途
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new GoodsPurposeValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('goods_purpose')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                $this->delCache();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('goods_purpose')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('goods_purpose')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                $this->delCache();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除商品用途
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('goods_purpose')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('goods_purpose')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            $this->delCache();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('goods_purpose')->clear();
    }
}
app/admin/controller/Goodskd.php
New file
@@ -0,0 +1,519 @@
<?php
namespace app\admin\controller;
use app\supplier\model\DistributionArea as DistributionAreaModel;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\supplier\model\GoodsAnnex;
use app\supplier\model\GoodsSpec;
use app\supplier\model\GoodsAttribute;
use app\supplier\model\GoodsLabel;
use app\supplier\model\GoodsRetailPriceLimit;
//use app\supplier\model\Goods;
//商品零售价限制
class Goodskd extends Common {
    /**
     * 商品管理
     * @return string
     */
    public function index() {
        return View::fetch();
    }
    /**
     * 获取刊登列表
     * @return mixed
     */
    public function getGoodsList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $platform_goods_code = input('platform_goods_code');
            $supplier_goods_code = input('supplier_goods_code');
            $condition['g.istemp'] = 1;//编辑过的商品
            $condition['g.kd_audit_status'] = 2;
            if ($platform_goods_code) {
                $condition['g.platform_goods_code'] = $platform_goods_code;
            }
            if ($supplier_goods_code) {
                $condition['g.supplier_goods_code'] = $supplier_goods_code;
            }
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'g.id asc';
            $count = \app\supplier\model\Goods::alias('g')->where($condition)->count();
            $list = \app\supplier\model\Goods::alias('g')
                ->join('goods_desc gd', 'g.id=gd.goods_id')
                ->field("g.id,g.sales_form,g.supplier_goods_code,g.platform_goods_code,gd.goods_title_cn,(select url from web_goods_picture where goods_id=g.id order by id asc limit 1) as picture,g.kd_review_comments,g.kd_publish_status,g.kd_audit_status")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                throw new Exception(lang('no_data_found'));
            }
//            $categorylist = get_category();
//            $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
//            foreach ($list as &$item) {
//                $item['first_cate_name'] = $categorylist[$item['first_cate_code']]['cate_name'];
//                $item['second_cate_name'] = $categorylist[$item['second_cate_code']]['cate_name'];
//                $item['three_cate_name'] = $categorylist[$item['three_cate_code']]['cate_name'];
//            }
            $result['list'] = $list;
            $result['other'] = $other;
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 审核商品刊登
     * @return array|int[]
     */
    public function reviewGoodsKD() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('post.id');
            if (!is_numeric($id)) {
                throw new Exception(lang('invalid_id'));
            }
            $status = input('post.status');
            //更新数据
            $info = Db::name('goods')->field('id,kd_publish_status,kd_audit_status,supplier_goods_code')->where('id', $id)->find();
            if (!$info) {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
            if ($status == 1) {
                //status=kd_publish_status
                $kd_data = [
                    'status' => 1,
                    'kd_publish_status' => 1,
                    'kd_audit_status' => 1,
                    'kd_review_comments' => '',
                ];
                Db::name('goods')->where('id', $id)->update($kd_data);
                $message = '操作成功,审核通过';
            } else {
                $kd_review_comments = trim(input('kd_review_comments'));
                if (!$kd_review_comments) {
                    throw new Exception('请填写审核不通过原因');
                }
                $kd_data = [
                    'status' => 0,
                    'kd_publish_status' => 0,
                    'kd_audit_status' => 3,
                    'kd_review_comments' => $kd_review_comments,
                ];
                Db::name('goods')->where('id', $id)->update($kd_data);
                $message = '操作成功,审核不通过';
            }
            // 提交事务
            Db::commit();
            return $this->successResponse($message);
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 审核商品刊登
     * @return array|int[]
     */
    /**
     * 商品刊登审核
     * @return string
     */
    public function create() {
        ////////
        View::assign('menuitem', 'goodskd-index');
        $id = input('id');
        if (!is_numeric($id)) {
            $this->redirect(url('/admin/goodskd/index')->build());
        }
        $other['id'] = $id;
        View::assign('other', $other);
        return View::fetch();
    }
    public function getGoodsInfo() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception(lang('invalid_id'));
            }
            $where = [
                'id' => $id,
            ];
            $info = Db::name('goods')->field('id,first_cate_code,second_cate_code,three_cate_code,brand_code')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            $info['goods_purpose'] = json_decode($info['goods_purpose'], TRUE);
            //////获取描述标题数据/////////
            $where_other = [
                'goods_id' => $info['id'],
            ];
            $goods_desc = Db::name('goods_desc')->field('goods_title_en,goods_title_cn')->where($where_other)->find();
            //获取描述内容数据
            $goods_desc_content = Db::name('goods_desc_content')->field('goods_desc_en,goods_desc_cn')->where($where_other)->find();
            ////////////////
            $result['info'] = $info;
            $result['goods_desc'] = $goods_desc;
            $result['goods_desc_content'] = $goods_desc_content;
            return $this->successResponse($result);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 获取商品分销信息
     * @return array|int[]
     */
    public function getGoodsDisInfo() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
//            $supplier_goods_code = input('supplier_goods_code');
            $id = input('id');
            $condition['g.istemp'] = 1;//编辑过的商品
            $condition['g.id'] = $id;
            $info = \app\supplier\model\Goods::alias('g')
                ->join('goods_desc gd', 'g.id=gd.goods_id')
                ->join('goods_desc_content gdc', 'g.id=gdc.goods_id')
                ->field("g.id,g.warehouse_mode,g.sales_form,g.supplier_goods_code,g.platform_goods_code,g.goods_purpose,g.add_time,g.status,g.publish_status,g.whether_dis,g.is_limit_dis_platform,gd.goods_title_cn,gd.goods_title_en,gd.goods_keyword_en,gd.goods_keyword_cn,g.first_cate_code,g.second_cate_code,g.three_cate_code,g.docking_way,g.price_method,g.freight_attr_code,g.is_tort,g.is_stop_buy,g.recommend_man,gdc.goods_desc_en,gdc.goods_desc_cn")->where($condition)->find();
            if ($info) {
                $info['attr_name'] = Db::name('goods_freight_attr')->where('attr_code', $info['freight_attr_code'])->value('attr_name');
                $info['goods_keyword_en'] = $info['goods_keyword_en'] ? json_decode($info['goods_keyword_en'], TRUE) : [];
                $info['goods_keyword_cn'] = $info['goods_keyword_cn'] ? json_decode($info['goods_keyword_cn'], TRUE) : [];
                $info['goodsSpecInfo'] = Db::name('goods_spec')->field('*')->where('goods_id', $info['id'])->find();
                $goods_attribute_info = Db::name('goods_attribute')->field('*')
                    ->withAttr('material_main', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_one', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_two', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_three', function ($value, $data) {
                        if ($value) {
                            $value = json_decode($value, TRUE);
                            return Db::name('goods_material')->whereIn('id', $value)->column('material_name');
                        } else {
                            return [];
                        }
                    })
                    ->where('goods_id', $info['id'])->find();
                $info['goodsAttributeInfo'] = $goods_attribute_info;
                $info['goodsAttributExtendList'] = Db::name('goods_attribute_extend')->field('*')->where('goods_id', $info['id'])->select()->toArray();
                $info['goodsRetailPriceLimitList'] = GoodsRetailPriceLimit::field('*')->where('goods_id', $info['id'])
                    ->withAttr('sale_country_code', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value("CONCAT(country_code,' ',country)");
                    })
                    ->withAttr('sales_platform', function ($value, $data) {
                        return Db::name('sales_platform')->where('id', $value)->value("platform_name");
                    })
                    ->order('id asc')->select()->toArray();///
                $info['goodsLabelList'] = GoodsLabel::field('label_type,goods_label')->where('goods_id', $info['id'])->order('id asc')->select()->toArray();///
                if ($info['is_limit_dis_platform'] == 1) {
                    $info['goodsLimitDisPlatformList'] = Db::name('goods_limit_dis_platform')
                        ->alias('a')
                        ->join('dis_platform b', 'a.dis_platform = b.id')
                        ->field('b.platform_name')->where('goods_id', $info['id'])->order('a.id asc')->select()->toArray();///
                } else {
                    $info['goodsLimitDisPlatformList'] = [];
                }
                $result['info'] = $info;
                ///分销区域//
                $disAreaList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('distribution_area da', 'da.id=gda.distribution_area_id')
                    ->field("gda.one_shipment,gda.distribution_area_id")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)->withAttr('one_shipment', function ($value, $data) {
                        return $value == 1 ? '一件代发' : '';
                    })->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disAreaList'] = $disAreaList;
                //分销库存
                $disStockList = Db::name('goods_distribution_area_stock')
                    ->alias('gdas')
                    ->join('third_party_stock tps', 'tps.id=gdas.third_party_stock_id')
                    ->field("gdas.distribution_area_id,gdas.supplier_stock_amount,gdas.platform_stock_amount,gdas.goods_distribution_area_id,tps.third_party_stock_name,tps.docking_code,tps.stock_type")->where('gdas.goods_id', $info['id'])->where('gdas.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disStockList'] = $disStockList;
                //分销价格///
                $disPriceList = Db::name('goods_distribution_area_price')
                    ->alias('gdap')
                    ->join('goods_distribution_area gda', 'gda.id=gdap.goods_distribution_area_id')
                    ->join('logistics_product lp', 'lp.id=gdap.logistics_product_id')
                    ->field("gdap.distribution_area_id,gdap.goods_distribution_area_id,lp.product_name_cn,gdap.supply_price,gdap.dis_price,gdap.package_goods_amount,gda.take_effect_time")->where('gdap.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('take_effect_time', function ($value, $data) {
                        return date('Y-m-d H:i:s', $value);
                    })->select()->toArray();
                $result['disPriceList'] = $disPriceList;
                //退货地址列表//
                $disReturnGoodsList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('third_party_stock tps', 'tps.id=gda.third_party_stock_id')
                    ->join('third_party_stock_address tpsa', 'tpsa.id=gda.third_party_stock_address_id')
                    ->field("gda.distribution_area_id,tps.third_party_stock_name,tpsa.stock_address,tpsa.stock_city,tpsa.stock_province,tpsa.stock_post_code,tpsa.stock_country_id,tpsa.receive_man,tpsa.tel")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('stock_country_id', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value('country');
                    })
                    ->select()->toArray();
                $result['disReturnGoodsList'] = $disReturnGoodsList;
                $categorylist = get_category();
                $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
                $catelist = Db::name('goods_category')
                    ->alias('GC')
                    ->join('docking_platform DP', 'DP.cate_code=GC.cate_code')
                    ->field('GC.*,DP.docking_platform_name')->where(['GC.goods_id' => $info['id'], 'GC.status' => 1])->select()->toArray();
                foreach ($catelist as &$value) {
                    $value['first_cate_name'] = $categorylist[$value['first_cate_code']]['cate_name'];
                    $value['second_cate_name'] = $categorylist[$value['second_cate_code']]['cate_name'];
                    $value['three_cate_name'] = $categorylist[$value['three_cate_code']]['cate_name'];
                }
                $result['catelist']=$catelist;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getGoodsPictureList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $goods_id = input('goods_id');
            $picture_type = input('picture_type');
            if (is_array($picture_type)) {
                $where[] = ['a.goods_id', '=', $goods_id];
                if (is_array($picture_type)) {
                    $where[] = ['b.type', 'in', $picture_type];
                }
                $list = Db::name('goods_picture')
                    ->alias('a')
                    ->join('goods_picture_type b', 'a.id=b.picture_id')
                    ->field('DISTINCT  a.id,a.url')->where($where)->order('id asc')->select()->toArray();
            } else {
                $where[] = ['goods_id', '=', $goods_id];
                $list = Db::name('goods_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            }
            if (!$list) {
                return $this->errorResponse(lang('no_data_found'));
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 根据类型获取商品图片数量
     * @return void
     */
    public function getGoodsPictureCount() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $goods_id = input('goods_id');
            $goodsPictureCount['type0'] = Db::name('goods_picture')->where(['goods_id' => $goods_id])->count();
            $goodsPictureCount['type1'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 1])->count();
            $goodsPictureCount['type2'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 2])->count();
            $goodsPictureCount['type3'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 3])->count();
            $goodsPictureCount['type4'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 4])->count();
            $goodsPictureCount['type5'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 5])->count();
            $goodsPictureCount['type6'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 6])->count();
            $goodsPictureCount['type7'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 7])->count();
            $result['goodsPictureCount'] = $goodsPictureCount;
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分销区域
     */
    private function getDisArea($id) {
        return Db::name('distribution_area')
            ->alias('da')
            ->join('deliver_region dr', 'dr.deliver_region_id=da.deliver_region_id')
            ->field("da.dis_currency,dr.region_name,da.dis_model")
            ->where('da.id', $id)->find();
    }
    /**
     * 获取刊登信息
     * @return array|int[]
     */
    public function getPublishOrderInfo() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception(lang('invalid_id'));
            }
            $where = [
                'id' => $id,
            ];
            $info = Db::name('publish_order')->field('*')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            //////获取描述标题数据/////////
            $where_other = [
                'publish_order_id' => $id,
            ];
            ////////////////
            $result['info'] = $info;
            return $this->successResponse($result);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getPublishOrderPictureList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $publish_order_id = input('publish_order_id');
            $where[] = ['publish_order_id', '=', $publish_order_id];
            $list = Db::name('publish_order_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            if (!$list) {
                throw new Exception(lang('no_data_found'));
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分类列表
     * @return array
     */
    public function getCategoryList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $result['list'] = $this->getchildrenids(0);
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 循环获取分类数据
     * @param $id
     * @return array|void
     */
    protected function getchildrenids($id) {
        $where['father_code'] = $id;
        $result = Db::name('category')->field('id,cate_code as value,cate_name as label')->where($where)->cacheAlways(TRUE, 0, 'category')->order('id asc')->select()->toArray();
        if ($result) {
            foreach ($result as &$val) {
                $val['children'] = $this->getchildrenids($val['value']); ////
            }
            return $result;
        }
    }
    /**
     * 商品发布
     * @return array|int[]
     */
    public function goodsPublish() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $publish_order_id = input('publish_order_id');
            $goods_info = Db::name('goods')->field('id')->where('id', $publish_order_id)->find();
            if (!$goods_info) {
                throw new Exception(lang('goods_not_exist'));
            }
            $update_data = [
                'publish_status' => 1,
                'update_time'    => time(),
            ];
            Db::name('goods')->where('id', $publish_order_id)->update($update_data);
            // 提交事务
            Db::commit();
            return $this->successResponse(lang('goods_publish_success'));
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/Index.php
New file
@@ -0,0 +1,25 @@
<?php
namespace app\admin\controller;
use think\facade\View;
use think\facade\Request;
use think\facade\Config;
use think\facade\Db;
class Index extends Common {
    public function index() {
        header('Content-Type:text/html;charset=utf-8');
        ///////////////////////////////
        $guide['one']['text'] = '';
//        $guide['two']['text'] = '';
//        $guide['two']['url'] = '';
        View::assign('guide', $guide);
        //////////////////////////////
        return View::fetch();
    }
}
app/admin/controller/Language.php
New file
@@ -0,0 +1,141 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\admin\model\Language as LanguageModel;
class Language extends Common {
    private $tableName = 'language';
    private $viewPath = 'language';
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '多语言管理';
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = LanguageModel::where($condition)->count();
                $list = LanguageModel::field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,is_show';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name($this->tableName)->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 保存
     */
    public function save() {
        //开始事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $validate=new \app\admin\validate\Language();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name($this->tableName)->where('id', $id)->withoutField('id,delete_time')->save($data);
                if ($update_result === FALSE) {
                    throw new Exception(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name($this->tableName)->insertGetId($data);
                if (!$add_result) {
                    throw new Exception(lang('add_failed'));
                }
                Db::name($this->tableName)->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name($this->tableName)->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('id', $id)->useSoftDelete('delete_time',time())->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/LanguagePag.php
New file
@@ -0,0 +1,361 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Cache;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\admin\model\LanguagePag as LanguagePagModel;
use app\admin\model\Language;
class LanguagePag extends Common {
    private $tableName = 'language_pag';
    private $viewPath = 'languagePag';
    /**
     * 货运属性列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '多语言包管理';
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch();
        } else {
            try {
                $platform_type = input('platform_type');
                $lang = input('lang');
                $type = input('type');
                $name = input('name');
                $value = input('value');
                $condition = [];
                if (!empty($platform_type)) {
                    $condition[] = ['platform_type', '=', $platform_type];
                }
                if (!empty($lang)) {
                    $condition[] = ['lang', '=', $lang];
                }
                if (!empty($type)) {
                    $condition[] = ['type', '=', $type];
                }
                if (!empty($name)) {
                    $condition[] = ['name', 'like', "%$name%"];
                }
                if (!empty($value)) {
                    $condition[] = ['value', 'like', "%$value%"];
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'id desc';
                $count = LanguagePagModel::where($condition)->count();
                $list = LanguagePagModel::field("id,lang,type,name,value,platform_type")->append(['from_value'])->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /*
     * 同步语言包
     */
    public function sync() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            if (!isset($data['from_id']) || !is_numeric($data['from_id']) || $data['from_id'] < 1) {
                throw new Exception('源语言ID错误');
            }
            $from_id = $data['from_id'];
            if (!isset($data['to_id']) || !is_numeric($data['to_id']) || $data['to_id'] < 1) {
                throw new Exception('目标语言ID错误');
            }
            $to_id = $data['to_id'];
            //获取源语言
            $from = Language::find($from_id);
            if ($from->isEmpty()) {
                throw new Exception('源语言不存在');
            }
            $platform_type = $data['platform_type'];//平台类型
            //获取目标语言
            $to = Language::find($to_id);
            if ($to->isEmpty()) {
                throw new Exception('目标语言不存在');
            }
            //获取源语言
            $pags = LanguagePagModel::where(['platform_type' => $platform_type, 'lang' => $from['symbol']])
                ->order(['type' => 'asc', 'name' => 'asc'])
                ->select()
                ->toArray();
            foreach ($pags as &$pag) {
                //查询是否存在
                $to_pag = LanguagePagModel::where(['platform_type' => $platform_type, 'lang' => $to['symbol'], 'type' => $pag['type'], 'name' => $pag['name']])->findOrEmpty();
                if ($to_pag->isEmpty()) {
                    LanguagePagModel::create([
                        'platform_type' => $platform_type,
                        'lang'          => $to['symbol'],
                        'type'          => $pag['type'],
                        'name'          => $pag['name'],
                    ]);
                }
            }
            Db::commit();
            return $this->successResponse('同步成功!');
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 翻译语言包
     */
    public function trans() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            if (!isset($data['from_id']) || !is_numeric($data['from_id']) || $data['from_id'] < 1) {
                throw new Exception('源语言ID错误');
            }
            $from_id = $data['from_id'];
            if (!isset($data['to_id']) || !is_numeric($data['to_id']) || $data['to_id'] < 1) {
                throw new Exception('目标语言ID错误');
            }
            $to_id = $data['to_id'];
            //获取源语言
            $from = Language::find($from_id);
            if ($from->isEmpty()) {
                throw new Exception('源语言不存在');
            }
            //获取目标语言
            $to = Language::find($to_id);
            if ($to->isEmpty()) {
                throw new Exception('目标语言不存在');
            }
            $platform_type = $data['platform_type'];//平台类型
            //获取待翻译目标语言
            $pags = LanguagePagModel::where(['platform_type' => $platform_type, 'lang' => $to['symbol']])
                ->where(" value IS NULL OR value='' ")
                ->order(['type' => 'asc', 'name' => 'asc'])
                ->select()
                ->toArray();
            $qArray = array();
            $idArray = array();
            foreach ($pags as &$pag) {
                //查询源语言
                $from_pag = LanguagePagModel::where(['platform_type' => $platform_type, 'lang' => $from['symbol'], 'type' => $pag['type'], 'name' => $pag['name']])->where(" value IS NOT NULL  OR value='' ")->findOrEmpty();
                if ($from_pag->isEmpty()) {
                    continue;
                } else {
                    array_push($qArray, $from_pag['value']);
                    array_push($idArray, $pag['id']);
                }
            }
            if (count($qArray) == 0) throw new Exception('不存在待翻译的内容');
            $YDObj = new  \app\common\service\YouDaoTrans();
            $ret = $YDObj->do_translate($qArray, $from['trans_symbol'], $to['trans_symbol']);
            $ret = json_decode($ret, TRUE);
            if ($ret['errorCode'] != 0) {
                throw new Exception('错误代码:' . $ret['errorCode'] . ',请核对错误代码列表');
            }
            foreach ($idArray as $key => $id) {
                LanguagePagModel::update([
                    'id'    => $id,
                    'value' => $ret['translateResults'][$key]['translation'],
                ]);
            }
            Db::commit();
            return $this->successResponse('翻译成功!');
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    public function getLanguageList() {
        ////////
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $condition['is_show'] = 1;
            $order = 'order_id asc,id asc';
            $list = Db::name('language')->field("*")->where($condition)->order($order)->select()->toArray();
            if (!$list) {
                $list = [];
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     *保存
     */
    public function save() {
        //开始事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $id = input('post.id');
            if (!is_numeric($id) || $id < 1) {
                unset($data['id']);
            }
            $validate = new \app\admin\validate\LanguagePag();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            if (is_numeric($id) && $id > 0) {
                //更新数据
                $update_result = LanguagePagModel::where('id', $id)->withoutField('id')->update($data);
                if ($update_result === FALSE) {
                    throw new Exception(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                $add_result = LanguagePagModel::insertGetId($data);
                if (!$add_result) {
                    throw new Exception(lang('add_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name($this->tableName)->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 清除值
     */
    public function clearValue() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name($this->tableName)->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('id', $id)->update(['value'=>'']);
            //提交事务
            Db::commit();
            return $this->successResponse('值已清空!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 生成json包
     */
    public function createJson() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $list = Language::order('order_id asc,id asc')->select()->toArray();
            foreach ($list as $item) {
                $paglist = LanguagePagModel::field("platform_type,lang,type,name,value")
                    ->where(['lang' => $item['symbol']])
                    ->order(['type' => 'asc', 'name' => 'asc', 'value' => 'asc'])
                    ->select()
                    ->toArray();
                if (!$paglist) {
                    continue;
                }
                foreach ($paglist as $pag){
                    $pag_result[$pag['platform_type']][$pag['lang']][$pag['type']][$pag['name']] = $pag['value'];
                }
                //生成json包
                foreach ($pag_result as $pltype => $platformtype){
                    //平台类型
                    foreach ($platformtype as $lang => $paglang){
                        $json = json_encode($paglang, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
                        // 保存文件
                        g_mkdir("./static/lang/$pltype");
                        $filePath="./static/lang/$pltype/$lang" . '.json';
                        file_put_contents($filePath, $json);
                    }
                }
            }
            $result='生成成功!';
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/Login.php
New file
@@ -0,0 +1,198 @@
<?php
namespace app\admin\controller;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use think\facade\Config;
use think\captcha\facade\Captcha;
use app\BaseController;
class Login extends BaseController
{
    public function index()
    {
        header('Content-Type:text/html;charset=utf-8');
        $Opadmin = new \app\admin\util\Opadmin();
        if ($Opadmin->islogin()) {
            $this->redirect(url('/admin/')->build());
        }
        return View::fetch();
    }
    public function login()
    {
        if (request()->isPost()) {
            $Opadmin = new \app\admin\util\Opadmin(Request::post('username'), Request::post('password')); //////企业账号/////////////
            $returnmsg = $Opadmin->login();
            if ($returnmsg['code'] == 400) {
                return $returnmsg;
            } elseif ($returnmsg['code'] == 200) {
                $backurl = Request::post('backurl');
                if (empty($backurl)) {
                    $returnmsg['url'] = url('/admin/index/index')->build();
                } else {
                    $returnmsg['url'] = $backurl;
                }
                return $returnmsg;
            }
        } else {
            $d['code'] = 0;
            $d['des'] = '参数有误!';
            return $d;
        }
    }
    public function logout()
    {
        $Opadmin = new \app\admin\util\Opadmin();
        $Opadmin->loginout();
        $this->redirect(url('/admin/login/index')->build());
    }
    public function captcha()
    {
        return Captcha::create();
    }
    public function captchaCheck()
    {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $code = trim(Request::post('captcha'));
        // 检测输入的验证码是否正确,$value为用户输入的验证码字符串
        $captcha = new Captcha();
        if (!$captcha->check($code)) {
            // 验证失败
            return $this->errorResponse(lang('captcha_is_incorrect'));
        }
        return $this->successResponse(lang('captcha_success'));
    }
    public function captchaCheckAndMsg()
    {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $code = trim(Request::post('captcha'));
            $phone = trim(Request::post('phone'));
            //        echo $phone;
            //        exit();
            // 检测输入的验证码是否正确,$value为用户输入的验证码字符串
            //            $captcha = new Captcha();
            if (!captcha_check($code)) {
                // 验证失败
                throw new \Exception(lang('captcha_is_incorrect'), 400);
                //                return $this->errorResponse(lang('captcha_is_incorrect'));
            }
            //查询120秒内是否已有发送
            $localTime = time();
            $where = [
                ['phone', '=', $phone],
                ['add_time', '>=', $localTime - 120],
                ['type', '=', 1],
            ];
            $info = Db::name('phone_msg')->field('*')->where($where)->find();
            if ($info) {
                throw new \Exception("二分钟内,只能发送一次", 400);
            }
            $phoneCode = randomkeys(4, 'regCode');
            $cred = new \TencentCloud\Common\Credential(Config::get('qcloud.Qcloud.SecretId'), Config::get('qcloud.Qcloud.SecretKey'));
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            $httpProfile = new \TencentCloud\Common\Profile\HttpProfile();
            // 配置代理(无需要直接忽略)
            // $httpProfile->setProxy("https://ip:port");
            $httpProfile->setReqMethod("GET");  // get请求(默认为post请求)
            $httpProfile->setReqTimeout(10);    // 请求超时时间,单位为秒(默认60秒)
            $httpProfile->setEndpoint("sms.tencentcloudapi.com");  // 指定接入地域域名(默认就近接入)
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            $clientProfile = new \TencentCloud\Common\Profile\ClientProfile();
            $clientProfile->setSignMethod("TC3-HMAC-SHA256");  // 指定签名算法
            $clientProfile->setHttpProfile($httpProfile);
            // 实例化要请求产品(以sms为例)的client对象,clientProfile是可选的
            // 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8
            $client = new \TencentCloud\Sms\V20210111\SmsClient($cred, "ap-guangzhou", $clientProfile);
            // 实例化一个 sms 发送短信请求对象,每个接口都会对应一个request对象。
            $req = new \TencentCloud\Sms\V20210111\Models\SendSmsRequest();
            /* 填充请求参数,这里request对象的成员变量即对应接口的入参
             * 您可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
             * 基本类型的设置:
             * 帮助链接:
             * 短信控制台: https://console.cloud.tencent.com/smsv2
             * 腾讯云短信小助手: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */
            /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
            // 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
            $req->SmsSdkAppId = Config::get('qcloud.Qcloud.SmsSdkAppId');
            /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
            // 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
            $req->SignName = Config::get('qcloud.Qcloud.SignName');
            /* 模板 ID: 必须填写已审核通过的模板 ID */
            // 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
            $req->TemplateId = Config::get('qcloud.Qcloud.TemplateId');
            /* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空*/
            $req->TemplateParamSet = array($phoneCode, '2');
            /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
             * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
            $req->PhoneNumberSet = array("+86" . $phone);
            /* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
            $req->SessionContext = "";
            /* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
            $req->ExtendCode = "";
            /* 国内短信无需填写该项;国际/港澳台短信已申请独立 SenderId 需要填写该字段,默认使用公共 SenderId,无需填写该字段。注:月度使用量达到指定量级可申请独立 SenderId 使用,详情请联系 [腾讯云短信小助手](https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81)。*/
            $req->SenderId = "";
            // 通过client对象调用SendSms方法发起请求。注意请求方法名与请求对象是对应的
            // 返回的resp是一个SendSmsResponse类的实例,与请求对象对应
            $resp = $client->SendSms($req);
            // 输出json格式的字符串回包
            //            print_r($resp->TotalCount);
            //            print_r($resp->toJsonString());
            //            exit();
            $newdata = [
                'phone' => $phone,
                'code' => $phoneCode,
                'type' => 1,
                'is_use' => 0,
                'add_time' => $localTime,
            ];
            $id = Db::name('phone_msg')->insertGetId($newdata);
            $result = [
                'id' => $id,
                //                'phonecode' => $phoneCode,
                'msg' => 'ok',
            ];
            return $this->successResponse($result);
        } catch (\Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    public function getLanguageList()
    {
        ////////
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $condition['is_show'] = 1;
            $order = 'order_id asc,id asc';
            $list = Db::name('language')->field("*")->where($condition)->order($order)->select()->toArray();
            if (!$list) {
                $list = [];
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/LogisticsVas.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\LogisticsVas as LogisticsVasValidate;
class LogisticsVas extends Common {
    /**
     * 增值服务列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('vas_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('logistics_vas')->where($condition)->count();
                $list = Db::name('logistics_vas')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存增值服务
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new LogisticsVasValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('logistics_vas')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('logistics_vas')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('logistics_vas')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除增值服务
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('logistics_vas')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('logistics_vas')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/Menu.php
New file
@@ -0,0 +1,125 @@
<?php
namespace app\admin\controller;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use think\Exception;
use app\admin\util\MenuService;
class Menu extends Common {
    private $menuService;
    private $tableName = 'supplier_menu';
    private $viewPath = 'menu';
    public function __construct() {
        parent::__construct();
        $this->menuService = new MenuService();
    }
    /**
     * 菜单列表
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '供应商菜单';
            $guide['one']['text'] = '供应商管理';
            $guide['two']['text'] = '供应商列表';
            View::assign('guide', $guide);
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch('index');
        } else {
            $order = 'order_id asc,id asc';
            $list = $this->menuService->getMenuList($this->tableName, $order);
            $result['list'] = $list;
            return $this->successResponse($result);
        }
    }
    /**
     * 更新菜单显示状态
     */
    public function updateShowMenu() {
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception('参数错误!', 400);
            }
            $showMenu = input('show_menu');
            $isUpdate = $this->menuService->upShowMenu($this->tableName, (int)$id, $showMenu);
            if (!$isUpdate) {
                throw new Exception('更新失败!', 400);
            }
            return $this->successResponse('更新成功');
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /*
     * 获取菜单详情
     */
    public function getMenuDetail() {
        try {
            if (!Request::isPost()){
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception('参数错误!', 400);
            }
            $menuDetail = $this->menuService->getMenuDetail($this->tableName, (int)$id);
            if(!$menuDetail){
                throw new Exception('菜单不存在!', 400);
            }
            $result['info']=$menuDetail;
            return $this->successResponse($result);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 保存菜单
     * @return array|int[]
     */
    public function saveMenu() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //启动事务
        Db::startTrans();
        try {
            $data = Request::post();
            $id = $data['id'];
            if (isset($data['langs']) && $data['langs']) {
                $data['langs'] = json_encode($data['langs'], JSON_UNESCAPED_UNICODE);
            }
            if (is_numeric($id)) {
                //更新数据
                $this->menuService->upMenu($this->tableName, (int)$id, $data);
                $res['message'] = '菜单编辑成功';
            } else {
                unset($data['id']);
                $this->menuService->addMenu($this->tableName, (int)$id, $data);
                $res['message'] = '菜单添加成功';
            }
            ///////执行成功,提交事务///////
            Db::commit();
            return $this->successResponse($res);
        } catch (Exception $e) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($e->getMessage());
        }
    }
}
app/admin/controller/Message.php
New file
@@ -0,0 +1,325 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
//商品零售价限制
class Message extends Common {
    private $viewPath = 'Message';
    /**
     * 公告管理
     * @return string
     */
    public function index() {
        View::assign('viewPath', $this->viewPath);
        return View::fetch();
    }
    /*
     * 获取消息列表
     */
    public function getMessageList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $condition = [];
            $kw = input('kw');
            if ($kw) {
                $condition[] = ['title', 'like', '%' . $kw . '%'];
            }
            $p = input('p', 1);
            $other['page_size'] = input('page_size', 20);
            $order = 'M.id asc';
            $count = Db::name('message')
                ->alias('M')
                ->join('msg_category MC','M.msg_category_id=MC.id','left')
                ->where($condition)->count();
            $list = Db::name('message')
                ->alias('M')
                ->join('msg_category MC','M.msg_category_id=MC.id','left')
                ->field("M.*,MC.title as catetitle")->where($condition)->order($order)->withAttr('publish_time', function ($value) {
                    return date('Y-m-d H:i:s', $value);
                })->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if ($list) {
                $result['list'] = $list;
                $result['other'] = $other;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 创建消息
     */
    public function create() {
        ////////
        View::assign('menuitem', 'message-index');
        $id = input('id');
        $other['id'] = $id;
        View::assign('other', $other);
        View::assign('viewPath', $this->viewPath);
        return View::fetch();
    }
    public function getMessageDetail() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('message_id');
            if (!$id) {
                throw new Exception(lang('param_error'));
            }
            $info = \app\admin\model\Message::field("*")->where('id', $id)->withAttr('publish_time', function ($value) {return date('Y-m-d H:i:s', $value);})->find();
            if ($info) {
                $result['info']=$info;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 更新消息状态
 */
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,status';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name('message')->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        }
        catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 保存消息信息
     */
    public function saveMessage() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $validate = new \app\admin\validate\Message();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                $data['publish_time'] = strtotime($data['publish_time']);
                $data['update_time'] = time();
                Db::name('message')->where('id', $id)->update($data);//更新数据
                // 提交事务
                Db::commit();
                $result['id'] = $id;
                $result['message'] = lang('successfully_saved');
                return $this->successResponse($result);
            } else {
                unset($data['id']);
                $data['publish_time'] = strtotime($data['publish_time']);
                $data['add_time'] = time();
                $data['update_time'] = time();
                $newid = Db::name('message')->insertGetId($data);
                Db::commit();
                $result['id'] = $newid;
                $result['message'] = lang('successfully_saved');
                return $this->successResponse($result);
            }
        } catch (\Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 上传附件
     */
    public function uploadAttachment() {
        $message_id = input('message_id');
        $ext_arr = array(
            'image' => array('gif', 'jpg', 'jpeg', 'bmp', 'png'),
            'files' => array('doc', 'docx', 'xls', 'xlsx', 'pptx', 'ppt', 'pdf'),
        );
        $maxSizeArr = array(
            'image' => 1024 * 1024 * 10,
            'files' => 1024 * 1024 * 250,
        );
        $upload = new \common\UploadFile(); // 实例化上传类
        $upload->uploadReplace = TRUE; //同名文件自动覆盖
        $upload->autoSub = TRUE; // 启用子目录保存文件
        $upload->subType = 'date';  // 子目录创建方式 可以使用hash date custom
        $upload->dateFormat = 'Y/m/d'; //定义 subType=date 后,才需要定义dateFormat
        $upload->maxSize = 1024 * 1024 * 0; // 设置附件上传大小 10M
        $upload->maxSizeArr = $maxSizeArr; // 设置附件上传大小 10M
        $upload->allowExts = $ext_arr; // 设置附件上传类型
        $upload->savePath = './static/upload/'; // 设置附件上传目录
        $backinfo = $upload->uploadmore();
        if (!$backinfo) {// 上传错误提示错误信息
            return array('code' => 0, 'message' => $upload->getErrorMsg());
        } else {
            // 上传成功 获取上传文件信息
            foreach ($backinfo as $info) {
                $photo = $info['savename'];
                if (!empty($photo)) {
                    $filed['message_id'] = $message_id;
                    $filed['title'] = $info['name'];
                    $filed['filename'] = $photo;
                    $filed['filesize'] = getfileSize('.' . $photo);
                    $filed['ext'] = strtoupper(getext($photo));
                    $filed['add_time'] = time();
                    Db::name('message_attachment')->insertGetId($filed);
                }
            }
            return $this->successResponse(lang('successfully_uploaded'));
            ///////////////
        }
    }
    /*
     * 获取附件列表
     */
    public function getAttachmentList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $message_id = input('message_id');
            $where['message_id'] = $message_id;
            $list = Db::name('message_attachment')->field('id,title,filename,filesize,ext')->where($where)->withAttr('filesize', function ($value) {
                return getsizebytype($value);
            })->order('id asc')->select()->toArray();///
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 删除消息
     */
    public function deleteMessage() {
        // 启动事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!$id || !is_numeric($id)) {
                throw new Exception(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('message')->field('id')->where($condition)->find();
            if (!$info) {
                throw new Exception(lang('delete_failed'));
            }
            $where['message_id'] = $id;
            $attachmentList = Db::name('message_attachment')->field('id,filename')->where($where)->select()->toArray();
            if ($attachmentList) {
                foreach ($attachmentList as $k => $v) {
                    delpic($v['filename']);
                }
                Db::name('message_attachment')->where($where)->delete();//删除消息附件
            }
            Db::name('message')->where('id', $id)->delete();//删除消息
            ////执行成功,提交事务
            Db::commit();
            return $this->successResponse(lang('delete_successful'));
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 删除消息附件
     */
    public function deleteAttachment() {
        // 启动事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!$id || !is_numeric($id)) {
                throw new Exception(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('message_attachment')->field('id,filename')->where($condition)->find();
            if (!$info) {
                throw new Exception(lang('delete_failed'));
            }
            Db::name('message_attachment')->where('id', $id)->delete();//删除消息附件
            delpic($info['filename']);
            ////执行成功,提交事务
            Db::commit();
            return $this->successResponse(lang('delete_successful'));
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 获取消息类别列表
     */
    public function getMsgCategoryList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $message_id = input('message_id');
            $where['ifshow'] = 1;
            $list = Db::name('msg_category')->field('id,title,father_id')->where($where)->order('order_id asc,id asc')->select()->toArray();///
            if ($list) {
                $result['list'] = datalist($list, 'father_id','',true);
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/MsgCategory.php
New file
@@ -0,0 +1,131 @@
<?php
namespace app\admin\controller;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class MsgCategory extends Common {
    private $viewPath = 'msgCategory';
    /**
     * 消息分类列表
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '消息类别';
            $guide['one']['text'] = '消息中心';
            $guide['two']['text'] = '消息类别';
            View::assign('guide', $guide);
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch('index');
        } else {
            $order = 'order_id asc,id asc';
            $list = Db::name('msg_category')->field("id,title,ifshow,father_id,order_id")->order($order)->select()->toArray();
            $list = _generateListTree($list, 0, ['id', 'father_id']);;
            $result['list'] = $list;
            return $this->successResponse($result);
        }
    }
    /**
     * 更新消息分类显示状态
     */
    public function updateShowCate() {
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        if (!is_numeric($id)) {
            return $this->errorResponse('参数错误');
        }
        $ifshow = input('ifshow');
        $info = Db::name('msg_category')->field('id')->where('id', $id)->find();
        if (empty($info)) {
            return $this->errorResponse('信息不存在');
        }
        if ($ifshow == '1') {
            $data['ifshow'] = 1;
        } else {
            $data['ifshow'] = 0;
        }
        $backval = Db::name('msg_category')->where('id', $id)->save($data);
        if ($backval === FALSE) {
            return $this->errorResponse('更新失败');
        } else {
            $this->delCache();
            return $this->successResponse('更新成功');
        }
    }
    /**
     * 保存消息分类
     * @return array|int[]
     */
    public function saveCate() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        $id = input('id');
        $data = Request::post();
        $id = $data['id'];
        if (is_numeric($id)) {
            //更新数据
            $validate = new \app\admin\validate\MsgCategory();
            $result = $validate->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////保存////////////
            Db::name('msg_category')->where('id', $id)->withoutField('id')->save($data);
            ////////////////////////
            $this->delCache();
            $res['message'] = '消息分类编辑成功';
            return $this->successResponse($res);
        } else {
            unset($data['id']);
            $validate = new \app\admin\validate\MsgCategory();
            $result = $validate->check($data);
            if (!$result) {
                return $this->errorResponse($validate->getError());
            }
            //////////////////////
            Db::startTrans();
            try {
                $data['add_time'] = time();
                $data['ifshow'] = 1;//默认显示
                $new_id = Db::name('msg_category')->insertGetId($data);
                if ($new_id) {
                    Db::name('msg_category')->where('id', $new_id)->save(['order_id' => $new_id]);
                    ///////执行成功,提交事务///////
                    Db::commit();
                    $this->delCache();
                    $res['message'] = '消息分类添加成功';
                    return $this->successResponse($res);
                } else {
                    //任一执行失败,执行回滚操作
                    Db::rollback();
                    return $this->errorResponse('消息分类添加失败');
                }
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                return $this->errorResponse('消息分类添加失败');
            }
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('msg_category')->clear();
    }
}
app/admin/controller/Notice.php
New file
@@ -0,0 +1,297 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
//商品零售价限制
class Notice extends Common {
    /**
     * 公告管理
     * @return string
     */
    public function index() {
        ////////
        return View::fetch();
    }
    /*
     * 获取公告列表
     */
    public function getNoticeList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $condition = [];
            $kw = input('kw');
            if ($kw) {
                $condition[] = ['title', 'like', '%' . $kw . '%'];
            }
            $p = input('p', 1);
            $other['page_size'] = input('page_size', 20);
            $order = 'id asc';
            $count = Db::name('notice')->where($condition)->count();
            $list = Db::name('notice')
                ->field("*")->where($condition)->order($order)->withAttr('publish_time', function ($value) {
                    return date('Y-m-d H:i:s', $value);
                })->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if ($list) {
                $result['list'] = $list;
                $result['other'] = $other;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 创建公告
     */
    public function create() {
        ////////
        View::assign('menuitem', 'notice-index');
        $id = input('id');
        $other['id'] = $id;
        View::assign('other', $other);
        return View::fetch();
    }
    public function getNoticeDetail() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('notice_id');
            if (!$id) {
                throw new Exception(lang('param_error'));
            }
            $info = \app\seller\model\Notice::field("*")->where('id', $id)->withAttr('publish_time', function ($value) {return date('Y-m-d H:i:s', $value);})->find();
            if ($info) {
                $result['info']=$info;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 更新公告状态
 */
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,status';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name('notice')->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        }
        catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 保存公告信息
     */
    public function saveNotice() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $validate = new \app\admin\validate\Notice();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                $data['publish_time'] = strtotime($data['publish_time']);
                $data['update_time'] = time();
                Db::name('notice')->where('id', $id)->update($data);//更新数据
                // 提交事务
                Db::commit();
                $result['id'] = $id;
                $result['message'] = lang('successfully_saved');
                return $this->successResponse($result);
            } else {
                unset($data['id']);
                $data['publish_time'] = strtotime($data['publish_time']);
                $data['add_time'] = time();
                $data['update_time'] = time();
                $newid = Db::name('notice')->insertGetId($data);
                Db::commit();
                $result['id'] = $newid;
                $result['message'] = lang('successfully_saved');
                return $this->successResponse($result);
            }
        } catch (\Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 上传附件
     */
    public function uploadAttachment() {
        $notice_id = input('notice_id');
        $ext_arr = array(
            'image' => array('gif', 'jpg', 'jpeg', 'bmp', 'png'),
            'files' => array('doc', 'docx', 'xls', 'xlsx', 'pptx', 'ppt', 'pdf'),
        );
        $maxSizeArr = array(
            'image' => 1024 * 1024 * 10,
            'files' => 1024 * 1024 * 250,
        );
        $upload = new \common\UploadFile(); // 实例化上传类
        $upload->uploadReplace = TRUE; //同名文件自动覆盖
        $upload->autoSub = TRUE; // 启用子目录保存文件
        $upload->subType = 'date';  // 子目录创建方式 可以使用hash date custom
        $upload->dateFormat = 'Y/m/d'; //定义 subType=date 后,才需要定义dateFormat
        $upload->maxSize = 1024 * 1024 * 0; // 设置附件上传大小 10M
        $upload->maxSizeArr = $maxSizeArr; // 设置附件上传大小 10M
        $upload->allowExts = $ext_arr; // 设置附件上传类型
        $upload->savePath = './static/upload/'; // 设置附件上传目录
        $backinfo = $upload->uploadmore();
        if (!$backinfo) {// 上传错误提示错误信息
            return array('code' => 0, 'message' => $upload->getErrorMsg());
        } else {
            // 上传成功 获取上传文件信息
            foreach ($backinfo as $info) {
                $photo = $info['savename'];
                if (!empty($photo)) {
                    $filed['notice_id'] = $notice_id;
                    $filed['title'] = $info['name'];
                    $filed['filename'] = $photo;
                    $filed['filesize'] = getfileSize('.' . $photo);
                    $filed['ext'] = strtoupper(getext($photo));
                    $filed['add_time'] = time();
                    Db::name('notice_attachment')->insertGetId($filed);
                }
            }
            return $this->successResponse(lang('successfully_uploaded'));
            ///////////////
        }
    }
    /*
     * 获取附件列表
     */
    public function getAttachmentList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $notice_id = input('notice_id');
            $where['notice_id'] = $notice_id;
            $list = Db::name('notice_attachment')->field('id,title,filename,filesize,ext')->where($where)->withAttr('filesize', function ($value) {
                return getsizebytype($value);
            })->order('id asc')->select()->toArray();///
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 删除公告
     */
    public function deleteNotice() {
        // 启动事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!$id || !is_numeric($id)) {
                throw new Exception(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('notice')->field('id')->where($condition)->find();
            if (!$info) {
                throw new Exception(lang('delete_failed'));
            }
            $where['notice_id'] = $id;
            $attachmentList = Db::name('notice_attachment')->field('id,filename')->where($where)->select()->toArray();
            if ($attachmentList) {
                foreach ($attachmentList as $k => $v) {
                    delpic($v['filename']);
                }
                Db::name('notice_attachment')->where($where)->delete();//删除公告附件
            }
            Db::name('notice')->where('id', $id)->delete();//删除公告
            ////执行成功,提交事务
            Db::commit();
            return $this->successResponse(lang('delete_successful'));
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 删除公告附件
     */
    public function deleteAttachment() {
        // 启动事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!$id || !is_numeric($id)) {
                throw new Exception(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('notice_attachment')->field('id,filename')->where($condition)->find();
            if (!$info) {
                throw new Exception(lang('delete_failed'));
            }
            Db::name('notice_attachment')->where('id', $id)->delete();//删除公告附件
            delpic($info['filename']);
            ////执行成功,提交事务
            Db::commit();
            return $this->successResponse(lang('delete_successful'));
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/PartnerSchool.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\PartnerSchool as PartnerSchoolValidate;
class PartnerSchool extends Common {
    /**
     * 分销平台列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('school_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('partner_school')->where($condition)->count();
                $list = Db::name('partner_school')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存分销平台
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new PartnerSchoolValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('partner_school')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    throw new Exception(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('partner_school')->insertGetId($data);
                if (!$add_result) {
                    throw new Exception(lang('adding_failed'));
                }
                Db::name('partner_school')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除分销平台
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('partner_school')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('partner_school')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/PayBank.php
New file
@@ -0,0 +1,213 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class PayBank extends Common {
    private $tableName = 'pay_bank';
    private $viewPath = 'payBank';
    /**
     * 货运属性列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '收款账户管理';
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('payee_name|account_name|account', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name($this->tableName)->where($condition)->count();
                $list = Db::name($this->tableName)->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,isoffline,isonline';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name($this->tableName)->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    public function uploadLogo() {
        $img_url = input('img_url');
        $id = input('id');
        $ext_arr = array(
            'image' => array('jpg', 'jpeg', 'png'),
        );
        $maxSizeArr = array(
            'image' => 1024 * 1024 * 10,
        );
        $bannersize = Config::get('app.BANNER_SIZE');
        $width = $bannersize['suolue']['w'];
        $height = $bannersize['suolue']['h'];
        $ratio = $bannersize['suolue']['r'];
        $upload = new \common\UploadFile(); // 实例化上传类
        $upload->uploadReplace = TRUE; //同名文件自动覆盖
        $upload->autoSub = TRUE; // 启用子目录保存文件
        $upload->subType = 'date';  // 子目录创建方式 可以使用hash date custom
        $upload->dateFormat = 'Y/m/d'; //定义 subType=date 后,才需要定义dateFormat
        $upload->maxSize = 1024 * 1024 * 0; // 设置附件上传大小 10M
        $upload->maxSizeArr = $maxSizeArr; // 设置附件上传大小 10M
        $upload->allowExts = $ext_arr; // 设置附件上传类型
        $upload->savePath = './static/upload/'; // 设置附件上传目录
        $upload->ratio = $ratio; //1:按比例缩放,2:裁切固定值大小
        $upload->thumb = FALSE;   // 使用对上传图片进行缩略图处理
        //$upload->imageClassPath='LIB.Util.Image';    // 图库类包路径 用于生成缩略图
        $upload->thumbMaxWidth = $width; // 缩略图最大宽度
        $upload->thumbMaxHeight = $height; // 缩略图最大高度
        $upload->thumbRemoveOrigin = FALSE; // 是否移除原图  移除原图时,必须给 thumbPrefix指定一个前缀,否则会将原图误删除
        $backinfo = $upload->uploadmore();
        if (!$backinfo) {// 上传错误提示错误信息
            return $this->errorResponse($upload->getErrorMsg());
        } else {
            $update_info = $upload->getUploadFileInfo();
            $photo = $update_info['savename'];
            if (is_numeric($id) && $id > 0) {
                $info = Db::name($this->tableName)->field('img_url')->where('id', $id)->find();
                if($info){
                    if($info['img_url']){
                        delpic($info['img_url']);
                    }
                    $update_data['img_url'] = $photo;
                    Db::name($this->tableName)->where('id', $id)->update($update_data);//更新数据
                }
                else{
                    //数据不存在视为新增数据,删除旧图片
                    if ($img_url) {
                        delpic($img_url);
                    }
                }
            } else {
                //新增数据,删除旧图片
                if ($img_url) {
                    delpic($img_url);
                }
            }
            // 上传成功 获取上传文件信息
            //上传可同时上传多个,上传方式为一次上传多个
            $result['img_url'] = $photo;
            $result['message'] = lang('successfully_uploaded');
            return $this->successResponse($result);
        }
    }
    /**
     *保存货运属性
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate=new \app\admin\validate\PayBank();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name($this->tableName)->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name($this->tableName)->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name($this->tableName)->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除货运属性
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name($this->tableName)->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/PaymentTool.php
New file
@@ -0,0 +1,155 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class PaymentTool extends Common {
    private $tableName = 'payment_tool';
    private $viewPath = 'payment_tool';
    /**
     * 分销区域列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '收款工具管理';
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('payment_tool_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,payment_tool_id asc';
                $count = Db::name($this->tableName)->where($condition)->count();
                $list = Db::name($this->tableName)->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存分销区域
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new \app\admin\validate\paymentTool();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $payment_tool_id = input('post.payment_tool_id');
            if (is_numeric($payment_tool_id)) {
                //更新数据
                $update_result = Db::name($this->tableName)->where('payment_tool_id', $payment_tool_id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                $this->delCache();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['payment_tool_id']);
                $add_result = Db::name($this->tableName)->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name($this->tableName)->where('payment_tool_id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                $this->delCache();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'payment_tool_id,is_show';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['payment_tool_id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name($this->tableName)->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除分销区域
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $payment_tool_id = input('payment_tool_id');
            if (!is_numeric($payment_tool_id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['payment_tool_id'] = $payment_tool_id;
            $info = Db::name($this->tableName)->field('payment_tool_id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('payment_tool_id', $payment_tool_id)->delete();
            //提交事务
            Db::commit();
            $this->delCache();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache() {
        Cache::tag('payment_tool')->clear();
    }
}
app/admin/controller/PlatformLogisticsProduct.php
New file
@@ -0,0 +1,123 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\PlatformLogisticsProduct as PlatformLogisticsProductValidate;
class PlatformLogisticsProduct extends Common {
    /**
     * 货运属性列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('attr_name|attr_code', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('platform_logistics_product')->where($condition)->count();
                $list = Db::name('platform_logistics_product')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存货运属性
     */
    public function save() {
        //开始事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $validate = new PlatformLogisticsProductValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('platform_logistics_product')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    throw new Exception(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('platform_logistics_product')->insertGetId($data);
                if (!$add_result) {
                    throw new Exception(lang('add_failed'));
                }
                Db::name('platform_logistics_product')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除货运属性
     * @return array|int[]
     */
    public function delete() {
        //开始事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('platform_logistics_product')->field('id')->where($condition)->find();
            if (!$info) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name('platform_logistics_product')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/PlatformRegion.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\PlatformRegion as PlatformRegionValidate;
class PlatformRegion extends Common {
    /**
     * 销售平台列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('region_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('platform_region')->where($condition)->count();
                $list = Db::name('platform_region')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存销售平台
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new PlatformRegionValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('platform_region')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('platform_region')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('platform_region')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除销售平台
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('platform_region')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('platform_region')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/PublicApi.php
New file
@@ -0,0 +1,99 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\View;
use think\facade\Request;
use think\facade\Config;
use think\facade\Db;
class PublicApi extends Common {
    private $categoryService;
    private $deliverRegionService;
    private $logisticsProductService;
    private $platformLogisticsProductService;
    public function __construct() {
//        parent::__construct();
        $this->categoryService = new \services\CategoryService();
        $this->deliverRegionService = new \services\DeliverRegionService();
        $this->logisticsProductService = new \services\LogisticsProductService();
        $this->platformLogisticsProductService = new \services\PlatformLogisticsProductService();
    }
    public function categoryList(){
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $where = [];
            if (Request::has('pid','post')) {
                $pid = trim(input('pid'));
//                if (!is_numeric($pid)) {
//                    throw new Exception('参数错误!', 400);
//                }
                $where[] = ['father_code', '=', $pid];
            }
            if (Request::has('keyWord','post')) {
                $where[] = ['cate_name', 'like', '%'.trim(input('keyWord')).'%'];
            }
            $categorys = [];
            $categorys['list'] = $this->categoryService->getList($where);
            return $this->successResponse($categorys);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    public function deliverRegionList(){
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $where = [];
            $data = [];
            $data['list'] = $this->deliverRegionService->getList($where);
            $data['list'] = datalist($data['list'], 'deliver_region_id', '', FALSE);
            return $this->successResponse($data);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    public function logisticsProductList(){
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $where = [];
            $data = [];
            $data['list'] = $this->logisticsProductService->getList($where);
            $data['list'] = datalist($data['list'], 'id', '', FALSE);
            return $this->successResponse($data);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    public function platformLogisticsProductList(){
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $where = [];
            $data = [];
            $data['list'] = $this->platformLogisticsProductService->getList($where);
            $data['list'] = datalist($data['list'], 'id', '', FALSE);
            return $this->successResponse($data);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
}
app/admin/controller/PublishOrder.php
New file
@@ -0,0 +1,626 @@
<?php
namespace app\admin\controller;
use app\supplier\model\DistributionArea as DistributionAreaModel;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\supplier\model\GoodsAnnex;
use app\supplier\model\GoodsSpec;
use app\supplier\model\GoodsAttribute;
use app\supplier\model\GoodsLabel;
use app\supplier\model\GoodsRetailPriceLimit;
//use app\supplier\model\Goods;
//商品零售价限制
class publishOrder extends Common {
    /**
     * 商品管理
     * @return string
     */
    public function index() {
        return View::fetch();
    }
    /**
     * 获取刊登列表
     * @return mixed
     */
    public function getPublishOrder() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $platform_goods_code = input('platform_goods_code');
            $supplier_goods_code = input('supplier_goods_code');
            $condition['istemp'] = 1;//编辑过的商品
            $condition['audit_status'] = 2;
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'id asc';
            $count = \app\supplier\model\PublishOrder::where($condition)->count();
            $list = \app\supplier\model\PublishOrder::field("id,supplier_goods_code,publish_order_code,first_cate_code,second_cate_code,three_cate_code,public_type,brand_code,add_time,audit_status,publish_status,update_time,goods_title_cn,review_comments,(select url from web_publish_order_picture where publish_order_id=web_publish_order.id order by id asc limit 1) as picture")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                throw new \Exception(lang('no_data_found'));
            }
            $categorylist = get_category();
            $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
            foreach ($list as &$item) {
                $item['first_cate_name'] = $categorylist[$item['first_cate_code']]['cate_name'];
                $item['second_cate_name'] = $categorylist[$item['second_cate_code']]['cate_name'];
                $item['three_cate_name'] = $categorylist[$item['three_cate_code']]['cate_name'];
                $item['add_time'] = date('Y-m-d H:i:s', $item['add_time']);
            }
            $result['list'] = $list;
            $result['other'] = $other;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 审核商品刊登
     * @return array|int[]
     */
    public function reviewPublishOrder() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('post.id');
            if (!is_numeric($id)) {
                throw new \Exception(lang('invalid_id'));
            }
            $status = input('post.status');
            //更新数据
            $info = Db::name('publish_order')->field('id,publish_status,audit_status,supplier_goods_code')->where('id', $id)->find();
            if (!$info) {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
            if ($status == 1) {
                Db::name('publish_order')->where('id', $id)->update(['publish_status' => 1, 'audit_status' => 1, 'review_comments' => '']);
                Db::name('goods')->where('supplier_goods_code', $info['supplier_goods_code'])->update(['kd_publish_status' => 1]);//设置为已刊登
                $message = '操作成功,审核通过';
            } else {
                $review_comments = trim(input('review_comments'));
                if (!$review_comments) {
                    throw new \Exception('请填写审核不通过原因');
                }
                Db::name('publish_order')->where('id', $id)->update(['publish_status' => 0, 'audit_status' => 3, 'review_comments' => $review_comments]);
                $message = '操作成功,审核不通过';
            }
            // 提交事务
            Db::commit();
            return $this->successResponse($message);
        } catch (\Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 创建商品
     * @return string
     */
    public function create() {
        ////////
        $id = input('id');
        if (!is_numeric($id)) {
            $this->redirect(url('/supplier/publishOrder/index')->build());
        }
        $other['id'] = $id;
        View::assign('other', $other);
        return View::fetch();
    }
    public function getGoodsInfo() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $supplier_goods_code = input('supplier_goods_code');
            $where = [
                'supplier_goods_code' => $supplier_goods_code,
            ];
            $info = Db::name('goods')->field('id,first_cate_code,second_cate_code,three_cate_code,brand_code')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            $info['goods_purpose'] = json_decode($info['goods_purpose'], TRUE);
            //////获取描述标题数据/////////
            $where_other = [
                'goods_id' => $info['id'],
            ];
            $goods_desc = Db::name('goods_desc')->field('goods_title_en,goods_title_cn')->where($where_other)->find();
            //获取描述内容数据
            $goods_desc_content = Db::name('goods_desc_content')->field('goods_desc_en,goods_desc_cn')->where($where_other)->find();
            ////////////////
            $result['info'] = $info;
            $result['goods_desc'] = $goods_desc;
            $result['goods_desc_content'] = $goods_desc_content;
            return $this->successResponse($result);
        } catch (\Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 获取商品分销信息
     * @return array|int[]
     */
    public function getGoodsDisInfo() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $supplier_goods_code = input('supplier_goods_code');
            $condition['g.istemp'] = 1;//编辑过的商品
            if ($supplier_goods_code) {
                $condition['g.supplier_goods_code'] = $supplier_goods_code;
            }
            $info = \app\supplier\model\Goods::alias('g')
                ->join('goods_desc gd', 'g.id=gd.goods_id')
                ->join('goods_desc_content gdc', 'g.id=gdc.goods_id')
                ->field("g.id,g.warehouse_mode,g.sales_form,g.supplier_goods_code,g.platform_goods_code,g.goods_purpose,g.add_time,g.status,g.publish_status,g.whether_dis,g.is_limit_dis_platform,gd.goods_title_cn,gd.goods_title_en,gd.goods_keyword_en,gd.goods_keyword_cn,g.first_cate_code,g.second_cate_code,g.three_cate_code,g.docking_way,g.price_method,g.freight_attr_code,g.is_tort,g.is_stop_buy,g.recommend_man,gdc.goods_desc_en,gdc.goods_desc_cn")->where($condition)->find();
            if ($info) {
                $categorylist = get_category();
                $categorylist = datalist($categorylist, 'cate_code', '', FALSE);
                $info['first_cate_name'] = $categorylist[$info['first_cate_code']]['cate_name'];
                $info['second_cate_name'] = $categorylist[$info['second_cate_code']]['cate_name'];
                $info['three_cate_name'] = $categorylist[$info['three_cate_code']]['cate_name'];
                $info['attr_name'] = Db::name('goods_freight_attr')->where('attr_code', $info['freight_attr_code'])->value('attr_name');
                $info['goods_keyword_en'] = $info['goods_keyword_en'] ? json_decode($info['goods_keyword_en'], TRUE) : [];
                $info['goods_keyword_cn'] = $info['goods_keyword_cn'] ? json_decode($info['goods_keyword_cn'], TRUE) : [];
                $info['goodsSpecInfo'] = Db::name('goods_spec')->field('*')->where('goods_id', $info['id'])->find();
                $goods_attribute_info = Db::name('goods_attribute')->field('*')
                    ->withAttr('material_main', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_one', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_two', function ($value, $data) {
                        return Db::name('goods_material')->where('id', $value)->value('material_name');
                    })
                    ->withAttr('material_three', function ($value, $data) {
                        if ($value) {
                            $value = json_decode($value, TRUE);
                            return Db::name('goods_material')->whereIn('id', $value)->column('material_name');
                        } else {
                            return [];
                        }
                    })
                    ->where('goods_id', $info['id'])->find();
                $info['goodsAttributeInfo'] = $goods_attribute_info;
                $info['goodsAttributExtendList'] = Db::name('goods_attribute_extend')->field('*')->where('goods_id', $info['id'])->select()->toArray();
                $info['goodsRetailPriceLimitList'] = GoodsRetailPriceLimit::field('*')->where('goods_id', $info['id'])
                    ->withAttr('sale_country_code', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value("CONCAT(country_code,' ',country)");
                    })
                    ->withAttr('sales_platform', function ($value, $data) {
                        return Db::name('sales_platform')->where('id', $value)->value("platform_name");
                    })
                    ->order('id asc')->select()->toArray();///
                $info['goodsLabelList'] = GoodsLabel::field('label_type,goods_label')->where('goods_id', $info['id'])->order('id asc')->select()->toArray();///
                if ($info['is_limit_dis_platform'] == 1) {
                    $info['goodsLimitDisPlatformList'] = Db::name('goods_limit_dis_platform')
                        ->alias('a')
                        ->join('dis_platform b', 'a.dis_platform = b.id')
                        ->field('b.platform_name')->where('goods_id', $info['id'])->order('a.id asc')->select()->toArray();///
                } else {
                    $info['goodsLimitDisPlatformList'] = [];
                }
                $result['info'] = $info;
                ///分销区域//
                $disAreaList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('distribution_area da', 'da.id=gda.distribution_area_id')
                    ->field("gda.one_shipment,gda.distribution_area_id")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)->withAttr('one_shipment', function ($value, $data) {
                        return $value == 1 ? '一件代发' : '';
                    })->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disAreaList'] = $disAreaList;
                //分销库存
                $disStockList = Db::name('goods_distribution_area_stock')
                    ->alias('gdas')
                    ->join('third_party_stock tps', 'tps.id=gdas.third_party_stock_id')
                    ->field("gdas.distribution_area_id,gdas.supplier_stock_amount,gdas.platform_stock_amount,gdas.goods_distribution_area_id,tps.third_party_stock_name,tps.docking_code,tps.stock_type")->where('gdas.goods_id', $info['id'])->where('gdas.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })->select()->toArray();
                $result['disStockList'] = $disStockList;
                //分销价格///
                $disPriceList = Db::name('goods_distribution_area_price')
                    ->alias('gdap')
                    ->join('goods_distribution_area gda', 'gda.id=gdap.goods_distribution_area_id')
                    ->join('logistics_product lp', 'lp.id=gdap.logistics_product_id')
                    ->field("gdap.distribution_area_id,gdap.goods_distribution_area_id,lp.product_name_cn,gdap.supply_price,gdap.dis_price,gdap.package_goods_amount,gda.take_effect_time")->where('gdap.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('take_effect_time', function ($value, $data) {
                        return date('Y-m-d H:i:s', $value);
                    })->select()->toArray();
                $result['disPriceList'] = $disPriceList;
                //退货地址列表//
                $disReturnGoodsList = Db::name('goods_distribution_area')
                    ->alias('gda')
                    ->join('third_party_stock tps', 'tps.id=gda.third_party_stock_id')
                    ->join('third_party_stock_address tpsa', 'tpsa.id=gda.third_party_stock_address_id')
                    ->field("gda.distribution_area_id,tps.third_party_stock_name,tpsa.stock_address,tpsa.stock_city,tpsa.stock_province,tpsa.stock_post_code,tpsa.stock_country_id,tpsa.receive_man,tpsa.tel")->where('gda.goods_id', $info['id'])->where('gda.whether_dis', 1)
                    ->withAttr('distribution_area_id', function ($value, $data) {
                        return $this->getDisArea($value);
                    })
                    ->withAttr('stock_country_id', function ($value, $data) {
                        return Db::name('stock_country')->where('id', $value)->value('country');
                    })
                    ->select()->toArray();
                $result['disReturnGoodsList'] = $disReturnGoodsList;
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getGoodsPictureList() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $goods_id = input('goods_id');
            $picture_type = input('picture_type');
            if (is_array($picture_type)) {
                $where[] = ['a.goods_id', '=', $goods_id];
                if (is_array($picture_type)) {
                    $where[] = ['b.type', 'in', $picture_type];
                }
                $list = Db::name('goods_picture')
                    ->alias('a')
                    ->join('goods_picture_type b', 'a.id=b.picture_id')
                    ->field('DISTINCT  a.id,a.url')->where($where)->order('id asc')->select()->toArray();
            } else {
                $where[] = ['goods_id', '=', $goods_id];
                $list = Db::name('goods_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            }
            if (!$list) {
                return $this->errorResponse(lang('no_data_found'));
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 根据类型获取商品图片数量
     * @return void
     */
    public function getGoodsPictureCount() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $goods_id = input('goods_id');
            $goodsPictureCount['type0'] = Db::name('goods_picture')->where(['goods_id' => $goods_id])->count();
            $goodsPictureCount['type1'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 1])->count();
            $goodsPictureCount['type2'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 2])->count();
            $goodsPictureCount['type3'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 3])->count();
            $goodsPictureCount['type4'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 4])->count();
            $goodsPictureCount['type5'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 5])->count();
            $goodsPictureCount['type6'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 6])->count();
            $goodsPictureCount['type7'] = Db::name('goods_picture_type')->where(['goods_id' => $goods_id, 'type' => 7])->count();
            $result['goodsPictureCount'] = $goodsPictureCount;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分销区域
     */
    private function getDisArea($id) {
        return Db::name('distribution_area')
            ->alias('da')
            ->join('deliver_region dr', 'dr.deliver_region_id=da.deliver_region_id')
            ->field("da.dis_currency,dr.region_name,da.dis_model")
            ->where('da.id', $id)->find();
    }
    /**
     * 获取刊登信息
     * @return array|int[]
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function getPublishOrderInfo() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new \Exception(lang('invalid_id'));
            }
            $where = [
                'id' => $id,
            ];
            $info = Db::name('publish_order')->field('*')->where($where)->find();
            if ($info['three_cate_code']) {
                $info['cate_code'] = [$info['first_cate_code'], $info['second_cate_code'], $info['three_cate_code']];
            }
            //////获取描述标题数据/////////
            $where_other = [
                'publish_order_id' => $id,
            ];
            ////////////////
            $result['info'] = $info;
            return $this->successResponse($result);
        } catch (\Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 保存刊登信息
     * @return array
     */
    public function savePublishOrder() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            $id = $data['id'];
            // 验证ID的合法性
            if (!is_numeric($id) || $id <= 0) {
                throw new \Exception(lang('invalid_id'));
            }
            // 数据验证
            $validate = new \app\supplier\validate\PublishOrder();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new \Exception($validate->getError());
            }
            /////////////////
            $img_count = Db::name('publish_order_picture')->where('publish_order_id', $id)->count();
            if ($img_count == 0) {
                throw new \Exception('请上传图片');
            }
            $data['update_time'] = time();
            $data['istemp'] = 1;
            $data['publish_status'] = 0;//未刊登
            $data['audit_status'] = 2;//提交待审核
            $where['id'] = $id;
            $update_result = Db::name('publish_order')->where($where)->withoutField('id,supplier_id,publish_order_code')->update($data);
            if ($update_result === FALSE) {
                throw new \Exception(lang('editing_failed'));
            }
            // 提交事务
            Db::commit();
            $result['url'] = url('/supplier/publishOrder/index')->build();
            $result['message'] = lang('successfully_saved');
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除刊登信息
     * @return array
     */
    public function deletePublishOrder() {
        // 启动事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!$id || !is_numeric($id)) {
                throw new \Exception(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('publish_order')->field('id,publish_status,audit_status')->where($condition)->find();
            if (!$info) {
                throw new \Exception(lang('delete_failed'));
            } else {
                if ($info['publish_status'] == 1) {
                    throw new \Exception('刊登单已发布,不能删除');
                }
            }
            $del_result = Db::name('publish_order')->where('id', $id)->delete();
            if ($del_result) {
                ////执行成功,提交事务
                Db::commit();
                return $this->successResponse(lang('delete_successful'));
            } else {
                throw new \Exception(lang('delete_failed'));
            }
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 上传商品图片
     * @return array|int[]
     */
    /**
     * 获取商品图片列表
     * @return array|int[]
     */
    public function getPublishOrderPictureList() {
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $publish_order_id = input('publish_order_id');
            $where[] = ['publish_order_id', '=', $publish_order_id];
            $list = Db::name('publish_order_picture')->field('id,url')->where($where)->order('id asc')->select()->toArray();
            if (!$list) {
                throw new \Exception(lang('no_data_found'));
            }
            $result['list'] = $list;
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除商品图片
     * @return array|int[]
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function deletePublishOrderPicture() {
        // 启动事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!$id || !is_numeric($id)) {
                throw new \Exception(lang('invalid_id'));
            }
            $condition['id'] = $id;
            $info = Db::name('publish_order_picture')->field('id,publish_order_id,url')->where($condition)->find();
            if (!$info) {
                throw new \Exception(lang('delete_failed'));
            }
            $del_result = Db::name('publish_order_picture')->where('id', $id)->delete();
            ////执行成功,提交事务
            Db::commit();
            delpic($info['url']);
            return $this->successResponse(lang('delete_successful'));
        } catch (\Exception $exc) {
            //// 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取分类列表
     * @return array
     */
    public function getCategoryList() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $result['list'] = $this->getchildrenids(0);
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 循环获取分类数据
     * @param $id
     * @return array|void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    protected function getchildrenids($id) {
        $where['father_code'] = $id;
        $result = Db::name('category')->field('id,cate_code as value,cate_name as label')->where($where)->cacheAlways(TRUE, 0, 'category')->order('id asc')->select()->toArray();
        if ($result) {
            foreach ($result as &$val) {
                $val['children'] = $this->getchildrenids($val['value']); ////
            }
            return $result;
        }
    }
    /**
     * 商品发布
     * @return array|int[]
     */
    public function goodsPublish() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new \Exception(lang('request_method_incorrect'));
            }
            $publish_order_id = input('publish_order_id');
            $goods_info = Db::name('goods')->field('id')->where('id', $publish_order_id)->find();
            if (!$goods_info) {
                throw new \Exception(lang('goods_not_exist'));
            }
            $update_data = [
                'publish_status' => 1,
                'update_time'    => time(),
            ];
            Db::name('goods')->where('id', $publish_order_id)->update($update_data);
            // 提交事务
            Db::commit();
            return $this->successResponse(lang('goods_publish_success'));
        } catch (\Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/RemitRecord.php
New file
@@ -0,0 +1,132 @@
<?php
namespace app\admin\controller;
use think\facade\Db;
use think\facade\Request;
use think\facade\View;
use think\Exception;
class RemitRecord extends Common {
    /*
     * 品牌管理
     */
    public function index(): string {
        View::assign('menuitem', strtolower('remitRecord-index'));
        $other['title'] = '汇款审核';
        $guide['one']['text'] = '数据审核';
        $guide['two']['text'] = '汇款审核';
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    /*
     */
    public function getRemitRecordList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $kw = input('kw');
//            $condition[] = ['SRR.status', '=', 0];
            $condition[]= ['SRR.remittor_name|SRR.remittor_account|SRR.remit_transaction_number', 'like', '%' . $kw . '%'];
            $p = input('p', 1);
            $other['page_size'] = input('page_size', 20);
            $order = 'SRR.id desc';
            $count = Db::name('seller_remit_record')
                ->alias('SRR')
                ->join('pay_bank PA', 'PA.id=SRR.pay_bank_id')
                ->where($condition)->count();
            $list = Db::name('seller_remit_record')
                ->alias('SRR')
                ->field("SRR.*,PA.payee_name")
                ->join('pay_bank PA', 'PA.id=SRR.pay_bank_id')
                ->where($condition)->order($order)->page($p, $other['page_size'])->withAttr('add_time', function ($value) {
                    return date('Y-m-d H:i', $value);
                })
                ->withAttr('remit_date_time', function ($value) {
                    return $value ? date('Y-m-d', $value) : '';
                })
                ->select()->toArray();
            $other['count'] = $count;
            $result['other'] = $other;
            if (!$list) {
                throw new Exception(lang('no_data_found'));
            } else {
                $result['list'] = $list;
                return $this->successResponse($result);
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 汇款审核
     */
    public function reviewRemitRecord() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $record_id = input('post.record_id');
            if (!is_numeric($record_id)) {
                throw new Exception(lang('parameter_error'));
            }
            $status = input('post.status');
            //更新数据
            $info = Db::name('seller_remit_record')->field('id,status,asset_id,remit_amount,seller_id')->where('id', $record_id)->find();
            if (!$info) {
                throw new Exception(lang('no_data_found'));
            }
            if ($info['status'] == 1) {
                throw new Exception('该申请已审核通过,不能重复审核');
            }
            if ($status == 1) {
                $service_charge = input('post.service_charge');
                $remit_amount = $info['remit_amount'];
                if (!$service_charge || !is_numeric($service_charge)) {
                    throw new Exception('请输入手续费');
                }
                $add_fee = $remit_amount - $service_charge;//实际收款金额:充值金额-手续费
                $asset_update['mnyall'] = Db::raw("mnyall+$add_fee");//入库总额
                $asset_update['mnyavl'] = Db::raw("mnyavl+$add_fee");//可用余额
                Db::name('seller_asset')->where('id', $info['asset_id'])->update($asset_update);
                $record_update = [
                    'status'      => 1,
                    'service_charge'=> $service_charge,
                    'review_time' => time()//审核时间
                ];
                Db::name('seller_remit_record')->where('id', $record_id)->update($record_update);//更新状态
                $LogData = [
                    'amount'      => $add_fee,
                    'type'           => 1,//1增加,2减少
                    'remark'         => '汇款确认',
                    'user_id'        => $this->admin_id,
                    'seller_id'        => $info['seller_id'],
                    'target_type' => 1,
                    'target_id' => $info['asset_id'],
                ];
                event('SellerBillLog', $LogData);//汇款确认入账日志
                $message = '操作成功,审核通过';
            } else {
                Db::name('seller_remit_record')->where('id', $record_id)->update(['status' => 2]);
                $message = '操作成功,审核不通过';
            }
            // 提交事务
            Db::commit();
            return $this->successResponse($message);
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/ReturnExchange.php
New file
@@ -0,0 +1,121 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\ReturnExchange as ReturnExchangeValidate;
class ReturnExchange extends Common {
    /**
     * 退换货类型列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('return_exchange')->where($condition)->count();
                $list = Db::name('return_exchange')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存退换货类型
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new ReturnExchangeValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('return_exchange')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('return_exchange')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('return_exchange')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除退换货类型
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('return_exchange')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('return_exchange')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/ReturnExchangeType.php
New file
@@ -0,0 +1,114 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\ReturnExchangeType as ReturnExchangeTypeValidate;
class ReturnExchangeType extends Common {
    /**
     * 退换货类型列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('return_exchange')->where($condition)->count();
                $list = Db::name('return_exchange')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                if (count($list) > 0) {
                    $idAry = [];
                    $typeIdList = [];
                    foreach ($list as &$item) {
                        array_push($idAry, $item['id']);
                    }
                    $typeWhere = [
                        ['return_exchange_id', 'in', $idAry]
                    ];
                    $typeList = Db::name('return_exchange_type')->field("*")->where($condition)->select()->toArray();
                    if (count($typeList) > 0) {
                        $typeIdList = dataField($typeList, 'return_exchange_id', 'type', true);
                    }
                    foreach ($list as &$item) {
                        $item['type'] = [];
                        if (isset($typeIdList[$item['id']])) {
                            $item['type'] = $typeIdList[$item['id']];
                        }
                    }
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存退换货类型分类
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new ReturnExchangeTypeValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $return_exchange_id = $data['return_exchange_id'];
            if (!is_numeric($return_exchange_id)) {
                return $this->errorResponse('id信息不正确');
            }
            $types = $data['type'];
            if (!is_array($types)) {
                return $this->errorResponse('类型不正确');
            }
            //删除原有类型分类
            Db::name('return_exchange_type')->where('return_exchange_id', $return_exchange_id)->delete();
            $returnExchangeTypes = [];
            foreach ($types as &$type) {
                $returnExchangeTypes[] = [
                    'return_exchange_id' => $return_exchange_id,
                    'type' => $type,
                ];
            }
            $update_result = Db::name('return_exchange_type')->insertAll($returnExchangeTypes);
            if ($update_result === FALSE) {
                return $this->errorResponse(lang('editing_failed'));
            }
            //提交事务
            Db::commit();
            return $this->successResponse('编辑成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/SalesPlatform.php
New file
@@ -0,0 +1,240 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Config;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\SalesPlatform as SalesPlatformValidate;
class SalesPlatform extends Common {
    private $tableName = 'sales_platform';
    private $viewPath = 'salesPlatform';
    /**
     * 销售平台列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            View::assign('viewPath', $this->viewPath);
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('platform_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name($this->tableName)->where($condition)->count();
                $list = Db::name($this->tableName)->field("*")->where($condition)->withAttr('platform_region_id', function ($value) {
//                    $info['goods_purpose'] = json_decode($info['goods_purpose'], TRUE);
                    return json_decode($value, TRUE);
                })->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存销售平台
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new SalesPlatformValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                throw new Exception($validate->getError());
            }
            if ($data['platform_region_id']) {
                $data['platform_region_id'] = json_encode(array_map('intval', $data['platform_region_id']));////将数组中的值转为数字类型/////
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name($this->tableName)->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name($this->tableName)->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name($this->tableName)->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    function updateExt() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $postField = 'id,is_show';
            $data = Request::only(explode(',', $postField), 'post');
            if (!$data['id']) {
                throw new Exception(lang('parameter_error'));
            }
            Db::name($this->tableName)->update($data);
            $result['message'] = '操作成功';
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    public function uploadLogo() {
        $logo = input('logo');
        $id = input('id');
        $ext_arr = array(
            'image' => array('jpg', 'jpeg', 'png'),
        );
        $maxSizeArr = array(
            'image' => 1024 * 1024 * 10,
        );
        $bannersize = Config::get('app.BANNER_SIZE');
        $width = $bannersize['suolue']['w'];
        $height = $bannersize['suolue']['h'];
        $ratio = $bannersize['suolue']['r'];
        $upload = new \common\UploadFile(); // 实例化上传类
        $upload->uploadReplace = TRUE; //同名文件自动覆盖
        $upload->autoSub = TRUE; // 启用子目录保存文件
        $upload->subType = 'date';  // 子目录创建方式 可以使用hash date custom
        $upload->dateFormat = 'Y/m/d'; //定义 subType=date 后,才需要定义dateFormat
        $upload->maxSize = 1024 * 1024 * 0; // 设置附件上传大小 10M
        $upload->maxSizeArr = $maxSizeArr; // 设置附件上传大小 10M
        $upload->allowExts = $ext_arr; // 设置附件上传类型
        $upload->savePath = './static/upload/'; // 设置附件上传目录
        $upload->ratio = $ratio; //1:按比例缩放,2:裁切固定值大小
        $upload->thumb = FALSE;   // 使用对上传图片进行缩略图处理
        //$upload->imageClassPath='LIB.Util.Image';    // 图库类包路径 用于生成缩略图
        $upload->thumbMaxWidth = $width; // 缩略图最大宽度
        $upload->thumbMaxHeight = $height; // 缩略图最大高度
        $upload->thumbRemoveOrigin = FALSE; // 是否移除原图  移除原图时,必须给 thumbPrefix指定一个前缀,否则会将原图误删除
        $backinfo = $upload->uploadmore();
        if (!$backinfo) {// 上传错误提示错误信息
            return $this->errorResponse($upload->getErrorMsg());
        } else {
            $update_info = $upload->getUploadFileInfo();
            $photo = $update_info['savename'];
            if (is_numeric($id) && $id > 0) {
                $info = Db::name($this->tableName)->field('logo')->where('id', $id)->find();
                if($info){
                    if($info['logo']){
                        delpic($info['logo']);
                    }
                    $update_data['logo'] = $photo;
                    Db::name($this->tableName)->where('id', $id)->update($update_data);//更新数据
                    $this->uploadFileToCos($photo);//上传到cos
                }
                else{
                    //数据不存在视为新增数据,删除旧图片
                    if ($logo) {
                        delpic($logo);
                        $this->deleteFileFromCos($logo);//从cos删除文件
                    }
                }
            } else {
                //新增数据,删除旧图片
                if ($logo) {
                    delpic($logo);
                    $this->deleteFileFromCos($logo);//从cos删除文件
                }
            }
            // 上传成功 获取上传文件信息
            //上传可同时上传多个,上传方式为一次上传多个
            $result['logo'] = $photo;
            $result['message'] = lang('successfully_uploaded');
            return $this->successResponse($result);
        }
    }
    /**
     * 删除销售平台
     * @return array|int[]
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name($this->tableName)->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name($this->tableName)->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    public function getPlatformRegion() {
        ////////
            try {
                if(!Request::isPost()){
                    throw new Exception(lang('request_method_incorrect'));
                }
                $list = Db::name('platform_region')->field("*")->order('order_id,id')->select()->toArray();
                if (!$list) {
                    $list = [];
                }
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
    }
}
app/admin/controller/Seller.php
New file
@@ -0,0 +1,313 @@
<?php
namespace app\admin\controller;
use app\admin\validate\SellerAccountAdd;
use app\admin\validate\SellerAccountEdit;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Seller extends Common
{
    public function index()
    {
        ////////
        View::assign('menuitem', strtolower('seller-index'));
        $other['title'] = '分销商';
        $guide['one']['text'] = '分销商管理';
        $guide['two']['text'] = '分销商列表';
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    /**
     * @throws ModelNotFoundException
     * @throws DbException
     * @throws DataNotFoundException
     */
    public function seller_list()
    {
        if (Request::isPost()) {
            $kw = input('kw');
            if (!empty($kw)) {
                $condition[] = array('a.phone|b.company_name|b.certificate_name', 'like', "%$kw%");
            }
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'a.id desc';
            $count = Db::name('seller_account')
                ->alias('a')->join('seller_base_info b', 'a.id = b.seller_id')
                ->where($condition)->count();
            $list = Db::name('seller_account')
                ->alias('a')
                ->leftJoin('seller_base_info b', 'a.id = b.seller_id')
                ->field("a.id,a.phone,b.id as seller_id,b.account_type,b.certificate_name,b.first_name,b.last_name,b.company_name,login_time,login_ip,a.end_time,a.start_time,a.sub_ban_access")
                ->where($condition)
                ->order($order)
                ->page($p, $other['page_size'])
                ->select()
                ->toArray();
            $other['count'] = $count;
            if (!$list) {
                $list = [];
            } else {
                foreach ($list as &$item) {
                    $item['endtime'] = date('Y-m-d', $item['end_time']);
                }
            }
            $other['admin_info'] = $this->cinfo;
            $d['code'] = 200;
            $d['list'] = $list;
            $d['other'] = $other;
            return $d;
        }
    }
    public function update_ban_access()
    {
        header('Content-Type:text/html;charset=utf-8');
        if (Request::isPost()) {
            $id = input('id');
            $sub_ban_access = input('sub_ban_access');
            $info = Db::name('seller_account')->where('id', $id)->find();
            if (!$info) {
                $d['code'] = 400;
                $d['message'] = '信息不存在';
                return $d;
            }
            if ($sub_ban_access == '1') {
                $dd['sub_ban_access'] = 1;
                $d['sub_ban_access'] = 1;
                $d['message'] = '允许登录';
            } else {
                $dd['sub_ban_access'] = 0;
                $d['sub_ban_access'] = 0;
                $d['message'] = '禁止登录';
            }
            $backval = Db::name('seller_account')->where('id', $id)->save($dd);
            if ($backval === FALSE) {
                $d['code'] = 400;
            } else {
                $d['code'] = 200;
            }
        } else {
            $d['code'] = 400;
            $d['message'] = '非法请求';
        }
        return $d;
    }
    /**
     * 分销商编辑页
     * @param int $id
     * @return string
     */
    public function add(int $id = 0): string
    {
        View::assign('menuitem', strtolower('seller-index'));
        if ($id && is_numeric($id)) {
            $other['title'] = '编辑分销商信息';
        } else {
            $other['title'] = '添加分销商信息';
        }
        $guide['one']['text'] = '分销商管理';
        $guide['two']['text'] = $other['title'];
        $other['id'] = $id;
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('add');
    }
    /**
     * 获取分销商详细信息
     * @return array
     */
    public function get_seller_info(): array
    {
        try {
            if (!Request::isPost()) {
                throw new Exception("请求方式有误");
            }
            $seller_id = input('id');
            if (!$seller_id || !is_numeric($seller_id)) {
                throw new Exception("参数有误");
            }
            $where = [
                'a.id' => $seller_id
            ];
            $seller_info = Db::name('seller_account')->where('id', $seller_id)->find();
            if (!$seller_info) {
                throw new Exception("分销商信息有误");
            }
            unset($seller_info['password']);
            $base_info = Db::name('seller_base_info')->where('seller_id', $seller_id)->find();
            if (!$base_info) {
                $seller_info['base_info'] = [];
            } else {
                $base_info['main_area'] = $base_info['main_area'] ? array_map('intval', explode(',', $base_info['main_area'])) : [];
                $base_info['main_dis_platform'] = $base_info['main_dis_platform'] ? array_map('intval', explode(',', $base_info['main_dis_platform'])) : [];
                $cate_code = [];
                if ($base_info['country_id']) {
                    $cate_code[] = $base_info['country_id'];
                }
                if ($base_info['province_id']) {
                    $cate_code[] = $base_info['province_id'];
                }
                if ($base_info['city_id']) {
                    $cate_code[] = $base_info['city_id'];
                }
                $base_info['cate_code'] = $cate_code;
                $seller_info['base_info'] = $base_info;
            }
            $seller_info['end_time'] = date("Y-m-d", $seller_info['end_time']);
            $result = [
                'code'    => 200,
                'message' => "成功",
                'data'    => $seller_info
            ];
        } catch (Exception $exc) {
            $result = [
                'code'    => $exc->getCode(),
                'message' => $exc->getMessage()
            ];
        }
        return $result;
    }
    /**
     * 保存分销商帐号
     * @return array
     */
    public function save_seller_info(): array
    {
        try {
            if (!Request::isPost()) {
                throw new Exception("请求方式有误");
            }
            $params = Request::param();
            $phone = trim($params['phone'] ?? '');
            if (!$phone) {
                throw new Exception("请填写分销商手机号");
            }
            $seller_id = $params['id'] ?? 0;
            $where = [];
            if ($seller_id) {
                $where[] = ['phone', '=', $phone];
                $where[] = ['id', '<>', $seller_id];
                /////更新/////
                $find = Db::name('seller_account')->where($where)->find();
                if ($find) {
                    throw new Exception("该手机号已被其它分销商注册");
                }
                $seller_info = Db::name('seller_account')->where('id', $seller_id)->find();
                if (!$seller_info) {
                    throw new Exception("分销商账号信息有误");
                }
                $add_data = [
                    'phone' => $phone,
                    'end_time' => strtotime($params['end_time']) + 86400 - 1,
                    'sub_ban_access' => $params['sub_ban_access'] ? 1 : 0,
                ];
                if ($params['password']) {
                    $add_data['password'] = joinmd5($params['password']);
                }
                Db::name('seller_account')->where('id', $seller_id)->update($add_data);
                $jump_url = "";
            } else {
                if (!$params['password']) {
                    throw new Exception("请填写分销商密码");
                }
                /////添加/////
                $where[] = ['phone', '=', trim($phone)];
                $seller_info = Db::name('seller_account')->where($where)->find();
                if ($seller_info) {
                    throw new Exception("该手机号已被其它分销商注册");
                }
                $add_data = [
                    'phone' => $params['phone'],
                    'password' => joinmd5($params['password']),
                    'end_time' => strtotime($params['end_time']) + 86400 - 1,
                    'sub_ban_access' => $params['sub_ban_access'] ? 1 : 0,
                    'start_time' => time(),
                    'add_time' => time()
                ];
                $seller_id = Db::name('seller_account')->insertGetId($add_data);
                if (!$seller_id) {
                    throw new Exception("添加分销商失败");
                }
                $jump_url = url('admin/seller/index');
            }
            $result = [
                'code'     => 200,
                'message'  => "保存成功",
                'jump_url' => $jump_url
            ];
        } catch (Exception $exc) {
            $result = [
                'code'    => $exc->getCode(),
                'message' => $exc->getMessage()
            ];
        }
        return $result;
    }
    /*
     * 获取国家-省份-城市列表
     */
    public function getCountryCodeList()
    {
        if (!Request::isPost()) {
            throw new Exception(lang('request_method_incorrect'));
        }
        try {
            $result['list'] = $this->getCountrychildrenids(0);
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /*
     * 获取分销平台列表
     */
    public function getDisPlatformList()
    {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            //            $seller_id = $this->sellerId;
            $condition[] = ['seller_status', '=', 1];
            $order = 'order_id asc,id asc';
            $list = Db::name('dis_platform')->field("id,platform_name")->where($condition)->order($order)->select()->toArray();
            if ($list) {
                $result['list'] = $list;
                return $this->successResponse($result);
            } else {
                throw new Exception(lang('no_data_found'));
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/SellerBaseInfo.php
New file
@@ -0,0 +1,127 @@
<?php
namespace app\admin\controller;
use think\facade\Db;
use think\facade\Request;
use think\facade\View;
use think\Exception;
class SellerBaseInfo extends Common {
    /*
     * 品牌管理
     */
    public function index(){
        if (!Request::isPost()) {
            $other['title'] = '分销商实名认证审核';
            $guide['one']['text'] = '数据审核';
            $guide['two']['text'] = '分销商实名认证审核';
            View::assign('guide', $guide);
            View::assign('other', $other);
            return View::fetch('index');
        }
        else{
            try {
                $kw = input('kw');
                $condition['status'] = 2;//提交审核
                if (!empty($kw)) {
                    $condition[] = array('first_name|last_name|certificate_name', 'like', "%$kw%");
                }
                $p = input('page', 1);
                $_GET['p'] = $p;
                $other['page_size'] = input('page_size', 20);
                $order = 'id desc';
                $count = Db::name('seller_base_info')->where($condition)->count();
                $list = Db::name('seller_base_info')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                else{
                    foreach ($list as &$item){
                        $item['main_area'] = $item['main_area'] ? array_map('intval', explode(',', $item['main_area'])) : [];
                        $item['main_dis_platform'] = $item['main_dis_platform'] ? array_map('intval', explode(',', $item['main_dis_platform'])) : [];
                        $item['cate_code'] = [$item['country_id'], $item['province_id'], $item['city_id']];
                    }
                }
                $result['code'] = 200;
                $result['list'] = $list;
                $result['other'] = $other;
                return $this->successResponse($result);
            } catch (\Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /*
 * 获取国家-省份-城市列表
 */
    public function getCountryCodeList() {
        if (!Request::isPost()) {
            throw new Exception(lang('request_method_incorrect'));
        }
        try {
            $result['list'] = $this->getCountrychildrenids(0);
            return $this->successResponse($result);
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    protected function getCountrychildrenids($id) {
        $where['father_id'] = $id;
        $result = Db::name('country_code')->field('id as value,cate_name as label')->where($where)->cacheAlways(TRUE, 0, 'country_code')->order('order_id asc,id asc')->select()->toArray();
        if ($result) {
            foreach ($result as &$val) {
                $val['children'] = $this->getCountrychildrenids($val['value']); ////
            }
            return $result;
        }
    }
    /**
     * 分销商实名认证审核
     * @return array|int[]
     */
    public function reviewBaseInfo() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $base_info_id = input('post.base_info_id');
            if (is_numeric($base_info_id)) {
                $status = input('post.status');
                //更新数据
                $info = Db::name('seller_base_info')->field('id,status')->where('id', $base_info_id)->find();
                if (!$info) {
                    throw new Exception(lang('no_data_found'));
                }
                if ($info['status'] == 1) {
                    throw new Exception('该申请已审核通过,不能重复审核');
                }
                if ($status == 1) {
                    Db::name('seller_base_info')->where('id', $base_info_id)->update(['status' => 1]);
                    $message = '操作成功,审核通过';
                } else {
                    Db::name('seller_base_info')->where('id', $base_info_id)->update(['status' => 3]);
                    $message = '操作成功,审核不通过';
                }
                // 提交事务
                Db::commit();
                return $this->successResponse($message);
            } else {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/SellerMenu.php
New file
@@ -0,0 +1,126 @@
<?php
namespace app\admin\controller;
use think\facade\Cache;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use think\Exception;
use app\admin\util\MenuService;
class SellerMenu extends Common {
    private $menuService;
    private $tableName = 'seller_menu';
    private $viewPath = 'sellerMenu';
    public function __construct() {
        parent::__construct();
        $this->menuService = new MenuService();
    }
    /**
     * 菜单列表
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            $other['title'] = '经销商菜单';
            $guide['one']['text'] = '经销商管理';
            $guide['two']['text'] = '经销商列表';
            View::assign('guide', $guide);
            View::assign('other', $other);
            View::assign('viewPath', $this->viewPath);
            return View::fetch('/menu/index');
        } else {
            $order = 'order_id asc,id asc';
            $list = $this->menuService->getMenuList($this->tableName, $order);
            $result['list'] = $list;
            return $this->successResponse($result);
        }
    }
    /**
     * 更新菜单显示状态
     */
    public function updateShowMenu() {
        header('Content-Type:text/html;charset=utf-8');
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception('参数错误!', 400);
            }
            $showMenu = input('show_menu');
            $isUpdate = $this->menuService->upShowMenu($this->tableName, (int)$id, $showMenu);
            if (!$isUpdate) {
                throw new Exception('更新失败!', 400);
            }
            return $this->successResponse('更新成功');
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /*
     * 获取菜单详情
     */
    public function getMenuDetail() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('id');
            if (!is_numeric($id)) {
                throw new Exception('参数错误!', 400);
            }
            $menuDetail = $this->menuService->getMenuDetail($this->tableName, (int)$id);
            if (!$menuDetail) {
                throw new Exception('菜单不存在!', 400);
            }
            $result['info'] = $menuDetail;
            return $this->successResponse($result);
        } catch (Exception $e) {
            return $this->errorResponse($e->getMessage());
        }
    }
    /**
     * 保存菜单
     * @return array|int[]
     */
    public function saveMenu() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //启动事务
        Db::startTrans();
        try {
            $data = Request::post();
            $id = $data['id'];
            if (isset($data['langs']) && $data['langs']) {
                $data['langs'] = json_encode($data['langs'], JSON_UNESCAPED_UNICODE);
            }
            if (is_numeric($id)) {
                //更新数据
                $this->menuService->upMenu($this->tableName, (int)$id, $data);
                $res['message'] = '菜单编辑成功';
            } else {
                unset($data['id']);
                $this->menuService->addMenu($this->tableName, (int)$id, $data);
                $res['message'] = '菜单添加成功';
            }
            ///////执行成功,提交事务///////
            Db::commit();
            return $this->successResponse($res);
        } catch (Exception $e) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($e->getMessage());
        }
    }
}
app/admin/controller/StockCountry.php
New file
@@ -0,0 +1,120 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use \app\admin\validate\StockCountry as StockCountryValidate;
class StockCountry extends Common {
    /**
     * 国家列表
     * @return string
     */
    public function index() {
        ////////
        if (!Request::isPost()) {
            return View::fetch();
        } else {
            try {
                $kw = input('kw');
                if (!empty($kw)) {
                    $condition[] = array('purpose_name', 'like', "%$kw%");
                }
                $p = input('p', 1);
                $other['page_size'] = input('page_size', 20);
                $order = 'order_id asc,id asc';
                $count = Db::name('stock_country')->where($condition)->count();
                $list = Db::name('stock_country')->field("*")->where($condition)->order($order)->page($p, $other['page_size'])->select()->toArray();
                $other['count'] = $count;
                if (!$list) {
                    $list = [];
                }
                $result['other'] = $other;
                $result['list'] = $list;
                return $this->successResponse($result);
            } catch (Exception $exc) {
                return $this->errorResponse($exc->getMessage());
            }
        }
    }
    /**
     *保存国家
     */
    public function save() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $data = Request::post();
            $validate = new StockCountryValidate();
            $check_result = $validate->check($data);
            if (!$check_result) {
                return $this->errorResponse($validate->getError());
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                //更新数据
                $update_result = Db::name('stock_country')->where('id', $id)->withoutField('id')->save($data);
                if ($update_result === FALSE) {
                    return $this->errorResponse(lang('editing_failed'));
                }
                //提交事务
                Db::commit();
                return $this->successResponse('修改成功!');
            } else {
                //添加数据
                unset($data['id']);
                $add_result = Db::name('stock_country')->insertGetId($data);
                if (!$add_result) {
                    return $this->errorResponse('添加失败!');
                }
                Db::name('stock_country')->where('id', $add_result)->save(['order_id' => $add_result]);
                //提交事务
                Db::commit();
                return $this->successResponse('添加成功!');
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 删除国家
     */
    public function delete() {
        if (!Request::isPost()) {
            return $this->errorResponse(lang('request_method_incorrect'));
        }
        //开始事务
        Db::startTrans();
        try {
            $id = input('id');
            if (!is_numeric($id)) {
                return $this->errorResponse(lang('parameter_error'));
            }
            $condition['id'] = $id;
            $info = Db::name('stock_country')->field('id')->where($condition)->find();
            if (!$info) {
                return $this->errorResponse(lang('parameter_error'));
            }
            Db::name('stock_country')->where('id', $id)->delete();
            //提交事务
            Db::commit();
            return $this->successResponse('删除成功!');
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/Supplier.php
New file
@@ -0,0 +1,508 @@
<?php
namespace app\admin\controller;
use app\admin\validate\SupplierAccountAdd;
use app\admin\validate\SupplierAccountEdit;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Supplier extends Common {
    public function index() {
        ////////
        View::assign('menuitem', strtolower('supplier-index'));
        $other['title'] = '供应商';
        $guide['one']['text'] = '供应商管理';
        $guide['two']['text'] = '供应商列表';
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    /**
     * @throws ModelNotFoundException
     * @throws DbException
     * @throws DataNotFoundException
     */
    public function supplier_list() {
        if (Request::isPost()) {
            $kw = input('kw');
            $condition[] = ['initialize', '=', 1];
            if (!empty($kw)) {
                $condition[] = array('user_name|real_name', 'like', "%$kw%");
            }
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'b.id asc';
            $count = Db::name('supplier')
                ->alias('a')
                ->join('supplier_account b', 'a.id = b.supplier_id')
                ->where($condition)->count();
            $list = Db::name('supplier')
                ->alias('a')
                ->join('supplier_account b', 'a.id = b.supplier_id')
                ->field("a.id,b.supplier_id,b.user_name,a.real_name,ban_access,a.phone,supplier_name,initialize,login_time,login_ip,a.end_time,a.start_time,a.audit_status")
                ->where($condition)
                ->order($order)
                ->page($p, $other['page_size'])
                ->select()
                ->toArray();
            $other['count'] = $count;
            if (!$list) {
                $list = [];
            } else {
                foreach ($list as &$item) {
                    $item['endtime'] = date('Y-m-d', $item['end_time']);
                }
            }
            $other['admin_info'] = $this->cinfo;
            $d['code'] = 200;
            $d['list'] = $list;
            $d['other'] = $other;
            return $d;
        }
    }
    public function update_ban_access() {
        header('Content-Type:text/html;charset=utf-8');
        if (Request::isPost()) {
            $id = input('id');
            $sub_ban_access = input('ban_access');
            $info = Db::name('supplier')->field('id')->where('id', $id)->find();
            if (empty($info)) {
                $d['code'] = 400;
                $d['message'] = '信息不存在';
                return $d;
            }
            ///
            if (is_numeric($id)) {
                if ($sub_ban_access == '1') {
                    $dd['ban_access'] = 1;
                    $d['ban_access'] = 1;
                    $d['message'] = '允许登录';
                } else {
                    $dd['ban_access'] = 0;
                    $d['ban_access'] = 0;
                    $d['message'] = '禁止登录';
                }
                $backval = Db::name('supplier')->where('id', $id)->save($dd);
                if ($backval === FALSE) {
                    $d['code'] = 400;
                } else {
                    $d['code'] = 200;
                }
            } else {
                $d['code'] = 400;
            }
        } else {
            $d['code'] = 400;
        }
        return $d;
    }
    public function setAuditStatus() {
        header('Content-Type:text/html;charset=utf-8');
        if (Request::isPost()) {
            $id = input('id');
            $audit_status = input('audit_status');
            $info = Db::name('supplier')->field('id')->where('id', $id)->find();
            if (empty($info)) {
                $d['code'] = 400;
                $d['message'] = '信息不存在';
                return $d;
            }
            ///
            if (is_numeric($id)) {
                if ($audit_status == '1') {
                    $dd['audit_status'] = 1;
                    $d['audit_status'] = 1;
                    $d['message'] = '通过审核';
                } else {
                    $dd['audit_status'] = 0;
                    $d['audit_status'] = 0;
                    $d['message'] = '未审核';
                }
                $backval = Db::name('supplier')->where('id', $id)->save($dd);
                if ($backval === FALSE) {
                    $d['code'] = 400;
                } else {
                    $d['code'] = 200;
                }
            } else {
                $d['code'] = 400;
            }
        } else {
            $d['code'] = 400;
        }
        return $d;
    }
    /**
     * 保存供应商信息(废弃)
     * @return array
     */
    public function save_supplier() {
        if (Request::isPost()) {
            header('Content-Type:text/html;charset=utf-8');
            $data = Request::post();
            $id = input('id');
            $password = input('password');
            if (empty($password)) {
            } else {
                $data['password'] = joinmd5($password);
            }
            if (is_numeric($id)) {//更新数据
                $supplier_id = input('supplier_id');
                /////验证密码复杂度///////////
                $validate = new SupplierAccountEdit();
                $result = $validate->scene('edit')->check($data);
                if (!$result) {
                    $d['code'] = 400;
                    $d['message'] = $validate->getError();
                    return $d;
                }
                //////保存供应商信息////////////
                $supplier_data['supplier_name'] = $data['supplier_name'];
                $supplier_data['real_name'] = $data['real_name'];
                $supplier_data['phone'] = $data['phone'];
                $supplier_data['end_time'] = strtotime($data['endtime']);
                Db::name('supplier')->where('id', $supplier_id)->save($supplier_data);
                ////////////////////////
                if (!empty($password)) {
                    /////修改密码////////////////
                    $supplier_account_data['password'] = $data['password'];
                    Db::name('supplier_account')->where('id', $id)->save($supplier_account_data);
                }
                $d['code'] = 200;
                $d['end_time'] = strtotime($data['endtime']);
                $d['message'] = '编辑成功';
            } else {
                unset($data['id']);
                $validate = new SupplierAccountAdd();
                $result = $validate->check($data);
                if (!$result) {
                    $d['code'] = 400;
                    $d['message'] = $validate->getError();
                    return $d;
                }
                //////////////////////
                Db::startTrans();
                try {
                    $end_time = getcurrdate() + 3600 * 24 * 30;
                    $supplier_data['phone'] = $data['phone'];
                    $supplier_data['supplier_name'] = $data['supplier_name'];
                    $supplier_data['real_name'] = $data['real_name'];
                    $supplier_data['add_time'] = time();
                    $supplier_data['start_time'] = time();
                    $supplier_data['end_time'] = $end_time;
                    $supplier_id = Db::name('supplier')->insertGetId($supplier_data);
                    /////--------------------////
                    $supplier_account_data['supplier_id'] = $supplier_id;
                    $supplier_account_data['user_name'] = $data['user_name'];
                    $supplier_account_data['password'] = $data['password'];
                    $supplier_account_data['phone'] = $data['phone'];
                    $supplier_account_data['real_name'] = $data['real_name'];
                    $supplier_account_data['add_time'] = time();
                    $supplier_account_data['initialize'] = 1;
                    $supplier_account_id = Db::name('supplier_account')->insertGetId($supplier_account_data);
                    if ($supplier_id && $supplier_account_id) {
                        ///////执行成功,提交事务///////
                        Db::commit();
                        $d['code'] = 200;
                        $d['message'] = '供应商添加成功';
                    } else {
                        //任一执行失败,执行回滚操作,相当于均不执行
                        Db::rollback();
                        $d['code'] = 400;
                        $d['message'] = '供应商添加失败';
                    }
                } catch (\Exception $e) {
                    // 回滚事务
                    Db::rollback();
                    $d['code'] = 400;
                    $d['message'] = '供应商添加失败';
                }
            }
        } else {
            $d['code'] = 400;
            $d['message'] = '非法请求';
        }
        return $d;
    }
    public function delete_admin() {
        if (Request::isPost()) {
            $id = input('id');
            if (is_numeric($id)) {
                $condition['id'] = $id;
                $info = Db::name('administrators')->field('id,initialize')->where($condition)->find();
                if ($info) {
                    ///////////////////
                    if ($info['initialize'] == '1') {
                        $d['code'] = 400;
                        $d['message'] = '该账号不能删除!';
                        return $d;
                    }
                    if ($this->cinfo['initialize'] == 1 || $this->admin_id == $info['id']) {
                        Db::name('administrators')->where('id', $id)->delete();
                        /////////////////////////////
                        $d['code'] = 200;
                        $d['message'] = '删除成功!';
                    } else {
                        $d['code'] = 400;
                        $d['message'] = '您没有删除权限';
                    }
                } else {
                    $d['code'] = 400;
                    $d['message'] = '子账号不存在';
                }
            } else {
                $d['code'] = 400;
                $d['message'] = '参数有误!';
            }
            return $d;
        }
    }
    /**
     * 供应商编辑页
     * @param int $id
     * @return string
     */
    public function add(int $id = 0): string {
        View::assign('menuitem', strtolower('supplier-index'));
        if ($id && is_numeric($id)) {
            $other['title'] = '编辑供应商信息';
        } else {
            $other['title'] = '添加供应商信息';
        }
        $guide['one']['text'] = '供应商管理';
        $guide['two']['text'] = $other['title'];
        $other['id'] = $id;
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('add');
    }
    /**
     * 获取供应商详细信息
     * @return array
     */
    public function get_supplier_info(): array {
        try {
            if (!Request::isPost()) {
                throw new Exception("请求方式有误");
            }
            $supplier_id = input('id');
            if (!$supplier_id || !is_numeric($supplier_id)) {
                throw new Exception("参数有误");
            }
            $where = [
                'a.id' => $supplier_id
            ];
            $supplier_info = Db::name('supplier')
                ->alias("a")
                ->field("a.*,b.id as supplier_account_id,b.user_name,b.sub_ban_access,b.phone as account_phone,b.real_name as account_name")
                ->join("web_supplier_account b", "b.supplier_id = a.id and b.initialize = 1")
                ->where($where)
                ->find();
            if (!$supplier_info) {
                throw new Exception("供应商信息有误");
            }
//            $supplier_info['sub_ban_access'] = (bool)$supplier_info['sub_ban_access'];
            $supplier_info['end_time'] = date("Y-m-d", $supplier_info['end_time']);
            $result = [
                'code'    => 200,
                'message' => "成功",
                'data'    => $supplier_info
            ];
        } catch (Exception $exc) {
            $result = [
                'code'    => $exc->getCode(),
                'message' => $exc->getMessage()
            ];
        }
        return $result;
    }
    /**
     * 保存供应商信息
     * @return array
     */
    public function save_supplier_info(): array {
        try {
            if (!Request::isPost()) {
                throw new Exception("请求方式有误");
            }
            $params = Request::param();
            if (!$params['supplier_name']) {
                throw new Exception("请填写供应商名称");
            }
            if (!$params['user_name']) {
                throw new Exception("请填写供应商账号");
            }
            if (!$params['account_name']) {
                throw new Exception("请填写供应商联系人姓名");
            }
            if (!$params['account_phone']) {
                throw new Exception("请填写供应商联系人手机号");
            }
//            dump($params['sub_ban_access']);exit;
//
//            if ($params['sub_ban_access']) {
//                $params['sub_ban_access'] = 1;
//            } else {
//                $params['sub_ban_access'] = 0;
//            }
            Db::startTrans();
            if ($params['id']) {
                /////更新/////
                $where = [
                    'id' => $params['id']
                ];
                $supplier_info = Db::name('supplier')->where($where)->find();
                if (!$supplier_info) {
                    throw new Exception("供应商信息有误");
                }
                /////更新供应商信息/////
                $update_supplier_data = [
                    'supplier_name'          => $params['supplier_name'],/////供应商名称/////
                    'supplier_en_name'       => $params['supplier_en_name'],/////供应商英文名称/////
                    'real_name'              => $params['real_name'],/////供应商联系人姓名/////
                    'phone'                  => $params['phone'],/////供应商联系人手机/////
                    'email'                  => $params['email'],/////供应商联系人邮箱/////
                    'phone_number'           => $params['phone_number'],/////供应商联系人座机/////
                    'unique_code'            => $params['unique_code'],/////供应商唯一代码。营业执照上的统一代码/////
                    'legal_person_name'      => $params['legal_person_name'],/////供应商法人/////
                    'legal_person_id_number' => $params['legal_person_id_number'],/////供应商法人身份证号/////
                    'address'                => $params['address'],/////供应商地址/////
                    'postal_code'            => $params['postal_code'],/////邮政编码/////
                    'end_time'               => strtotime($params['end_time']) + 86400 - 1,/////到期时间/////
                    'ban_access'             => $params['sub_ban_access'],/////账号状态/////
                    'account_executive'     => $params['account_executive'],/////业务经理/////
                    'account_executive_phone'   => $params['account_executive_phone'],///业务经理联系方式////
                ];
                $update_supplier_result = Db::name('supplier')->where($where)->update($update_supplier_data);
                if ($update_supplier_result === FALSE) {
                    throw new Exception("更新供应商信息失败");
                }
                /////更新供应商主账号信息/////
                $supplier_account_where = [
                    'id'          => $params['supplier_account_id'],
                    'supplier_id' => $params['id'],
                ];
                $supplier_account_info = Db::name('supplier_account')->where($supplier_account_where)->find();
                if (!$supplier_account_info) {
                    throw new Exception("供应商主账号信息有误");
                }
                if ($params['user_name'] != $supplier_account_info['user_name']) {
                    /////账号有修改,检查新账号是否存在/////
                    $check_supplier_account_where = [
                        'user_name' => $params['user_name'],
                    ];
                    $check_supplier_account_result = Db::name('supplier_account')->where($check_supplier_account_where)->find();
                    if ($check_supplier_account_result) {
                        throw new Exception("此账号已存在,请换一个账号");
                    }
                }
                $updae_supplier_account_data = [
                    'user_name'      => $params['user_name'],
                    'real_name'      => $params['account_name'],
                    'phone'          => $params['account_phone'],
                    'sub_ban_access' => $params['sub_ban_access'],/////账号状态/////
                ];
                if ($params['password']) {
                    $updae_supplier_account_data['password'] = joinmd5($params['password']);
                }
                $update_supplier_account_result = Db::name('supplier_account')->where($supplier_account_where)->data($updae_supplier_account_data)->update();
                if ($update_supplier_account_result === FALSE) {
                    throw new Exception("更新供应商主账号信息失败");
                }
                $jump_url = "";
            } else {
                /////添加/////
                /////1、先添加供应商/////
                $add_supplier_data = [
                    'supplier_name' => $params['supplier_name'],
                    'real_name'     => $params['account_name'],
                    'phone'         => $params['account_phone'],
                    'start_time'    => time(),
                    'end_time'      => strtotime($params['end_time']) + 86400 - 1,
                    'ban_access'    => $params['sub_ban_access'] ? 1 : 0,
                    'account_executive'     => $params['account_executive'],/////业务经理/////
                    'account_executive_phone'   => $params['account_executive_phone'],///业务经理联系方式////
                    'add_time'      => time()
                ];
                $add_supplier_result = Db::name('supplier')->insertGetId($add_supplier_data);
                if (!$add_supplier_result) {
                    throw new Exception("添加供应商失败");
                }
                /////2、再添加供应商账号/////
                $check_user_name_where = [
                    'user_name' => $params['user_name'],
                ];
                if (Db::name('supplier_account')->where($check_user_name_where)->find()) {
                    throw new Exception("账号已存在,请换一个账号");
                }
                $add_supplier_account_data = [
                    'supplier_id'    => $add_supplier_result,
                    'user_name'      => $params['user_name'],
                    'password'       => joinmd5($params['password']),
                    'real_name'      => $params['account_name'],
                    'phone'          => $params['account_phone'],
                    'initialize'     => 1,
                    'sub_ban_access' => $params['sub_ban_access'] ? 1 : 0,
                    'add_time'       => time()
                ];
                $add_supplier_account_result = Db::name('supplier_account')->insertGetId($add_supplier_account_data);
                if (!$add_supplier_account_result) {
                    throw new Exception("添加供应商账号失败");
                }
                $jump_url = url('admin/supplier/add/id/' . $add_supplier_result);
            }
            Db::commit();
            $result = [
                'code'     => 200,
                'message'  => "保存成功",
                'jump_url' => $jump_url
            ];
        } catch (Exception $exc) {
            Db::rollback();
            $result = [
                'code'    => $exc->getCode(),
                'message' => $exc->getMessage()
            ];
        }
        return $result;
    }
}
app/admin/controller/ThirdPartyLogisticsProductTemp.php
New file
@@ -0,0 +1,123 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\supplier\validate\LogisticsProduct;
class ThirdPartyLogisticsProductTemp extends Common {
    /**
     * 新建物流产品首页
     * @return string
     */
    public function index() {
        ////////
        return View::fetch();
    }
    /**
     * 审核物流产品
     * @return array|int[]
     */
    public function reviewLogisticsProduct() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                $status = input('post.status');
                //更新数据
                $info = Db::name('logistics_product')->field('id,status')->where('id', $id)->find();
                if (!$info) {
                    return $this->errorResponse(lang('request_method_incorrect'));
                }
                if ($status == 1) {
                    Db::name('logistics_product')->where('id', $id)->update(['status' => 1]);
                    $message = '操作成功,审核通过';
                } else {
                    Db::name('logistics_product')->where('id', $id)->update(['status' => 2]);
                    $message = '操作成功,审核不通过';
                }
                // 提交事务
                Db::commit();
                return $this->successResponse($message);
            } else {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取物流产品列表
     */
    public function logisticsProductList() {
        if (Request::isPost()) {
            $kw = input('kw');
            if (!empty($kw)) {
                $condition[] = array('product_name_cn|product_name_en|docking_code', 'like', "%$kw%");
            }
            $condition[] = ['status', '=', 3];
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'status asc,edit_time asc';
            $count = Db::name('logistics_product')->where($condition)->count();
            $list = Db::name('logistics_product')->field("id,platform_logistics_product_id,logistics_type,docking_system,docking_code,product_name_cn,product_name_en,value_added_services,status,edit_time")->where($condition)
                ->withAttr('edit_time', function ($value) {
                    return date('Y-m-d H:i:s', $value);
                })->withAttr('platform_logistics_product_name', function ($value, $data) {
                    return $data['platform_logistics_product_id'] ? Db::name('platform_logistics_product')->where('id', $data['platform_logistics_product_id'])->field('product_name_cn,product_name_en,cycle_start,cycle_end')->find() : '';
                })
                ->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            $result['other'] = $other;
            if (!$list) {
                $list = [];
                $result['code'] = 400;
                return $result;
            } else {
                foreach ($list as &$item) {
                    if ($item['value_added_services']) {
                        $item['value_added_services'] = json_decode($item['value_added_services'], TRUE);
                    } else {
                        $item['value_added_services'] = [];
                    }
                }
                $result['code'] = 200;
                $result['list'] = $list;
                return $result;
            }
            return $result;
        }
    }
    /**
     * 获取增值服务列表
     */
    public function logisticsVasList() {
        if (Request::isPost()) {
            $order = 'order_id asc,id asc';
            $list = Db::name('logistics_vas')->field("id,vas_name,vas_code")->order($order)->cacheAlways(TRUE, 0, 'logistics_vas')->select()->toArray();
            if (!$list) {
                $list = [];
            }
            $d['code'] = 200;
            $d['list'] = $list;
            return $d;
        }
    }
}
app/admin/controller/ThirdPartyStockTemp.php
New file
@@ -0,0 +1,197 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\supplier\validate\ThirdPartyStock;
use app\supplier\validate\ThirdPartyStockAddress;
class ThirdPartyStockTemp extends Common {
    /**
     * 新建仓库首页
     * @return string
     */
    public function index() {
        ////////
        return View::fetch();
    }
    /**
     * 审核仓库
     * @return array|int[]
     */
    public function reviewStock() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                $status = input('post.status');
                //更新数据
                $info = Db::name('third_party_stock')->field('id,status')->where('id', $id)->find();
                if (!$info) {
                    return $this->errorResponse(lang('request_method_incorrect'));
                }
                if ($status == 1) {
                    $count0 = Db::name('third_party_stock_address')->where('third_party_stock_id', $id)->where('status', 0)->count();
                    if ($count0 > 0) {
                        return $this->errorResponse('请先审核仓库地址');
                    }
                    $count1 = Db::name('third_party_stock_address')->where('third_party_stock_id', $id)->where('status', 1)->count();
                    if ($count1 == 0) {
                        return $this->errorResponse('至少有一个仓库地址通过审核');
                    }
                    Db::name('third_party_stock')->where('id', $id)->update(['status' => 1, 'need_review' => 1]);
                    $message = '操作成功,审核通过';
                } else {
                    Db::name('third_party_stock_address')->where('third_party_stock_id', $id)->where('status', 0)->save(['status' => 2]);
                    Db::name('third_party_stock')->where('id', $id)->update(['status' => 2, 'need_review' => 1]);
                    $message = '操作成功,审核不通过';
                }
                // 提交事务
                Db::commit();
                return $this->successResponse($message);
            } else {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 审核仓库地址
     * @return array|int[]
     */
    public function reviewAddress() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $id = input('post.id');
            if (is_numeric($id)) {
                $status = input('post.status');
                $result = [
                    'stock_status' => 0,
                    'status'       => 0,
                    'need_review'  => 0,
                ];
                //更新数据
                $info = Db::name('third_party_stock_address')->field('id,status,third_party_stock_id')->where('id', $id)->find();
                if (!$info) {
                    return $this->errorResponse(lang('request_method_incorrect'));
                }
                if ($status == 1) {
                    Db::name('third_party_stock_address')->where('id', $id)->update(['status' => 1]);
                    $result['status'] = 1;
                    $result['message'] = '操作成功,审核通过';
                } else {
                    Db::name('third_party_stock_address')->where('id', $id)->update(['status' => 2]);
                    $result['status'] = 2;
                    $result['message'] = '操作成功,审核不通过';
                }
                $count0 = Db::name('third_party_stock_address')->where('third_party_stock_id', $info['third_party_stock_id'])->where('status', 0)->count();
                $count1 = Db::name('third_party_stock_address')->where('third_party_stock_id', $info['third_party_stock_id'])->where('status', 1)->count();
                if ($count0 == 0) {
                    //仓库地址全部审核
                    if ($count1 == 0) {
                        //仓库不通过审核
                        Db::name('third_party_stock')->where('id', $info['third_party_stock_id'])->update(['need_review' => 1, 'status' => 2]);
                        $result['need_review'] = 1;
                        $result['stock_status'] = 2;
                    } else {
                        //仓库通过审核
                        Db::name('third_party_stock')->where('id', $info['third_party_stock_id'])->update(['need_review' => 1, 'status' => 1]);
                        $result['need_review'] = 1;
                        $result['stock_status'] = 1;
                    }
                }
                // 提交事务
                Db::commit();
                return $this->successResponse($result);
            } else {
                return $this->errorResponse(lang('request_method_incorrect'));
            }
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 获取仓库列表
     */
    public function stockList() {
        if (Request::isPost()) {
            $kw = input('kw');
            if (!empty($kw)) {
                $condition[] = array('third_party_stock_name|docking_code', 'like', "%$kw%");
            }
//            $condition[]= array('need_review', '=', 2);
            $p = input('p', 1);
            $_GET['p'] = $p;
            $other['page_size'] = input('page_size', 20);
            $order = 'need_review desc,edit_time asc';
            $count = Db::name('third_party_stock')->where($condition)->count();
            $list = Db::name('third_party_stock')->field("id,stock_type,docking_system,third_party_stock_name,docking_code,status,need_review,edit_time")->where($condition)
                ->withAttr('edit_time', function ($value, $data) {
                    return date('Y-m-d H:i:s', $value);
                })
                ->order($order)->page($p, $other['page_size'])->select()->toArray();
            $other['count'] = $count;
            if (!$list) {
                $list = [];
            }
            $d['code'] = 200;
            $d['list'] = $list;
            $d['other'] = $other;
            return $d;
        }
    }
    /**
     * 获取仓库列表
     */
    public function stockAddressList() {
        if (Request::isPost()) {
            $third_party_stock_id = input('third_party_stock_id');
            $condition['a.third_party_stock_id'] = $third_party_stock_id;
            $order = 'a.id asc';
            $list = Db::name('third_party_stock_address')
                ->alias('a')
                ->join('web_stock_country b', 'a.stock_country_id=b.id')
                ->field("a.id,a.receive_man,a.tel,a.stock_address,a.stock_city,a.stock_province,a.stock_country_id,a.stock_post_code,a.suit_range,b.country,a.status")->where($condition)
                ->withAttr('suit_range', function ($value, $data) {
                    return $value ? array_map('intval', explode(',', $value)) : [];
                })
                ->order($order)->select()->toArray();
            if (!$list) {
                $result['code'] = 400;
                return $result;
            } else {
                $result['code'] = 200;
                $result['list'] = $list;
                return $result;
            }
        }
    }
}
app/admin/controller/Translation.php
New file
@@ -0,0 +1,45 @@
<?php
namespace app\admin\controller;
use think\Exception;
use think\facade\Request;
class Translation extends Common {
    /*
     * 翻译语言包
     */
    public function trans() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $data = Request::post();
            if (!isset($data['qArray']) || !is_array($data['qArray'])) {
                throw new Exception('翻译内容错误');
            }
            if (!isset($data['from']) || empty($data['from'])) {
                throw new Exception('源语言错误');
            }
            if (!isset($data['to']) || empty($data['to'])) {
                throw new Exception('目标语言错误');
            }
            $YDObj = new  \app\common\service\YouDaoTrans();
            $ret = $YDObj->do_translate($data['qArray'], $data['from'], $data['to']);
            $ret = json_decode($ret, TRUE);
            if ($ret['errorCode'] != 0) {
                throw new Exception('错误代码:' . $ret['errorCode'] . ',请核对错误代码列表');
            }
            $result = $ret['translateResults'];
            return $this->successResponse($result);
        } catch (Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/controller/WithdrawalRecord.php
New file
@@ -0,0 +1,142 @@
<?php
namespace app\admin\controller;
use think\facade\Db;
use think\facade\Request;
use think\facade\View;
use think\Exception;
class WithdrawalRecord extends Common {
    /*
     * 品牌管理
     */
    public function index(): string {
        $other['title'] = '提现审核';
        $guide['one']['text'] = '数据审核';
        $guide['two']['text'] = '提现审核';
        View::assign('guide', $guide);
        View::assign('other', $other);
        return View::fetch('index');
    }
    /*
     */
    public function getWithdrawalRecordList() {
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $kw = input('kw');
//            $condition[] = ['SRR.status', '=', 0];
            $condition[] = ['SWR.payment_account', 'like', '%' . $kw . '%'];
            $p = input('p', 1);
            $other['page_size'] = input('page_size', 20);
            $order = 'SWR.id desc';
            $count = Db::name('supplier_withdrawal_record')
                ->alias('SWR')
                ->join('payment_tool PT', 'PT.payment_tool_id=SWR.payment_tool_id')
                ->join('supplier_asset SA', 'SA.id=SWR.asset_id')
                ->join('currency C', 'C.id=SA.currency_id')
                ->where($condition)->count();
            $list = Db::name('supplier_withdrawal_record')
                ->alias('SWR')
                ->field("SWR.*,PT.payment_tool_name,C.currency_name")
                ->join('payment_tool PT', 'PT.payment_tool_id=SWR.payment_tool_id')
                ->join('supplier_asset SA', 'SA.id=SWR.asset_id')
                ->join('currency C', 'C.id=SA.currency_id')
                ->where($condition)->order($order)->page($p, $other['page_size'])->withAttr('add_time', function ($value) {
                    return date('Y-m-d H:i', $value);
                })
                ->select()->toArray();
            $other['count'] = $count;
            $result['other'] = $other;
            if (!$list) {
                throw new Exception(lang('no_data_found'));
            } else {
                $result['list'] = $list;
                return $this->successResponse($result);
            }
        } catch (\Exception $exc) {
            return $this->errorResponse($exc->getMessage());
        }
    }
    /**
     * 汇款审核
     */
    public function reviewWithdrawalRecord() {
        // 开始数据库事务
        Db::startTrans();
        try {
            if (!Request::isPost()) {
                throw new Exception(lang('request_method_incorrect'));
            }
            $record_id = input('post.record_id');
            if (!is_numeric($record_id)) {
                throw new Exception(lang('parameter_error'));
            }
            $status = input('post.status');
            //更新数据
            $info = Db::name('supplier_withdrawal_record')->field('id,status,asset_id,payment_amount,supplier_id')->where('id', $record_id)->find();
            if (!$info) {
                throw new Exception(lang('no_data_found'));
            }
            if ($info['status'] == 1) {
                throw new Exception('该申请已审核通过,请勿重复审核');
            }
            $payment_amount = $info['payment_amount'];
            if ($status == 1) {
                $service_charge = input('post.service_charge');
                if (!is_numeric($service_charge)) {
                    throw new Exception('请输入手续费');
                }
                $add_fee = $payment_amount - $service_charge;//实际收款金额:充值金额-手续费
                $asset_update['mnyusd'] = Db::raw("mnyusd+$payment_amount");//提现总额
                $asset_update['mnylck'] = Db::raw("mnylck-$payment_amount");//冻结金额
                Db::name('supplier_asset')->where('id', $info['asset_id'])->update($asset_update);
                $record_update = [
                    'status'         => 1,
                    'service_charge' => $service_charge,
                    'review_time'    => time()//审核时间
                ];
                Db::name('supplier_withdrawal_record')->where('id', $record_id)->update($record_update);//更新状态
                $LogData = [
                    'amount'      => $add_fee,
                    'type'        => 2,//1增加,2减少
                    'remark'      => '提现确认',
                    'user_id'     => $this->admin_id,
                    'supplier_id' => $info['supplier_id'],
                    'target_type' => 2,//提现
                    'target_id'   => $info['asset_id'],
                ];
                event('SupplierBillLog', $LogData);//提现确认日志
                $message = '操作成功,审核通过';
            } else {
                $review_comments = input('post.review_comments');
                //审核不通过处理
                $asset_update['mnyavl'] = Db::raw("mnyavl+$payment_amount");//可用余额恢复
                $asset_update['mnylck'] = Db::raw("mnylck-$payment_amount");//冻结金额恢复
                Db::name('supplier_asset')->where('id', $info['asset_id'])->update($asset_update);
                $no_record_update = [
                    'status'         => 2,
                    'review_comments' => $review_comments,
                    'review_time'    => time()//审核时间
                ];
                Db::name('supplier_withdrawal_record')->where('id', $record_id)->update($no_record_update);
                $message = '操作成功,审核不通过';
            }
            // 提交事务
            Db::commit();
            return $this->successResponse($message);
        } catch (Exception $exc) {
            // 回滚事务
            Db::rollback();
            return $this->errorResponse($exc->getMessage());
        }
    }
}
app/admin/middleware.php
New file
@@ -0,0 +1,12 @@
<?php
// 中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
//     \think\middleware\SessionInit::class,
//    \think\trace\TraceDebug::class,
//    \app\company\middleware\Checklogin::class,
];
app/admin/model/Language.php
New file
@@ -0,0 +1,16 @@
<?php
namespace app\admin\model;
use think\facade\Db;
use think\model;
use think\model\concern\SoftDelete;
class Language extends Model {
    // 使用软删除特性
    use SoftDelete;
    // 设置软删除字段,默认为 delete_time
    protected $deleteTime = 'delete_time';
}
app/admin/model/LanguagePag.php
New file
@@ -0,0 +1,26 @@
<?php
namespace app\admin\model;
use think\facade\Db;
use think\model;
use app\admin\model\{Language};
class LanguagePag extends Model {
    protected $autoWriteTimestamp = true;
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    /**
     * @notes 获取源语言
     * @param $value
     * @param $data
     * @return string
     * @author BD
     * @date 2024/02/22 10:54
     */
    public function getFromValueAttr($value, $data)
    {
        $language = Language::where(['is_show' => 1])->order(['order_id' => 'asc', 'id' => 'asc'])->findOrEmpty();
        return LanguagePag::where(['lang' => $language['symbol'], 'type' => $data['type'], 'name' => $data['name'], 'platform_type' => $data['platform_type']])->value('value');
    }
}
app/admin/model/Message.php
New file
@@ -0,0 +1,13 @@
<?php
namespace app\admin\model;
use think\facade\Db;
use think\model;
class Message extends Model {
    public function messageAttachment() {
        return $this->hasMany(MessageAttachment::class, 'message_id')->visible(['title','filename']);
    }
}
app/admin/model/MessageAttachment.php
New file
@@ -0,0 +1,8 @@
<?php
namespace app\admin\model;
use think\facade\Db;
use think\model;
class MessageAttachment extends Model {}
app/admin/util/MenuService.php
New file
@@ -0,0 +1,125 @@
<?php
namespace app\admin\util;
use think\Exception;
use think\facade\Config;
use think\facade\Cache;
use think\facade\Db;
use think\facade\Session;
use think\facade\Cookie;
class MenuService {
    /**
     * 获取菜单列表
     * @param string $tableName
     * @param string $order
     * @return array
     */
    public function getMenuList(String $tableName, String $order){
        $menulist = Db::name($tableName)->field("*")->withAttr('langs', function ($langs) {
            if (empty($langs)) {
                return [];
            }
            return json_decode($langs, true);
        })->order($order)->select()->toArray();
        $list = _generateListTree($menulist, 0, ['id', 'father_id']);
        return $list;
    }
    /**
     * 更新菜单显示状态
     * @param string $tableName
     * @param int $id
     * @param string $showMenu
     * @return bool
     */
    public function upShowMenu(String $tableName, int $id, String $showMenu):bool {
        $data = [];
        $info = Db::name($tableName)->field('id')->where('id', $id)->find();
        if (empty($info)) {
            throw new Exception('信息不存在!', 400);
        }
        if ($showMenu == '1') {
            $data['show_menu'] = 1;
        } else {
            $data['show_menu'] = 0;
        }
        $backval = Db::name($tableName)->where('id', $id)->save($data);
        if ($backval === FALSE) {
            throw new Exception('更新失败!', 400);
        } else {
            $this->delCache($tableName);
            return true;
        }
        return false;
    }
    public function getMenuDetail(String $tableName, int $id){
        return Db::name($tableName)->field('*')->withAttr('langs', function ($langs) {
            if (empty($langs)) {
                return [];
            }
            return json_decode($langs, true);
        })->where('id', $id)->find();
    }
    /**
     * 检查菜单数据
     * @param array $data
     */
    public function validateData(array $data){
        $validate = new \app\admin\validate\SupplierMenu();
        $result = $validate->check($data);
        if (!$result) {
            throw new Exception($validate->getError(), 400);
        }
    }
    /**
     * 更新菜单
     * @param string $tableName
     * @param int $id
     * @param array $data
     * @return bool
     */
    public function upMenu(String $tableName, int $id, array $data) {
        $this->validateData($data);
        //更新数据
        //////保存////////////
        Db::name($tableName)->where('id', $id)->withoutField('id')->save($data);
        ////////////////////////
        $this->delCache($tableName);
    }
    /**
     * 添加菜单
     * @param string $tableName
     * @param int $id
     * @param array $data
     * @return bool
     */
    public function addMenu(String $tableName, int $id, array $data):bool {
        $this->validateData($data);
        $data['add_time'] = time();
        $new_id = Db::name($tableName)->insertGetId($data);
        if ($new_id) {
            Db::name($tableName)->where('id', $new_id)->save(['order_id' => $new_id]);
            ///////执行成功,提交事务///////
            $this->delCache($tableName);
            return true;
        } else {
            throw new Exception('菜单添加失败', 400);
        }
    }
    /**
     * 清除缓存
     * @return void
     */
    private function delCache($tableName) {
        Cache::tag($tableName)->clear();
    }
}
app/admin/util/Opadmin.php
New file
@@ -0,0 +1,222 @@
<?php
namespace app\admin\util;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Config;
use think\facade\Db;
use think\facade\Session;
use think\facade\Cookie;
class Opadmin {
    public string $user_name; //用户名
    private string $password; //密码
    private mixed $session_prefix; //SESSION前缀
    private string $kinfo = 'admininfo';
    public mixed $info;
    public string $commfield = 'id,user_name,real_name,ban_access,initialize,start_time,end_time';
    /**
     * +----------------------------------------------------------
     * 构造函数,对象初始化
     * +----------------------------------------------------------
     * @param string $username 用户名
     * @param string $password 密码
     * +----------------------------------------------------------
     */
    public function __construct(string $username = '', string $password = '') {
        $this->session_prefix = Config::get('app.session_admin_prefix');
        //给保存SESSION的成员变量名称加上前缀
        $this->kinfo = $this->session_prefix . $this->kinfo;
        //用于登陆的时候初始化变量
        $this->user_name = $username;
        $this->password = joinmd5($password);
        //判断session是否存在,存在就赋值
        if (session('?' . $this->kinfo)) {
            $this->info = session($this->kinfo);
        } elseif ($tempcookie = cookie($this->kinfo)) {
            $this->info = json_decode(html_entity_decode($tempcookie), TRUE); ////json转成数组保存到session
            session($this->kinfo, $this->info);
        }
    }
    /**
     * 用户登陆
     * @return bool|array
     * @throws DataNotFoundException
     * @throws DbException
     * @throws ModelNotFoundException
     */
    public function login(): bool|array {
        $subwhere['user_name'] = $this->user_name;
//        $subwhere['password'] = $this->password;
        $tempinfo = Db::name('administrators')->field('id,password,ban_access,login_lock_time,login_try_num')->where($subwhere)->find();
        if (!$tempinfo) {
            $d['code'] = 400;
            $d['message'] = '账号或密码错误、请重试';
            return $d;
        }
        if ($tempinfo['login_lock_time'] != '' && time() - $tempinfo['login_lock_time'] < 600) {
            $d['code'] = 400;
            $d['message'] = '该账号已被锁定、请10分钟后重试';
            return $d;
        }
        $upd_where['id'] = $tempinfo['id'];
        if ($this->password != $tempinfo['password']) {
            // 次数 小于等于 1 -> 锁定登录操作
            if ($tempinfo['login_try_num'] <= 1) {
                $upd_data['login_lock_time'] = time();
                $upd_data['login_try_num'] = 5;
                Db::name('administrators')->where($upd_where)->save($upd_data);
                $d['code'] = 400;
                $d['message'] = '该账号已被锁定、请10分钟后重试';
            } else {
                // 次数 小于2 次数-1 -> 账号密码错误
                Db::name('administrators')->where($upd_where)->dec('login_try_num')->update();
                $d['code'] = 400;
                $d['message'] = '账号或密码错误、剩余' . ($tempinfo['login_try_num'] - 1) . '次';
            }
            return $d;
        }
        /////以下密码正确,成功登陆///////////
        Db::name('administrators')->where($upd_where)->save(['login_try_num' => 5]);
        if ($tempinfo['ban_access'] == 0) {
            $msg['code'] = 400;
            $msg['message'] = '该账号已被禁止登录';
            return $msg;
        }
        return $this->getlogininfo($tempinfo['id']);
    }
    //////获取用户登录信息///////////
    public function getlogininfo($id = ''): array {
        $subwhere['id'] = $id;
        $info = Db::name('administrators')->field($this->commfield)->where($subwhere)->find();
        if ($info) {
            if ($info['initialize'] == 0 && ($info['start_time'] > time() || $info['end_time'] < time())) {
                $this->loginout();
                $msg['code'] = 400;
                $msg['message'] = '账号已过期,请联系管理员!';
                return $msg;
            }
            ///////登陆成功赋值////
            $this->info = $info;
            $this->saveSession();
            $this->writelogs();
            //更新登陆信息
            if ($this->updateInfo()) {
                $msg['code'] = 200;
                $msg['message'] = '登录成功';
            } else {
                $msg['code'] = 400;
                $msg['message'] = '登录失败';
            }
        } else {
            $msg['code'] = 400;
            $msg['message'] = '用户名或密码不正确';
        }
        return $msg;
    }
    /////账号登录信息///////////////
    private function updateInfo(): bool {
        $temp['login_time'] = time();
        $temp['login_ip'] = getIP();
        $where['id'] = $this->info['id'];
        $count = Db::name('administrators')->where($where)->save($temp);
        if ($count > 0)
            return TRUE;
        else
            return FALSE;
    }
    private function writelogs(): void {
        //////登陆记录//////////
        $d['login_ip'] = getIP();
        $d['login_time'] = time();
        $d['admin_id'] = $this->info['id'];
        Db::name('admin_login_logs')->insert($d);
    }
    /**
     * +----------------------------------------------------------
     * 保存session
     * +----------------------------------------------------------
     * +----------------------------------------------------------
     */
    public function saveSession(): void {
        session($this->kinfo, $this->info);
        cookie($this->kinfo, json_encode($this->info, JSON_UNESCAPED_SLASHES), 3600 * 24 * 30);
    }
    /**
     * +----------------------------------------------------------
     * 判断用户是否登陆
     * @return bool
     * +----------------------------------------------------------
     * +----------------------------------------------------------
     */
    public function islogin(): bool {
        if (isset($this->info['id']) && $this->info['id'] != '')
            return TRUE;
        else
            return FALSE;
    }
    /**
     * +----------------------------------------------------------
     * 用户退出
     * @return bool
     * +----------------------------------------------------------
     * +----------------------------------------------------------
     */
    public function loginout(): bool {
        $this->info = "";
        cookie($this->kinfo, NULL);
        session($this->kinfo, NULL);
        session(NULL);
        unset($_COOKIE);
        return TRUE;
    }
    public function menu(): array {
        $condition['show_menu'] = 1;
        $order = 'order_id asc,id asc';
        $list = Db::name('admin_menu')
            ->field("id,title,menu_index,menu_icon,show_menu,menu_url,father_id")
            ->cacheAlways(TRUE, 0, 'admin_menu')
            ->where($condition)
            ->order($order)
            ->withAttr('menu_index', function ($value) {
                return strtolower($value);
            })
            ->select()
            ->toArray();
        return $this->getMenuList($list, 'father_id');
    }
    /**
     * 获取菜单列表
     * @param $result
     * @param string $one_field
     * @return array
     */
    private function getMenuList($result, string $one_field = ''): array {
        if (!empty($result) && is_array($result)) {
            $result_arr = [];
            foreach ($result as $value) {
                $result_arr[$value[$one_field]][] = $value;
            }
            return $result_arr;
        } else {
            return array();
        }
    }
}
app/admin/validate/AdminMenu.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class AdminMenu extends Validate {
    protected $rule = [
        'title' => 'require',
        'menu_index' => 'require',
    ];
    protected $message = [
        'title.require' => '请填写菜单名称',
        'menu_index.require' => '请填写菜单索引',
    ];
}
app/admin/validate/Administrators.php
New file
@@ -0,0 +1,27 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Administrators extends Validate {
    protected $rule = [
        'user_name' => 'require|unique:administrators,user_name',
        'pwd' => 'regexo:/^.{6,18}$/|regext:/^.*?[\d]+.*$/|regexth:/^.*?[A-Za-z].*$/',
        'real_name' => 'require',
    ];
    protected $message = [
        'user_name.require' => '请填写账号',
        'user_name.unique' => '账号已存在',
        'pwd.regexo' => '密码必须在6-18位',
        'pwd.regext' => '密码必须包含数字',
        'pwd.regexth' => '密码必须包含字母',
        'real_name.require' => '请填写管理员姓名',
    ];
    protected $scene = [
        'edit'  =>  ['pwd','real_name'],/////编辑情况下只验证密码的复杂程度////////
    ];
}
app/admin/validate/Category.php
New file
@@ -0,0 +1,20 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Category extends Validate {
    protected $rule = [
        'cate_name' => 'require',
        'cate_code' => 'require|unique:category,cate_code',
    ];
    protected $message = [
        'cate_name.require' => '请填写分类名称',
//        'cate_name.unique' => '分类名称已存在!',
        'cate_code.require' => '请填写分类编码',
        'cate_code.unique' => '分类编码已存在!',
    ];
}
app/admin/validate/CountryCode.php
New file
@@ -0,0 +1,22 @@
<?php
namespace app\admin\validate;
use think\Validate;
class CountryCode extends Validate {
    protected $rule = [
        'cate_name' => 'require|unique:country_code,cate_name^father_id',
        'cate_code' => 'require',
    ];
    protected $message = [
        'cate_name.require' => '请填写名称',
        'cate_name.unique' => '名称已存在!',
        'cate_code.require' => '请填写编码',
    ];
    protected $scene = [
        'city'  =>  ['cate_name'],
    ];
}
app/admin/validate/Currency.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Currency extends Validate {
    protected $rule = [
        'currency_code' => 'require',
        'currency_name' => 'require',
    ];
    protected $message = [
        'currency_code.require' => '请填写货币编码',
        'currency_name.require' => '请填写货币名称',
    ];
}
app/admin/validate/DeliverRegion.php
New file
@@ -0,0 +1,21 @@
<?php
namespace app\admin\validate;
use think\Validate;
class DeliverRegion extends Validate {
    protected $rule = [
        'region_code' => 'require',
        'region_name' => 'require',
        'region_currency' => 'require',
    ];
    protected $message = [
        'region_code.require' => '请填写分销区域编码',
        'region_name.require' => '请填写分销区域名称',
        'region_currency.require' => '请填写分销区域币别',
    ];
}
app/admin/validate/DeliverRegionLogistics.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class DeliverRegionLogistics extends Validate {
    protected $rule = [
        'deliver_region_id' => 'require',
        'name' => 'require',
    ];
    protected $message = [
        'deliver_region_id.require' => '请选择分销区域',
        'name.require' => '请输入分销区域物流名称',
    ];
}
app/admin/validate/DisPlatform.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class DisPlatform extends Validate {
    protected $rule = [
        'platform_name' => 'require',
    ];
    protected $message = [
        'platform_name.require' => '请填写分销平台名称',
    ];
}
app/admin/validate/DockingPlatform.php
New file
@@ -0,0 +1,20 @@
<?php
namespace app\admin\validate;
use think\Validate;
class DockingPlatform extends Validate {
    protected $rule = [
        'docking_platform_name' => 'require|unique:docking_platform',
        'cate_code' => 'require|unique:docking_platform',
    ];
    protected $message = [
        'cate_name.require' => '请填写平台名称',
        'cate_name.unique' => '平台名称已存在!',
        'cate_code.require' => '请填写平台编码',
        'cate_code.unique' => '平台编码已存在',
    ];
}
app/admin/validate/GoodsFreightAttr.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class GoodsFreightAttr extends Validate {
    protected $rule = [
        'attr_code' => 'require',
        'attr_name' => 'require',
    ];
    protected $message = [
        'attr_code.require' => '请填写货运属性代码',
        'attr_name.require' => '请填写货运属性名称',
    ];
}
app/admin/validate/GoodsMaterial.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class GoodsMaterial extends Validate {
    protected $rule = [
        'material_name' => 'require',
    ];
    protected $message = [
        'material_name.require' => '请填写材质名称',
    ];
}
app/admin/validate/GoodsPurpose.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class GoodsPurpose extends Validate {
    protected $rule = [
        'purpose_name' => 'require',
    ];
    protected $message = [
        'purpose_name.require' => '请填写商品用途名称',
    ];
}
app/admin/validate/Language.php
New file
@@ -0,0 +1,24 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Language extends Validate {
    protected $rule = [
        'name' => 'require',
        'name_loc' => 'require',
        'symbol' => 'require|unique:language,symbol',
        'trans_symbol' => 'require',
    ];
    protected $message = [
        'name.require' => '请输入语言名称(中文)',
        'name_loc.require' => '请输入语言名称',
        'symbol.require' => '请输入语言标识',
        'trans_symbol.require' => '请输入翻译标识',
        'symbol.unique' => '语言标识已存在',
    ];
}
app/admin/validate/LanguagePag.php
New file
@@ -0,0 +1,25 @@
<?php
namespace app\admin\validate;
use think\Validate;
class LanguagePag extends Validate {
    protected $rule = [
        'platform_type' => 'require',
        'type' => 'require',
        'name' => 'require|unique:language_pag,platform_type^lang^type^name',
        'value' => 'require|unique:language_pag,platform_type^lang^value',
    ];
    protected $message = [
        'platform_type.require' => '请选择平台类型',
        'type.require' => '请输入类型',
        'name.require' => '请输入名称',
        'name.unique' => '名称已存在',
        'value.require' => '请输入值',
        'value.unique' => '值已存在',
    ];
}
app/admin/validate/LogisticsVas.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class LogisticsVas extends Validate {
    protected $rule = [
        'vas_code' => 'require',
        'vas_name' => 'require',
    ];
    protected $message = [
        'vas_code.require' => '请填写增值服务编码',
        'vas_name.require' => '请填写增值服务名称',
    ];
}
app/admin/validate/Message.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Message extends Validate {
    protected $rule = [
        'title' => 'require',
    ];
    protected $message = [
        'title.require' => '请输入消息标题',
    ];
}
app/admin/validate/MsgCategory.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class MsgCategory extends Validate {
    protected $rule = [
        'title' => 'require',
    ];
    protected $message = [
        'title.require' => '请填写分类名称',
    ];
}
app/admin/validate/Notice.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class Notice extends Validate {
    protected $rule = [
        'title' => 'require',
    ];
    protected $message = [
        'title.require' => '请输入公告标题',
    ];
}
app/admin/validate/PartnerSchool.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class PartnerSchool extends Validate {
    protected $rule = [
        'school_name' => 'require',
    ];
    protected $message = [
        'school_name.require' => '请填写合作学校名称',
    ];
}
app/admin/validate/PayBank.php
New file
@@ -0,0 +1,23 @@
<?php
namespace app\admin\validate;
use think\Validate;
class PayBank extends Validate {
    protected $rule = [
        'payee_name' => 'require',
        'account_name' => 'require',
        'account' => 'require',
        'img_url' => 'require',
    ];
    protected $message = [
        'payee_name.require' => '请填写开户行名称',
        'account_name.require' => '请填写账户名称',
        'account.require' => '请填写账户',
        'img_url.require' => '请上传LOGO',
    ];
}
app/admin/validate/PaymentTool.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class PaymentTool extends Validate {
    protected $rule = [
        'payment_tool_name' => 'require',
    ];
    protected $message = [
        'payment_tool_name.require' => '请填写名称',
    ];
}
app/admin/validate/PlatformLogisticsProduct.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class PlatformLogisticsProduct extends Validate {
    protected $rule = [
        'product_name_cn' => 'require',
        'product_name_en' => 'require',
    ];
    protected $message = [
        'product_name_cn.require' => '请输入平台物流产品中文名称',
        'product_name_en.require' => '请输入平台物流产品英文名称',
    ];
}
app/admin/validate/PlatformRegion.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class PlatformRegion extends Validate {
    protected $rule = [
        'region_name' => 'require',
    ];
    protected $message = [
        'region_name.require' => '请填写区域名称',
    ];
}
app/admin/validate/ReturnExchange.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class ReturnExchange extends Validate {
    protected $rule = [
        'is_proportion' => 'require',
        'name' => 'require',
    ];
    protected $message = [
        'is_proportion.require' => '请选择是否开启比例',
        'name.require' => '请输入退换货类型名称',
    ];
}
app/admin/validate/ReturnExchangeType.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class ReturnExchangeType extends Validate {
    protected $rule = [
        'return_exchange_id' => 'require',
        'type' => 'require',
    ];
    protected $message = [
        'return_exchange_id.require' => 'id信息不正确',
        'type.require' => '请选择退换货类型分类',
    ];
}
app/admin/validate/SalesPlatform.php
New file
@@ -0,0 +1,17 @@
<?php
namespace app\admin\validate;
use think\Validate;
class SalesPlatform extends Validate {
    protected $rule = [
        'platform_name' => 'require',
    ];
    protected $message = [
        'platform_name.require' => '请填写平台名称',
    ];
}
app/admin/validate/SellerAccountAdd.php
New file
@@ -0,0 +1,27 @@
<?php
namespace app\admin\validate;
use think\Validate;
class SellerAccountAdd extends Validate
{
    protected $rule = [
        'user_name' => 'require|unique:seller_account,user_name',
        'pwd' => 'require|regexo:/^.{6,18}$/|regext:/^.*?[\d]+.*$/|regexth:/^.*?[A-Za-z].*$/',
        'seller_name' => 'require',
        'real_name' => 'require',
    ];
    protected $message = [
        'user_name.require' => '请填写账号',
        'user_name.unique' => '账号已存在',
        'pwd.require' => '请输入密码',
        'pwd.regexo' => '密码必须在6-18位',
        'pwd.regext' => '密码必须包含数字',
        'pwd.regexth' => '密码必须包含字母',
        'seller_name.require' => '请填写供应商名称',
        'real_name.require' => '请填写联系人',
    ];
}
app/admin/validate/SellerAccountEdit.php
New file
@@ -0,0 +1,22 @@
<?php
namespace app\admin\validate;
use think\Validate;
class SellerAccountEdit extends Validate
{
    protected $rule = [
        'pwd' => 'regexo:/^.{6,18}$/|regext:/^.*?[\d]+.*$/|regexth:/^.*?[A-Za-z].*$/', ////填写密码就验证,不填写不验证////////
        'seller_name' => 'require',
        'real_name' => 'require',
    ];
    protected $message = [
        'pwd.regexo' => '密码必须在6-18位',
        'pwd.regext' => '密码必须包含数字',
        'pwd.regexth' => '密码必须包含字母',
        'seller_name.require' => '请填写供应商名称',
        'real_name.require' => '请填写联系人',
    ];
}
app/admin/validate/StockCountry.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class StockCountry extends Validate {
    protected $rule = [
        'country' => 'require',
        'country_code' => 'require',
    ];
    protected $message = [
        'country.require' => '请填写国家名称',
        'country_code.require' => '请填写国家编码',
    ];
}
app/admin/validate/SupplierAccountAdd.php
New file
@@ -0,0 +1,27 @@
<?php
namespace app\admin\validate;
use think\Validate;
class SupplierAccountAdd extends Validate {
    protected $rule = [
        'user_name' => 'require|unique:supplier_account,user_name',
        'pwd' => 'require|regexo:/^.{6,18}$/|regext:/^.*?[\d]+.*$/|regexth:/^.*?[A-Za-z].*$/',
        'supplier_name' => 'require',
        'real_name' => 'require',
    ];
    protected $message = [
        'user_name.require' => '请填写账号',
        'user_name.unique' => '账号已存在',
        'pwd.require' => '请输入密码',
        'pwd.regexo' => '密码必须在6-18位',
        'pwd.regext' => '密码必须包含数字',
        'pwd.regexth' => '密码必须包含字母',
        'supplier_name.require' => '请填写供应商名称',
        'real_name.require' => '请填写联系人',
    ];
}
app/admin/validate/SupplierAccountEdit.php
New file
@@ -0,0 +1,21 @@
<?php
namespace app\admin\validate;
use think\Validate;
class SupplierAccountEdit extends Validate {
    protected $rule = [
        'pwd' => 'regexo:/^.{6,18}$/|regext:/^.*?[\d]+.*$/|regexth:/^.*?[A-Za-z].*$/',////填写密码就验证,不填写不验证////////
        'supplier_name' => 'require',
        'real_name' => 'require',
    ];
    protected $message = [
        'pwd.regexo' => '密码必须在6-18位',
        'pwd.regext' => '密码必须包含数字',
        'pwd.regexth' => '密码必须包含字母',
        'supplier_name.require' => '请填写供应商名称',
        'real_name.require' => '请填写联系人',
    ];
}
app/admin/validate/SupplierMenu.php
New file
@@ -0,0 +1,19 @@
<?php
namespace app\admin\validate;
use think\Validate;
class SupplierMenu extends Validate {
    protected $rule = [
        'title' => 'require',
        'menu_index' => 'require',
    ];
    protected $message = [
        'title.require' => '请填写菜单名称',
        'menu_index.require' => '请填写菜单索引',
    ];
}
app/admin/view/administrators/index.html
New file
@@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="管理员账号" two_word="{$other.title}列表" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>{$other.title}列表</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                             @click="show_admin_account(-1)">添加</el-link>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchdata.kw" size="large" placeholder="可通过账号/姓名 筛选" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" size="large" icon="Search" @click="searchadminlist()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="adminlist" border style="width: 100%" ref="tableRef">
                                <el-table-column label="账号" prop="user_name" width="250"></el-table-column>
                                <el-table-column label="管理员姓名" prop="real_name"></el-table-column>
                                <el-table-column label="账号状态" width="200" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.ban_access" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                   :inactive-value="0" inline-prompt active-text="允许登录" inactive-text="禁止登录" @change="set_ban_access(scope.$index)" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="最近登录时间" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.login_time>0">{{formatDate(scope.row['login_time'])}}</template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="登录ip" prop="login_ip" width="200" align="center"></el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="200" :align="alignValue(300)">
                                    <template #default="scope">
                                        <template v-if="other.admin_info.initialize==1 || other.admin_info.id==scope.row['id']">
                                            <el-button icon="edit" type="primary" @click="show_admin_account(scope.$index)"></el-button>
                                            <el-button v-if="other.admin_info.initialize==1 && scope.row['initialize']==0" icon="delete" type="danger"
                                                       @click="delete_admin(scope.$index)"></el-button>
                                            <el-button v-else icon="delete" type="danger" disabled></el-button>
                                        </template>
                                        <template v-else>--</template>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <template #footer>
                                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                                               :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count"></el-pagination>
                            </template>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <!-- 添加账号弹框 -->
            <el-drawer :title="admin_title" :direction="direction" v-model="show_admin_info" size="35%">
                <div id="comment_item">
                    <div class="layui-row">
                        <div class="layui-col-md12 caller-contar">
                            <div class="caller-item">
                                <el-form ref="useritem" :model="useritem" label-width="150px" size="large">
                                    <el-form-item label="账号">
                                        <template v-if="useritem.id">
                                            {{useritem.user_name}}
                                        </template>
                                        <template v-else>
                                            <el-input v-model="useritem.user_name" style="width: 330px;"></el-input>
                                        </template>
                                    </el-form-item>
                                    <el-form-item label="密码">
                                        <el-input placeholder="请输入密码" v-model="useritem.pwd" show-password style="width: 330px;"></el-input>
                                        <span v-if="useritem.id" class="gray14">不修改密码保留为空</span>
                                    </el-form-item>
                                    <el-form-item label="管理员姓名">
                                        <el-input v-model="useritem.real_name" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item label="管理员手机号">
                                        <el-input v-model="useritem.phone" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item>
                                        <el-button type="primary" @click="save_admin">{{admin_button_txt}}</el-button>
                                        <el-button @click="show_admin_info=false">取消</el-button>
                                    </el-form-item>
                                </el-form>
                            </div>
                        </div>
                    </div>
                </div>
            </el-drawer>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/administrators/index.js"></script>
</html>
app/admin/view/adminmenu/index.html
New file
@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script>
            $(function () {
                $(".el-sub-menu__title").hover(function () {
                    $(this).addClass('hovercurrent');
                }, function () {
                    $(this).removeClass('hovercurrent');
                });
            });
        </script>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="后台菜单管理" two_word="总后台菜单" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>总后台菜单</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add()">添加</el-link>
                                </div>
                            </template>
                            <el-table :data="list" :tree-props="{children: 'children'}" row-key="id" default-expand-all border style="width: 100%" ref="tableRef">
                                <el-table-column label="菜单名称" prop="title"></el-table-column>
                                <el-table-column label="菜单索引" prop="menu_index"></el-table-column>
                                <el-table-column label="连接地址" prop="menu_url"></el-table-column>
                                <el-table-column label="Icon图标" prop="menu_icon" align="center"></el-table-column>
                                <el-table-column label="显示/隐藏" width="120" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.show_menu" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0"
                                                   inline-prompt active-text="显示" inactive-text="隐藏" @change="updateShowMenu(scope.row)" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="排序" prop="order_id" align="center" width="100"></el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="150" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="Edit(scope.row)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <!-- 添加一级菜单 -->
            <el-dialog :title="Add_title" v-model="dialogVisible_menu" :show-close="true" width="30%">
                <el-form ref="form" :model="Add_form" label-width="100px">
                    <el-form-item label="所属父类">
                        <el-select v-model="Add_form.father_id" placeholder="选择上级菜单" filterable clearable style="width: 90%;">
                            <el-option label="--" :value="0"></el-option>
                            <el-option v-for="(item,i) in list" :key="i" :label="item.title" :value="item.id"></el-option>
                        </el-select>
                    </el-form-item>
                    <el-form-item label="菜单名称">
                        <el-input v-model="Add_form.title" placeholder="请输入菜单名称" style="width: 90%;"></el-input>
                    </el-form-item>
                    <el-form-item label="菜单索引">
                        <el-input v-model="Add_form.menu_index" placeholder="请输入菜单索引" style="width: 90%;"></el-input>
                    </el-form-item>
                    <el-form-item label="Icon图标">
                        <el-input v-model="Add_form.menu_icon" placeholder="请输入icon" style="width: 90%;"></el-input>
                    </el-form-item>
                    <el-form-item label="连接地址">
                        <el-input v-model="Add_form.menu_url" placeholder="请输入连接地址" style="width: 90%;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="Add_form.id>0" label="排序值">
                        <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveMenu">保存</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/adminmenu/index.js"></script>
</html>
app/admin/view/bigv_info/index.html
New file
@@ -0,0 +1,210 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <style>
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide['one']['text']}" two_word="{$guide['two']['text']}" />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="goods_brand_management">{$other['title']}</span>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchData.kw" placeholder="请输入关键词" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" icon="Search" @click="getBigvInfoList()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="bigvInfoList" v-loading="loading" border style="width: 100%" :stripe="true" ref="tableRef">
                                <el-table-column prop="first_name" label="名称"></el-table-column>
                                <el-table-column prop="preferred_product_type" label="偏好带货产品类型"></el-table-column>
                                <el-table-column prop="nationality" label="国籍"></el-table-column>
                                <el-table-column prop="graduation_school" label="毕业学院"></el-table-column>
                                <el-table-column prop="personal_images" label="个人图像">
                                    <template #default="scope">
                                        <template v-for="item in scope.row.personal_images">
                                            <el-image style="width: 60px; height: 60px; margin-right: 5px;" :src="item.url" fit="cover" :preview-src-list="[item.url]" lazy>
                                                <div slot="error" class="image-slot">
                                                    <i class="el-icon-picture-outline"></i>
                                                </div>
                                            </el-image>
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="是否显示官网" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch @change="updateExt(scope.row,'is_show')" v-model="scope.row.is_show"
                                                   style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0" inline-prompt active-text="是"
                                                   inactive-text="否" />
                                    </template>
                                </el-table-column>
                                <!-- <el-table-column prop="brand_type" label="品牌类型" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.brand_type==1">
                                            <span data-i18n="brand_type_1">非自有品牌</span>
                                        </template>
                                        <template v-else>
                                            <span data-i18n="brand_type_2">自有品牌</span>
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="need_filings" label="是否需要备案" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.need_filings==1">
                                            <span data-i18n="need_filings_1">是</span>
                                        </template>
                                        <template v-else>
                                            <span data-i18n="need_filings_0">否</span>
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="real_name" label="审核状态" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                                        <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                                        <template v-else-if="scope.row.status==2"><el-tag type="info">未通过审核</el-tag></template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button type="primary" :disabled="scope.row.status==0?false:true" @click="showBrand(scope.row)">审核</el-button>
                                    </template>
                                </el-table-column> -->
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchData.page" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchData.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-dialog title="品牌信息" width="1200px" align-center="true" class="icon-dialog" v-model="dialogBrand" :before-close="closeForm" append-to-body>
                <el-card style="width: 100%">
                    <el-form label-width="auto">
                        <el-form-item label="品牌名称:">
                            {{brandInfo.brand_name}}
                        </el-form-item>
                        <el-form-item label="品牌类型:">
                            <template v-if="brandInfo.brand_type==1">
                                <span data-i18n="brand_type_1">非自有品牌</span>
                            </template>
                            <template v-else>
                                <span data-i18n="brand_type_2">自有品牌</span>
                            </template>
                        </el-form-item>
                        <el-form-item label="是否需要备案:">
                            <template v-if="brandInfo.need_filings==1">
                                <span data-i18n="need_filings_1">是</span>
                            </template>
                            <template v-else>
                                <span data-i18n="need_filings_0">否</span>
                            </template>
                        </el-form-item>
                        <el-form-item label="品牌介绍">
                            {{brandInfo.brand_desc}}
                        </el-form-item>
                        <el-form-item label="品牌LOGO">
                            <template v-if="brandInfo.brand_logo">
                                <img :src="brandInfo.brand_logo" @click="previewPictureCard(brandInfo.brand_logo)" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
                                     style="width: 100px;height: 100px;" />
                            </template>
                        </el-form-item>
                    </el-form></el-card>
                <br />
                <el-card style="width: 100%">
                    <template #header>
                        <div class="card-header">
                            <span>品牌证书</span>
                        </div>
                    </template>
                    <el-table :data="brandCertList" v-loading="loading_brand_cert" border style="width: 100%" :stripe="true">
                        <el-table-column prop="title" label="文件名称" align="center">
                            <template #default="scope">
                                <el-link :href="scope.row.filename" target="_blank" type="success">{{ scope.row.title }}</el-link>
                            </template>
                        </el-table-column>
                        <el-table-column prop="filesize" label="文件大小" align="center"></el-table-column>
                    </el-table>
                </el-card>
                <br />
                <el-card style="width: 100%">
                    <template #header>
                        <div class="card-header">
                            <span>备案范围</span>
                        </div>
                    </template>
                    <el-table :data="bigvInfoFilingsList" border style="width: 100%" :stripe="true">
                        <el-table-column prop="country" label="销售国家" align="center"></el-table-column>
                        <el-table-column prop="platform_name" label="销售平台" align="center"></el-table-column>
                        <el-table-column prop="amount" label="店铺数量上限" align="center"></el-table-column>
                    </el-table>
                </el-card>
                <br />
                <el-card style="width: 100%">
                    <template #header>
                        <div class="card-header">
                            <span>授权协议</span>
                        </div>
                    </template>
                    <el-table :data="brandAgreementList" v-loading="loading_brand_agreement" border style="width: 100%" :stripe="true">
                        <el-table-column prop="title" label="文件名称" align="center">
                            <template #default="scope">
                                <el-link :href="scope.row.filename" target="_blank" type="success">{{ scope.row.title }}</el-link>
                            </template>
                        </el-table-column>
                        <el-table-column prop="filesize" label="文件大小" align="center"></el-table-column>
                    </el-table>
                </el-card>
                <el-row>
                    <el-col :span="24" style="text-align: center;margin:30px 0px;">
                        <el-button type="success" @click="reviewBigvInfo(1)">通过审核</el-Button>
                        <el-button type="danger" @click="reviewBigvInfo(2)">不通过审核</el-button>
                    </el-col>
                </el-row>
            </el-dialog>
            <el-dialog v-model="dialogVisible_Picture">
                <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/bigv_info/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/cancel_publish_order/create.html
New file
@@ -0,0 +1,860 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8" />
    <include file="common:title" />
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <include file="common:header" />
    <include file="common:element-plus" />
    <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
    <style>
      /* .goods_card .el-tabs__item {
        padding: 0 50px;
        height: 50px;
        line-height: 50px;
        font-size: 16px;
      } */
      .goods_description .el-tabs__item {
        padding: 0 20px;
        height: 40px;
        line-height: 40px;
        font-size: 16px;
      }
      .goods_card>.el-tabs__header .el-tabs__item.is-active {
        color: #fff !important;
        background-color: #35aca6;
      }
    </style>
    <style>
      .crSubItem {
        margin-bottom: 20px;
      }
      .SubTi {
        margin-bottom: 10px;
      }
      .SubTi h4 {
        line-height: 30px;
        margin-right: 10px;
        font-size: 15px;
      }
      .subSec {
        padding: 10px 20px 0px 20px;
        background: #f9f9f9;
        border: 1px solid #e7e7e7;
        border-radius: 2px;
      }
      .tox .tox-edit-area::before {
        border: 0px !important;
      }
      .ml-3 {
        margin-left: 0.75rem;
      }
      .otherParameter .el-textarea__inner {
        height: 120px;
      }
      .num {
        font-size: 12px;
      }
    </style>
    <style>
      .form_submit_box {
        position: fixed;
        bottom: 0px;
        left: 250px;
        right: 0;
        text-align: center;
        padding: 35px 0;
        background-color: #fff;
        z-index: 10;
        border-top: 1px solid #e7e7e7;
      }
      .disdetail .el-dialog__header {
        border-bottom: 1px solid #e7e7e7;
        position: absolute;
        top: 16px;
        left: 16px;
        right: 0px;
        height: 20px;
      }
      .disdetail .SubTi h4 {
        font-weight: bold;
      }
      .disdetail .el-row {
        height: 30px;
        line-height: 30px;
        margin-bottom: 20px;
      }
      .el-tabs__new-tab {
        margin: 10px 10px 10px 10px;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <input type="hidden" id="publish_order_id" value="{$other['id']}" />
      <input type="hidden" id="cancel_id" value="{$other['cancel_id']}" />
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="刊登" two_word="审核刊登单" />
          </el-header>
          <el-main style="position: relative;">
            <el-card style="width:100%;margin-bottom: 103px;">
              <template #header>
                <div class="card-header">
                  <span data-i18n="thirdpartystock_management">审核刊登单</span>
                </div>
              </template>
              <el-card style="max-width:100%;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">基础信息</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                  <el-form-item label="刊登类型">
                    <el-radio-group v-model="publishOrderInfoForm.public_type" disabled class="ml-4">
                      <el-radio :value="1">无属性</el-radio>
                    </el-radio-group>
                  </el-form-item>
                  <template v-if="publishOrderInfoForm.supplier_goods_code!==null">
                    <el-form-item label="选择分类">
                      <el-cascader v-model="publishOrderInfoForm.cate_code" disabled :options="categoryList" clearable style="width:350px;" @change="handleCategoryChange" />
                    </el-form-item>
                    <el-form-item label="品牌名称">
                      <el-select v-model="publishOrderInfoForm.brand_code" disabled placeholder="请选择品牌名称" style="width:350px;">
                        <el-option v-for="freight_attr_item in goodsBrandList" :key="freight_attr_item.attr_code" :label="freight_attr_item.attr_name"
                                   :value="freight_attr_item.attr_code" />
                      </el-select>
                  </template>
                  </el-form-item>
                </el-form>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-if="publishOrderInfoForm.public_type==1">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">商品信息</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                  <el-form-item label="供应商商品编码">
                    <el-input v-model="publishOrderInfoForm.supplier_goods_code" @change="getGoodsInfo" placeholder="请输入供应商商品编码" style="width:350px;"
                              :disabled="publishOrderInfoForm.istemp===1?true:false"></el-input>
                  </el-form-item>
                  <el-form-item label="商品名称">
                    {{publishOrderInfoForm.goods_title_cn}}
                  </el-form-item>
                  <el-form-item label="分销信息">
                    <el-button type="success" @click="showGoodsDisInfo()">查看</el-button>
                  </el-form-item>
                </el-form>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">描述信息</span>
                  </div>
                </template>
                <el-tabs class="goods_description" type="border-card">
                  <el-tab-pane label="英文">
                    <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                      <el-form-item label="标题" :rules="[{required:true}]">
                        {{publishOrderInfoForm.goods_title_en}}
                      </el-form-item>
                      <el-form-item label="描述">
                        <div v-html="publishOrderInfoForm.goods_desc_en"></div>
                      </el-form-item>
                    </el-form>
                  </el-tab-pane>
                  <el-tab-pane label="中文">
                    <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                      <el-form-item label="标题">
                        {{publishOrderInfoForm.goods_title_cn}}
                      </el-form-item>
                      <el-form-item label="描述">
                        <div v-html="publishOrderInfoForm.goods_desc_cn"></div>
                      </el-form-item>
                    </el-form>
                  </el-tab-pane>
                </el-tabs>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">通用图片</span>
                  </div>
                </template>
                <el-row :gutter="20" style="margin-top: 20px;">
                  <el-col :span="24">
                    <div class="grid-content ep-bg-purple">
                      <template v-for="(item,index) in publishOrderPictureList" :key="index">
                        <el-image style="width: 100px; height: 100px" :src="item.url" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" :preview-src-list="[item.url]" />
                      </template>
                    </div>
                  </el-col>
                </el-row>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">取消刊登信息</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left" ref="form" :model="cancelInfo" label-width="100px">
                  <el-form-item label="取消原因">
                    <el-select v-model="cancelInfo.reason_id" placeholder="请选择取消原因" disabled style="width:350px;" clearable>
                      <el-option v-for="item in cancelReasonList" :key="item.id" :label="item.name" :value="item.id" />
                    </el-select>
                  </el-form-item>
                  <el-form-item label="备注">
                    {{cancelInfo.remark}}
                  </el-form-item>
                </el-form>
              </el-card>
            </el-card>
            <div class="form_submit_box">
              <el-button type="success" @click="reviewPublishOrder(1)">通过审核(取消刊登)</el-Button>
              <el-button type="danger" @click="showReviewPublishOrder()">不通过审核(取消刊登)</el-button>
            </div>
          </el-main>
        </el-container>
      </el-container>
      <el-dialog v-model="dialogVisible_Picture">
        <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
      </el-dialog>
      <el-dialog v-model="dialogVisible_reason" style="position: relative;width: 600px;">
        <template #header>
          {{set_nopass_reason_title}}
        </template>
        <el-form label-width="150px" label-position="left" ref="form">
          <el-form-item label="不通过理由">
            <el-input v-model="comments" maxlength="30" style="width: 90%" placeholder="请填写不通过理由" type="textarea" show-word-limit />
          </el-form-item>
          <el-form-item>
            <el-button type="danger" @click="reviewPublishOrder(2)">确定不通过</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
      <el-dialog class="disdetail" v-model="dialog.setGoodsDisInfo" :show-close="true" :close-on-click-modal="false" style="position: relative;width: 70%;">
        <template #header>
          {{set_goods_dis_info_title}}
        </template>
        <div style="max-width:100%;max-height: 850px;overflow-y: scroll;margin-top: 50px;">
          <el-card v-loading="loading.goodsDisInfo" style="max-width:100%;">
            <template #header>商品基本信息</template>
            <el-form label-width="150px" label-position="left" ref="form">
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="商品分类">
                    {{goodsDisInfo.first_cate_name}} > {{goodsDisInfo.second_cate_name}} > {{goodsDisInfo.three_cate_name}}
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="供应商商品编码">
                    {{goodsDisInfo.supplier_goods_code}}
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="商品仓库模式">
                    <template v-if="goodsDisInfo.warehouse_mode==1">自建仓</template>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="对接系统">
                    <template v-if="goodsDisInfo.docking_way==0">无</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="定价方式">
                    <template v-if="goodsDisInfo.price_method==1">自主定价</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="货运属性">
                    {{goodsDisInfo.attr_name}}
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="品牌">
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="商品用途">
                    {{goodsDisInfo.goods_purpose}}
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="销售形式">
                    {{goodsDisInfo.sales_form}}
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="是否侵权">
                    <template v-if="goodsDisInfo.is_tort==0">否</template>
                    <template v-else>是</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="是否停购">
                    <template v-if="goodsDisInfo.is_stop_buy==0">否</template>
                    <template v-else>是</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="负责人">
                    {{goodsDisInfo.recommend_man}}
                  </el-form-item>
                </el-col>
              </el-row>
            </el-form>
          </el-card>
          <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
            <el-tab-pane label="分销区域">
              <el-table :data="disAreaList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="分销区域">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="one_shipment" label="销售模式"></el-table-column>
                <el-table-column prop="one_shipment" label="配送方式">
                  <template #default="scope">
                    <template v-if="scope.row.distribution_area_id.dis_model==1">海外仓配送</template>
                  </template>
                </el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="分销库存">
              <el-table :data="disStockList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="区域">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="third_party_stock_name" label="供应商仓库"></el-table-column>
                <!-- <el-table-column prop="docking_code" label="平台仓库"></el-table-column> -->
                <el-table-column prop="supplier_stock_amount" label="供应商库存量"></el-table-column>
                <el-table-column prop="platform_stock_amount" label="平台库存量"></el-table-column>
                <!-- <el-table-column prop="one_shipment" label="平台库存量同步供应商库存量"></el-table-column>
            <el-table-column prop="one_shipment" label="税号"></el-table-column> -->
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="代发价格">
              <el-table :data="disPriceList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="区域">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="product_name_cn" label="供应商物流产品"></el-table-column>
                <el-table-column label="平台物流产品">Standard Shipping</el-table-column>
                <el-table-column prop="supply_price" label="供货单价"></el-table-column>
                <el-table-column label="平台运费">0.00</el-table-column>
                <el-table-column prop="dis_price" label="分销售价"></el-table-column>
                <el-table-column prop="distribution_area_id" label="币别">
                  <template #default="scope">{{scope.row.distribution_area_id.dis_currency}}</template>
                </el-table-column>
                <el-table-column prop="take_effect_time" label="价格生效时间"></el-table-column>
                <el-table-column prop="package_goods_amount" label="包裹可含商品数量"></el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="退货地址">
              <el-table :data="disReturnGoodsList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="区域" width="80">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="third_party_stock_name" label="退货仓库" width="150"></el-table-column>
                <el-table-column label="退货地址">
                  <template #default="scope">
                    {{scope.row.stock_address}}
                    {{scope.row.stock_city}}
                    {{scope.row.stock_province}}
                    {{scope.row.stock_country_id}}
                    {{scope.row.stock_post_code}}
                  </template>
                </el-table-column>
                <el-table-column prop="receive_man" label="联系人" width="180"></el-table-column>
                <el-table-column prop="tel" label="联系电话" width="150"></el-table-column>
              </el-table>
            </el-tab-pane>
          </el-tabs>
          <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
            <el-tab-pane label="商品描述">
              <el-tabs type="border-card" class="goods_card" style="margin-top: 20px;">
                <el-tab-pane label="英文">
                  <el-form label-width="150px" label-position="left" label-width="100px">
                    <el-form-item label="标题">
                      {{goodsDisInfo.goods_title_en}}
                    </el-form-item>
                    <el-form-item label="关键词">
                      <template v-for="keyword_item in goodsDisInfo.goods_keyword_en">
                        {{keyword_item}};
                      </template>
                    </el-form-item>
                    <el-form-item label="首段描述">
                      <div v-html="goodsDisInfo.goods_desc_en"></div>
                    </el-form-item>
                  </el-form>
                </el-tab-pane>
                <el-tab-pane label="中文">
                  <el-form label-width="150px" label-position="left" label-width="100px">
                    <el-form-item label="标题">
                      {{goodsDisInfo.goods_title_cn}}
                    </el-form-item>
                    <el-form-item label="关键词">
                      <template v-for="keyword_item in goodsDisInfo.goods_keyword_cn">
                        {{keyword_item}};
                      </template>
                    </el-form-item>
                    <el-form-item label="首段描述">
                      <div v-html="goodsDisInfo.goods_desc_cn"></div>
                    </el-form-item>
                  </el-form>
                </el-tab-pane>
              </el-tabs>
            </el-tab-pane>
            <el-tab-pane label="规格参数">
              <el-form label-width="150px" label-position="left" ref="form" :model="goodsSpecForm" label-width="100px">
                <div class="crSubItem">
                  <div class="SubTi">
                    <h4>净规格</h4>
                    <em></em>
                  </div>
                  <div class="subSec">
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="长(cm)">
                          {{goodsDisInfo.goodsSpecInfo.goods_length}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="宽(cm)">
                          {{goodsDisInfo.goodsSpecInfo.goods_width}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="高(cm)">
                          {{goodsDisInfo.goodsSpecInfo.goods_height}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="重量(kg)">
                          {{goodsDisInfo.goodsSpecInfo.goods_weight}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>
                </div>
                <div class="crSubItem">
                  <div class="SubTi">
                    <h4>包装规格</h4>
                    <em></em>
                  </div>
                  <div class="subSec">
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="长(cm)">
                          {{goodsDisInfo.goodsSpecInfo.spec_length}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="宽(cm)">
                          {{goodsDisInfo.goodsSpecInfo.spec_width}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="高(cm)">
                          {{goodsDisInfo.goodsSpecInfo.spec_height}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="重量(kg)">
                          {{goodsDisInfo.goodsSpecInfo.spec_weight}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>
                </div>
                <div class="crSubItem">
                  <div class="SubTi">
                    <h4>装箱规格</h4>
                    <em></em>
                  </div>
                  <div class="subSec">
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="长(cm)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_length}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="宽(cm)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_width}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="高(cm)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_height}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="重量(kg)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_weight}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="箱率">
                          {{goodsDisInfo.goodsSpecInfo.box_pcs}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>
                </div>
              </el-form>
            </el-tab-pane>
            <el-tab-pane label="商品属性">
              <el-card style="max-width:100%;">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">默认属性</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left">
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>采购参数</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="出厂价(USD)">
                            {{goodsDisInfo.goodsAttributeInfo.factory_price}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="分销价(USD)">
                            {{goodsDisInfo.goodsAttributeInfo.distribution_price}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="采购周期(天)">
                            {{goodsDisInfo.goodsAttributeInfo.procurement_cycle}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>商品识别码</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="MPN">
                            {{goodsDisInfo.goodsAttributeInfo.mpn}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="JAN">
                            {{goodsDisInfo.goodsAttributeInfo.jan}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="GTIN(UPC)">
                            {{goodsDisInfo.goodsAttributeInfo.gtin_upc}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="GTIN(ISBN)">
                            {{goodsDisInfo.goodsAttributeInfo.gtin_isbn}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="ISBN(EAN)">
                            {{goodsDisInfo.goodsAttributeInfo.isbn_ean}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>面料/材料</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="主材质">
                            {{goodsDisInfo.goodsAttributeInfo.material_main}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="次材质一">
                            {{goodsDisInfo.goodsAttributeInfo.material_one}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="次材质二">
                            {{goodsDisInfo.goodsAttributeInfo.material_two}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="次材质三">
                            <template v-for="material_three_item in goodsDisInfo.goodsAttributeInfo.material_three">
                              {{material_three_item}};
                            </template>
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="详细材质">
                            {{goodsDisInfo.goodsAttributeInfo.material_detailed}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem otherParameter">
                    <div class="SubTi">
                      <h4>其它参数</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <div class="grid-content ep-bg-purple">
                            <el-form-item label="参考链接">
                              {{goodsDisInfo.goodsAttributeInfo.reference_link}}
                            </el-form-item>
                          </div>
                        </el-col>
                        <el-col :span="8">
                          <div class="grid-content">
                            <el-form-item label="包装内含">
                              {{goodsDisInfo.goodsAttributeInfo.packaging_contains}}
                            </el-form-item>
                          </div>
                        </el-col>
                        <el-col :span="8">
                          <div class="grid-content ep-bg-purple">
                            <el-form-item label="产品卖点">
                              {{goodsDisInfo.goodsAttributeInfo.selling_points}}
                            </el-form-item>
                          </div>
                        </el-col>
                      </el-row>
                      <el-row>
                        <el-col :span="12">
                          <div class="grid-content">
                            <el-form-item label="售后配件">
                              <template v-if="goodsDisInfo.goodsAttributeInfo.after_sales_parts==1">是</template>
                              <template v-else>否</template>
                            </el-form-item>
                          </div>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>电池参数</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="电池型号">
                            {{goodsDisInfo.goodsAttributeInfo.battery_type}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="电池电压(V)">
                            {{goodsDisInfo.goodsAttributeInfo.battery_voltage}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="电池容量(mAh)">
                            {{goodsDisInfo.goodsAttributeInfo.battery_capacity}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                </el-form>
              </el-card>
              <el-card style="max-width:100%;margin-top:20px;">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">扩展属性</span>
                  </div>
                </template>
                <el-row :gutter="20" v-for="(AttributExtendItem,index) in goodsDisInfo.goodsAttributExtendList">
                  <el-col :span="8">
                    <div class="grid-content">
                      <el-form-item label="属性名称">
                        {{AttributExtendItem.define_attribute_name}}
                      </el-form-item>
                    </div>
                  </el-col>
                  <el-col :span="16">
                    <div class="grid-content ep-bg-purple">
                      <el-form-item label="属性值">
                        {{AttributExtendItem.define_attribute_value}}
                      </el-form-item>
                    </div>
                  </el-col>
                </el-row>
              </el-card>
            </el-tab-pane>
            <el-tab-pane label="零售限价">
              <el-table :data="goodsDisInfo.goodsRetailPriceLimitList" border style="width: 100%" :stripe="true">
                <el-table-column label="价格类型" width="180">
                  <template #default="scope">
                    <template v-if="scope.row.price_type==1">日常价</template>
                    <template v-else-if="scope.row.price_type==2">活动价</template>
                  </template>
                </el-table-column>
                <el-table-column label="销售国家">
                  <template #default="scope">
                    {{scope.row.sale_country_code}}
                  </template>
                </el-table-column>
                <el-table-column label="销售平台">
                  <template #default="scope">
                    {{scope.row.sales_platform}}
                  </template>
                </el-table-column>
                <el-table-column label="币别">
                  <template #default="scope">
                    {{scope.row.currency}}
                  </template>
                </el-table-column>
                <el-table-column label="最低零售价">
                  <template #default="scope">
                    {{scope.row.min_retail_price}}
                  </template>
                </el-table-column>
                <el-table-column label="生效时间">
                  <template #default="scope">
                    {{scope.row.start_time}}
                  </template>
                </el-table-column>
                <el-table-column label="失效时间">
                  <template #default="scope">
                    {{scope.row.end_time}}
                  </template>
                </el-table-column>
                </el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="商品标签">
              <el-table :data="goodsDisInfo.goodsLabelList" border style="width: 100%" :stripe="true">
                <el-table-column prop="label_type" label="标签类型" width="280"></el-table-column>
                <el-table-column prop="goods_label" label="商品标签"></el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="限制分销平台">
              <el-row :gutter="20">
                <el-col :span="24">
                  <div class="grid-content">
                    <el-form-item label="是否限制分销平台">
                      <template v-if="goodsDisInfo.is_limit_dis_platform==1">是</template>
                      <template v-else>否</template>
                    </el-form-item>
                  </div>
                </el-col>
              </el-row>
              <el-table v-if="goodsDisInfo.is_limit_dis_platform==1" :data="goodsDisInfo.goodsLimitDisPlatformList" border style="width: 100%" :stripe="true">
                <el-table-column prop="platform_name" label="限制分销平台"></el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="商品图片">
              <el-row :gutter="20">
                <el-col :span="24">
                  <div class="grid-content">
                    <el-button :type="pictureStatuslist[0]==true?'primary':''" @click="setPictureStatus(0)">全部(<span class="num">{{goodsPictureCount.type0??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[1]==true?'primary':''" @click="setPictureStatus(1)">原图(<span class="num">{{goodsPictureCount.type1??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[2]==true?'primary':''" @click="setPictureStatus(2)">普修图(<span class="num">{{goodsPictureCount.type2??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[3]==true?'primary':''" @click="setPictureStatus(3)">精修图(<span class="num">{{goodsPictureCount.type3??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[4]==true?'primary':''" @click="setPictureStatus(4)">主图(<span class="num">{{goodsPictureCount.type4??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[5]==true?'primary':''" @click="setPictureStatus(5)">包装图(<span class="num">{{goodsPictureCount.type5??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[6]==true?'primary':''" @click="setPictureStatus(6)">图片尺寸1000(<span class="num">{{goodsPictureCount.type6??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[7]==true?'primary':''" @click="setPictureStatus(7)">图片尺寸1600(<span class="num">{{goodsPictureCount.type7??0}}</span>)</el-button>
                  </div>
                </el-col>
              </el-row>
              <div>
                <el-image v-for="(img,index) in goodsPictureList" style="width: 100px; height: 100px" :src="img.url" @click="previewPictureCard(img)" :fit="fit" />
              </div>
            </el-tab-pane>
          </el-tabs>
          <div style="text-align: center; margin: 20px 0px;" v-if="!loading.dis_loading">
            <el-button @click="dialog.setGoodsDisInfo=false">关闭</el-Button>
          </div>
        </div>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/cancel_publish_order/create.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/cancel_publish_order/index.html
New file
@@ -0,0 +1,105 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <style>
      .el-table th.el-table__cell,
      .el-table td.el-table__cell,
      .el-select,
      .el-select__wrapper {
        position: unset;
      }
      .el-image-viewer__img {
        width: 50%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="取消刊登审核" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="goods_management">取消刊登审核</span>
                </div>
              </template>
              <el-form :model="searchdata" label-width="auto">
                <el-input v-model="searchdata.platform_goods_code" placeholder="平台商品编码" style="width: 200px; margin-right: 10px;"></el-input>
                <el-input v-model="searchdata.supplier_goods_code" placeholder="供应商商品编码" style="width: 200px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="searchPublishOrder()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="PublishOrderList" v-loading="loading.loading" border style="width: 100%;position: relative;z-index: 0 !important;" ref="tableRef">
                <el-table-column align="center" prop="picture" label="图片" show-overflow-tooltip width="100">
                  <template #default="scope">
                    <el-image :src="scope.row.picture" style="width: 60px; height: 60px;" hide-on-click-modal="true" :z-index="99" :preview-src-list="[scope.row.picture]" />
                  </template>
                </el-table-column>
                <el-table-column prop="publish_order_code" label="刊登单号" show-overflow-tooltip width="150"></el-table-column>
                <el-table-column prop="public_type" label="刊登类型" show-overflow-tooltip width="180">
                  <template #default="scope">
                    <template v-if="scope.row.public_type == 1">无属性</template>
                    <template v-else-if="scope.row.public_type == 2">多属性</template>
                  </template>
                </el-table-column>
                <el-table-column prop="goods_title_cn" label="中文标题"></el-table-column>
                <el-table-column prop="supplier_goods_code" label="供应商商品编码" width="150"></el-table-column>
                <el-table-column label="取消刊登原因" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.reason_id == 1">不合作</template>
                    <template v-else-if="scope.row.reason_id == 2">商品更新换代</template>
                    <template v-else-if="scope.row.reason_id == 3">商品侵权</template>
                    <template v-else-if="scope.row.reason_id == 4">商品收货问题严重</template>
                    <template v-else-if="scope.row.reason_id == 5">其他</template>
                  </template>
                </el-table-column>
                <el-table-column label="审核状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.status == 0">未审核</template>
                    <template v-else-if="scope.row.status == 1">已审核</template>
                  </template>
                </el-table-column>
                <el-table-column prop="remark" label="备注" show-overflow-tooltip width="180"></el-table-column>
                <el-table-column prop="add_time" label="创建时间" width="180"></el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button type="primary" @click="editPublishOrder(scope.row.id,scope.row.cancel_id)">审核</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
        </el-container>
      </el-container>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/cancel_publish_order/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/category/index.html
New file
@@ -0,0 +1,264 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script>
            $(function () {
                $(".el-sub-menu__title").hover(function () {
                    $(this).addClass('hovercurrent');
                }, function () {
                    $(this).removeClass('hovercurrent');
                });
            });
        </script>
        <style>
            .gap-4 {
                grid-gap: 1rem;
                gap: 1rem;
            }
            .flex-wrap {
                flex-wrap: wrap;
            }
            .flex {
                display: flex;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide.one.text}" two_word="{$guide.two.text}" />
                    </el-header>
                    <el-main>
                        <div class="flex-wrap gap-4">
                            <el-row :gutter="20">
                                <el-col :span="6">
                                    <el-card>
                                        <template #header>
                                            <div class="card-header">
                                                <span>平台列表</span>
                                                &emsp;
                                                <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                         @click="createPlatform(-1)">添加</el-link>
                                            </div>
                                        </template>
                                        <el-table :data="platformList" border style="width: 100%">
                                            <el-table-column label="平台名称" prop="docking_platform_name"></el-table-column>
                                            <el-table-column label="平台编码" prop="cate_code" align="center"></el-table-column>
                                            <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                            <el-table-column label="操作选项" width="160" align="center" fixed="right">
                                                <template #default="scope">
                                                    <el-button size="small" type="primary" @click="createPlatform(scope.$index)">编辑</el-button>
                                                    <el-button size="small" @click="setOne(scope.$index)">管理下级</el-button>
                                                </template>
                                            </el-table-column>
                                        </el-table>
                                    </el-card>
                                </el-col>
                                <el-col :span="6">
                                    <el-card>
                                        <template #header>
                                            <div class="card-header">
                                                <span>一级分类列表</span>
                                                &emsp;
                                                <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                         @click="createOne(-1)">添加</el-link>
                                            </div>
                                        </template>
                                        <el-table :data="oneList" border style="width: 100%">
                                            <el-table-column label="一级分类名称" prop="cate_name"></el-table-column>
                                            <el-table-column label="一级分类编码" prop="cate_code" align="center"></el-table-column>
                                            <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                            <el-table-column label="操作选项" width="160" align="center" fixed="right">
                                                <template #default="scope">
                                                    <el-button size="small" type="primary" @click="createOne(scope.$index)">编辑</el-button>
                                                    <el-button size="small" @click="setTwo(scope.$index)">管理下级</el-button>
                                                </template>
                                            </el-table-column>
                                        </el-table>
                                    </el-card>
                                </el-col>
                                <el-col :span="6">
                                    <el-card>
                                        <template #header>
                                            <div class="card-header">
                                                <span>二级分类列表</span>
                                                <template v-if="oneList[currOneIndex]">({{oneList[currOneIndex].cate_name}})</template>
                                                &emsp;
                                                <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                         @click="createTwo(-1)">添加</el-link>
                                            </div>
                                        </template>
                                        <el-table :data="twoList" border style="width: 100%">
                                            <el-table-column label="二级分类名称" prop="cate_name">
                                                <template #default="scope">
                                                    {{scope.row.cate_name}}
                                                </template>
                                            </el-table-column>
                                            <el-table-column label="二级分类编码" prop="cate_code" align="center"></el-table-column>
                                            <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                            <el-table-column label="操作选项" width="160" align="center" fixed="right">
                                                <template #default="scope">
                                                    <el-button size="small" type="primary" @click="createTwo(scope.$index)">编辑</el-button>
                                                    <el-button size="small" @click="setThree(scope.$index)">管理下级</el-button>
                                                </template>
                                            </el-table-column>
                                        </el-table>
                                    </el-card>
                                </el-col>
                                <el-col :span="6">
                                    <el-card>
                                        <template #header>
                                            <div class="card-header">
                                                <span>三级分类列表</span>
                                                <template v-if="oneList[currOneIndex]">
                                                    ({{oneList[currOneIndex].cate_name}}
                                                    <template v-if="twoList[currTwoIndex]">/{{twoList[currTwoIndex].cate_name}})</template>
                                                </template>
                                                &emsp;
                                                <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                         @click="createThree(-1)">添加</el-link>
                                            </div>
                                        </template>
                                        <el-table :data="threeList" border style="width: 100%">
                                            <el-table-column label="三级分类名称" prop="cate_name"></el-table-column>
                                            <el-table-column label="三级分类编码" prop="cate_code" align="center"></el-table-column>
                                            <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                            <el-table-column label="操作选项" width="100" align="center" fixed="right">
                                                <template #default="scope">
                                                    <el-button size="small" type="primary" @click="createThree(scope.$index)">编辑</el-button>
                                                </template>
                                            </el-table-column>
                                        </el-table>
                                    </el-card>
                                </el-col>
                            </el-row>
                        </div>
                    </el-main>
                </el-container>
            </el-container>
            <el-dialog :title="createPlatformTitle" v-model="dialogVisible.platform" :show-close="true" :before-close="platformCloseForm" width="600px">
                <el-form :rules="platformRules" ref="platformForm" :model="platformForm" label-width="150px">
                    <el-form-item label="对接平台名称" prop="docking_platform_name">
                        <el-input v-model="platformForm.docking_platform_name" placeholder="请输入对接平台名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item label="平台编码" prop="cate_code">
                        <el-input v-model="platformForm.cate_code" placeholder="请输入平台编码" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="platformForm.id>0" label="排序值">
                        <el-input-number v-model="platformForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="savePlatform">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="platformCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
            <!-- 添加一级分类 -->
            <el-dialog :title="createOneTitle" v-model="dialogVisible.one" :show-close="true" :before-close="oneCloseForm" width="600px">
                <el-form :rules="oneRules" ref="oneForm" :model="oneForm" label-width="100px">
                    <el-form-item label="分类名称" prop="cate_name">
                        <el-input v-model="oneForm.cate_name" placeholder="请输入分类名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item label="分类编码" prop="cate_code">
                        <el-input v-model="oneForm.cate_code" placeholder="请输入分类编码" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="oneForm.id>0" label="排序值">
                        <el-input-number v-model="oneForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveOne">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="oneCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
            <!-- 添加二级分类 -->
            <el-dialog :title="createTwoTitle" v-model="dialogVisible.two" :show-close="true" :before-close="twoCloseForm" width="600px">
                <el-form :rules="twoRules" ref="twoForm" :model="twoForm" label-width="100px">
                    <el-form-item label="分类名称" prop="cate_name">
                        <el-input v-model="twoForm.cate_name" placeholder="请输入分类名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item label="分类编码" prop="cate_code">
                        <el-input v-model="twoForm.cate_code" placeholder="请输入分类编码" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="twoForm.id>0" label="排序值">
                        <el-input-number v-model="twoForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveTwo">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="twoCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
            <!-- 添加三级分类 -->
            <el-dialog :title="createThreeTitle" v-model="dialogVisible.three" :show-close="true" :before-close="threeCloseForm" width="600px">
                <el-form :rules="threeRules" ref="threeForm" :model="threeForm" label-width="100px">
                    <el-form-item label="分类名称" prop="cate_name">
                        <el-input v-model="threeForm.cate_name" placeholder="请输入分类名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item label="分类编码" prop="cate_code">
                        <el-input v-model="threeForm.cate_code" placeholder="请输入分类编码" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="threeForm.id>0" label="排序值">
                        <el-input-number v-model="threeForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveThree">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="threeCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script language="JavaScript">
        const viewPath = '{$viewPath}';
    </script>
    <script src="/static/admin/js/category/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/common/bodyheader.html
New file
@@ -0,0 +1,31 @@
<div class="layui-header">
  <!-- 头部区域 -->
  <ul class="layui-nav layui-layout-left">
    <!--<li class="layui-nav-item layadmin-flexible" lay-unselect=""> <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩"> <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i> </a> </li>-->
    <li class="layui-nav-item layui-hide-xs"> <a href="{:url('/admin/index/index')}" title="首页"> <i class="layui-icon layui-icon-home"></i> </a> </li>
      <li class="layui-nav-item layui-hide-xs">
        <a href="{:url('/admin/funconfig/index')}" title="功能设置">
          <i class="layui-icon layui-icon-set"></i>
        </a>
      </li>
    <span class="layui-nav-bar"></span>
  </ul>
  <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">
    <li class="layui-nav-item" lay-unselect=""> <a class="userbaseinfo" href="javascript:;"> <cite><notempty name='cinfo.real_name'>{$cinfo.real_name}
        <else/>
        {$cinfo.user_name}</notempty>
      </cite> <span class="layui-nav-more"></span></a>
      <dl class="layui-nav-child layui-anim layui-anim-upbit">
        <dd><a href="{:url('/admin/admin/edit')}">基本资料</a></dd>
        <dd><a href="{:url('/admin/admin/password')}">修改密码</a></dd>
        <hr>
        <dd layadmin-event="logout" style="text-align: center;"><a href="{:url('/admin/login/logout')}">退出</a></dd>
      </dl>
    </li>
    <li class="layui-nav-item" lay-unselect="" style="width:10px;"></li>
    <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect=""> <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a> </li>
    <span class="layui-nav-bar"></span>
  </ul>
</div>
app/admin/view/common/element-plus.html
New file
@@ -0,0 +1,14 @@
<link rel="stylesheet" href="/static/element/index.css" media="all">
<link rel="stylesheet" href="/static/element/index_other.css" media="all">
<link rel="stylesheet" href="/static/supplier/css/reset.css" media="all">
<script type="text/javascript" src="/static/vue/vue.global.prod.js"></script>
<script type="text/javascript" src="/static/element/index.full.js"></script>
<script type="text/javascript" src="/static/element/zh-cn.js"></script>
<script type="text/javascript" src="/static/element/icons-vue.js"></script>
<script type="text/javascript" src="/static/vue/axios.min.js"></script>
<script type="text/javascript" src="/static/vue/qs.min.js"></script>
<script type="text/javascript" src="/static/vue/moment.min.js"></script>
<script type="text/javascript" src="/static/vue/request.js"></script>
<script type="text/javascript" src="/static/jquery/jquery-3.7.1.min.js"></script>
<!-- 语言切换 -->
<!-- <script src="/static/js/language/language.js"></script> -->
app/admin/view/common/guide.html
New file
@@ -0,0 +1,50 @@
<div style="display: flex;align-items: center;">
    <!-- 控制左侧菜单收放 -->
    <el-icon @click="show_side_menu()" size="18" title="收放左侧菜单">
        <template v-if="side_menu_show_type==1">
            <fold></fold>
        </template>
        <template v-if="side_menu_show_type==2">
            <expand></expand>
        </template>
    </el-icon>
    &emsp;
    <el-breadcrumb separator-icon="ArrowRightBold">
        <el-breadcrumb-item><span data-i18n="home_page">首页</span></el-breadcrumb-item>
        <el-breadcrumb-item>[one_word]</el-breadcrumb-item>
        <el-breadcrumb-item>[two_word]</el-breadcrumb-item>
    </el-breadcrumb>
</div>
<div class="guide_right_item">
    <!-- 默认语言 -->
    <input type="hidden" id="languageType" value="{$_COOKIE.think_lang|default='zh-cn'}">
    <el-dropdown>
        <el-button type="default">
            {$_COOKIE.think_lang|getLanguage}
            <el-icon class="el-icon--right"><arrow-down /></el-icon>
        </el-button>
        <template #dropdown>
            <el-dropdown-menu>
                <el-dropdown-item @click="switchLanguage('zh-cn')">中文</el-dropdown-item>
                <el-dropdown-item @click="switchLanguage('en-us')">English</el-dropdown-item>
            </el-dropdown-menu>
        </template>
    </el-dropdown>
    &emsp;&emsp;
    <el-link href="https://element-plus.org" :underline="false">
        <el-icon size="20">
            <bell></bell>
        </el-icon>
    </el-link>
    &emsp;&emsp;
    <el-link href="https://element-plus.org" :underline="false">
        <el-icon size="20">
            <message></message>
        </el-icon>
    </el-link>
    &emsp;&emsp;
    <el-link type="danger" href="{:url('/admin/login/logout')}" icon="SwitchButton" :underline="false"
        style="font-size: 18px;">
        <span data-i18n="sign_out">退出</span>
    </el-link>
</div>
app/admin/view/common/header.html
New file
@@ -0,0 +1,7 @@
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/static/supplier/css/reset.css?t=20180921-1" media="all">
<link id="layuicss-layuiAdmin" rel="stylesheet" href="/static/admin/css/admin.css?v=1.1.0 pro-1" media="all">
<link rel="stylesheet" href="/static/admin/css/layui.css?t=20180921-3" media="all">
<script type="text/javascript" src="/static/jquery/jquery-3.7.1.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.config.js"></script>
<script type="text/javascript" src="/static/admin/js/function.js"></script>
app/admin/view/common/left.html
New file
@@ -0,0 +1,66 @@
<div class="layui-side layui-side-menu">
  <div class="layui-side-scroll">
    <div class="layui-logo" lay-href=""> <span><a href="{:url('/supplier/index/index')}"><img id="adminlogo" src="{$cinfo.logourl|default='/static/supplier/images/logo.png'}" style="height: 45px;" /></a></span> </div>
    <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">
      <volist name="menulist" id="menu">
        <li class="layui-nav-item"> <a href="javascript:;" class="nav-top-item" lay-tips="{$menu.info.parent}"> <i class="layui-icon {$menu.info.parentid|getlayuiicon}"></i> <cite>{$menu.info.parent}</cite> <span class="layui-nav-more"></span></a> <span class="layui-nav-bar"></span>
          <dl class="layui-nav-child">
            <volist name="menu.list" id="item">
                      <dd> <a href="{$item['url']}" id="{$item['id']}">{$item['title']}</a> </dd>
            </volist>
          </dl>
        </li>
      </volist>
    </ul>
  </div>
</div>
<div class="layui-layer layui-layer-tips" id="left-layui-layer" type="tips" showtime="-1" contype="object" style="z-index: 19891081; position: absolute; display:none;">
  <div id="" class="layui-layer-content"></div>
  <span class="layui-layer-setwin"></span></div>
<input type="hidden" id="t" value="{$menuitem}" />
<!-- <el-menu
        background-color="#545c64"
        class="el-menu-vertical-demo"
        :default-active="active"
        text-color="#fff"
        active-text-color="#fff"
      >
      <div class="left_logo_item">
        <el-image style="width: 55px; height: 55px" src="/static/supplier/images/logo.png"/>
    </div>
        <el-sub-menu index="1">
          <template #title>
            <span class="layui-nav-bar"></span>
            <el-icon><location /></el-icon>
            <span>Navigator One</span>
          </template>
            <el-menu-item index="supplier-index"><el-link href="/admin/supplier/index.html" :underline="false">item one</el-link></el-menu-item>
            <el-menu-item index="admin-index"><el-link href="/admin/admin/index.html" :underline="false">item two</el-link></el-menu-item>
            <el-menu-item index="1-3">item three</el-menu-item>
        </el-sub-menu>
        <el-sub-menu index="2">
          <template #title>
            <span class="layui-nav-bar"></span>
            <el-icon><location /></el-icon>
            <span>Navigator Two</span>
          </template>
            <el-menu-item index="2-1">item one</el-menu-item>
            <el-menu-item index="2-2">item two</el-menu-item>
        </el-sub-menu>
        <el-menu-item index="3">
          <el-icon><document /></el-icon>
          <span>Navigator Three</span>
        </el-menu-item>
        <el-menu-item index="4">
          <el-icon><setting /></el-icon>
          <span>Navigator Four</span>
        </el-menu-item>
      </el-menu>
<input type="hidden" id="t" value="supplier-index"> -->
app/admin/view/common/side_menu.html
New file
@@ -0,0 +1,41 @@
<el-menu
    background-color="#545c64"
    class="el-menu-vertical-demo"
    :default-active="menu_index"
    text-color="#fff"
    active-text-color="#fff"
    :collapse="side_menu_collapse">
    <div class="left_logo_item">
        <img id="adminlogo" src="{$cinfo.logourl|default='/static/images/logo.png'}" />
    </div>
    <!-- <div class="title_info">{$cinfo['supplier_name']}</div> -->
    <volist name="menulist[0]" id="menus">
        <if condition="is_array($menulist[$menus['id']])">
            <el-sub-menu index="{$menus.menu_index}">
                <template #title>
                    <span class="menu-bar"></span>
                    <el-icon>
                        <{$menus.menu_icon} />
                    </el-icon>
                    <span>{$menus.title}</span>
                </template>
                <volist name="menulist[$menus['id']]" id="menu">
                    <el-menu-item index="{$menu.menu_index}" @click="goto_menu('{$menu.menu_url}')">
                        {$menu.title}
                        <!-- <el-link href="{$menu.menu_url}" :underline="false">{$menu.title}</el-link> -->
                    </el-menu-item>
                </volist>
            </el-sub-menu>
            <else />
            <el-menu-item index="{$menus.menu_index}" @click="goto_menu('{$menus.menu_url}')">
                <el-icon>
                    <{$menus.menu_icon} />
                </el-icon>
                <template #title>{$menus.title}</template>
                <!-- <a href="{$menus.menu_url}"><span>{$menus.title}</span></a> -->
                <!-- <el-link href="{$menus.menu_url}" :underline="false">{$menus.title}</el-link> -->
            </el-menu-item>
        </if>
    </volist>
</el-menu>
<input type="hidden" id="menu_index" value="{$menuitem}" />
app/admin/view/common/title.html
New file
@@ -0,0 +1 @@
<title>正和仓-总管理后台</title>
app/admin/view/country_code/index.html
New file
@@ -0,0 +1,218 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script>
            $(function () {
                $(".el-sub-menu__title").hover(function () {
                    $(this).addClass('hovercurrent');
                }, function () {
                    $(this).removeClass('hovercurrent');
                });
            });
        </script>
        <style>
            .gap-4 {
                grid-gap: 1rem;
                gap: 1rem;
            }
            .flex-wrap {
                flex-wrap: wrap;
            }
            .flex {
                display: flex;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide.one.text}" two_word="{$guide.two.text}" />
                    </el-header>
                    <el-main>
                        <div class="flex flex-wrap gap-4">
                            <el-card style="width: 32%">
                                <template #header>
                                    <div class="card-header">
                                        <span>国家列表</span>
                                        &emsp;
                                        <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                 @click="createCountry(-1)">添加</el-link>
                                    </div>
                                </template>
                                <el-table :data="countryList" border style="width: 100%">
                                    <el-table-column label="国家名称" prop="cate_name"></el-table-column>
                                    <el-table-column label="国家代码" prop="cate_code" align="center" width="100"></el-table-column>
                                    <el-table-column label="显示/隐藏" width="100" align="center">
                                        <template #default="scope">
                                            <el-switch v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                       :inactive-value="0" inline-prompt active-text="显示" inactive-text="隐藏" @change="updateShow(scope.row)" />
                                        </template>
                                    </el-table-column>
                                    <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                    <el-table-column label="操作选项" width="200" align="center">
                                        <template #default="scope">
                                            <el-button size="small" type="primary" @click="createCountry(scope.$index)">编辑</el-button>
                                            <el-button size="small" @click="setProvince(scope.$index)">管理省份</el-button>
                                        </template>
                                    </el-table-column>
                                </el-table>
                            </el-card>
                            <el-card style="width: 32%">
                                <template #header>
                                    <div class="card-header">
                                        <span>省份列表</span>
                                        <template v-if="countryList[currCountryIndex]">({{countryList[currCountryIndex].cate_name}})</template>
                                        &emsp;
                                        <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                 @click="createProvince(-1)">添加</el-link>
                                    </div>
                                </template>
                                <el-table :data="provinceList" border style="width: 100%">
                                    <el-table-column label="省份名称" prop="cate_name">
                                        <template #default="scope">
                                            {{scope.row.cate_name}}
                                        </template>
                                    </el-table-column>
                                    <el-table-column label="省份代码" prop="cate_code" align="center"></el-table-column>
                                    <el-table-column label="显示/隐藏" width="100" align="center">
                                        <template #default="scope">
                                            <el-switch v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                       :inactive-value="0" inline-prompt active-text="显示" inactive-text="隐藏" @change="updateShow(scope.row)" />
                                        </template>
                                    </el-table-column>
                                    <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                    <el-table-column label="操作选项" width="200" align="center">
                                        <template #default="scope">
                                            <el-button size="small" type="primary" @click="createProvince(scope.$index)">编辑</el-button>
                                            <el-button size="small" @click="setCity(scope.$index)">管理城市</el-button>
                                        </template>
                                    </el-table-column>
                                </el-table>
                            </el-card>
                            <el-card style="width: 32%">
                                <template #header>
                                    <div class="card-header">
                                        <span>城市列表</span>
                                        <template v-if="countryList[currCountryIndex]">
                                            ({{countryList[currCountryIndex].cate_name}}
                                            <template v-if="provinceList[currProvinceIndex]">/{{provinceList[currProvinceIndex].cate_name}})</template>
                                        </template>
                                        &emsp;
                                        <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                                 @click="createCity(-1)">添加</el-link>
                                    </div>
                                </template>
                                <el-table :data="cityList" border style="width: 100%">
                                    <el-table-column label="城市名称" prop="cate_name"></el-table-column>
                                    <el-table-column label="显示/隐藏" width="100" align="center">
                                        <template #default="scope">
                                            <el-switch v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                       :inactive-value="0" inline-prompt active-text="显示" inactive-text="隐藏" @change="updateShow(scope.row)" />
                                        </template>
                                    </el-table-column>
                                    <el-table-column label="排序" prop="order_id" align="center" width="80"></el-table-column>
                                    <el-table-column label="操作选项" width="200" align="center">
                                        <template #default="scope">
                                            <el-button size="small" type="primary" @click="createCity(scope.$index)">编辑</el-button>
                                        </template>
                                    </el-table-column>
                                </el-table>
                            </el-card>
                        </div>
                    </el-main>
                </el-container>
            </el-container>
            <!-- 添加国家 -->
            <el-dialog :title="createCountryTitle" v-model="dialogVisible.country" :show-close="true" :before-close="countryCloseForm" width="600px">
                <el-form :rules="countryRules" ref="countryForm" :model="countryForm" label-width="100px">
                    <el-form-item label="国家名称" prop="cate_name">
                        <el-input v-model="countryForm.cate_name" placeholder="请输入国家名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item label="国家编码" prop="cate_code">
                        <el-input v-model="countryForm.cate_code" placeholder="请输入国家编码" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="countryForm.id>0" label="排序值">
                        <el-input-number v-model="countryForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveCountry">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="countryCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
            <!-- 添加省份 -->
            <el-dialog :title="createProvinceTitle" v-model="dialogVisible.province" :show-close="true" :before-close="provinceCloseForm" width="600px">
                <el-form :rules="provinceRules" ref="provinceForm" :model="provinceForm" label-width="100px">
                    <el-form-item label="省份名称" prop="cate_name">
                        <el-input v-model="provinceForm.cate_name" placeholder="请输入省份名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item label="省份编码" prop="cate_code">
                        <el-input v-model="provinceForm.cate_code" placeholder="请输入省份编码" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="provinceForm.id>0" label="排序值">
                        <el-input-number v-model="provinceForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveProvince">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="provinceCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
            <!-- 添加城市 -->
            <el-dialog :title="createCityTitle" v-model="dialogVisible.city" :show-close="true" :before-close="cityCloseForm" width="600px">
                <el-form :rules="cityRules" ref="cityForm" :model="cityForm" label-width="100px">
                    <el-form-item label="城市名称" prop="cate_name">
                        <el-input v-model="cityForm.cate_name" placeholder="请输入城市名称" style="width: 300px;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="cityForm.id>0" label="排序值">
                        <el-input-number v-model="cityForm.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveCity">
                            <span v-if="!ifsubmit">保 存</span>
                            <span v-else>提 交 中...</span>
                        </el-button><el-button @click="cityCloseForm">取消</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script language="JavaScript">
        const viewPath = '{$viewPath}';
    </script>
    <script src="/static/admin/js/country_code/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/currency/index.html
New file
@@ -0,0 +1,94 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="{$other.title}" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">{$other.title}</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入货币编码或名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="currency_code" label="货币编码"></el-table-column>
                <el-table-column prop="currency_name" label="货币名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="货币编码">
            <el-input v-model="Add_form.currency_code" placeholder="请输入货币编码" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="货币名称">
            <el-input v-model="Add_form.currency_name" placeholder="请输入货币名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script language="JavaScript">
    const viewPath = '{$viewPath}';
  </script>
  <script src="/static/admin/js/currency/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/deliver_region/index.html
New file
@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="分销区域管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">分销区域管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入分销区域编码或名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true" ref="tableRef">
                <el-table-column prop="deliver_region_id" label="编号" width="80"></el-table-column>
                <el-table-column prop="region_code" label="分销区域编码"></el-table-column>
                <el-table-column prop="region_name" label="分销区域名称"></el-table-column>
                <el-table-column prop="region_currency" label="分销区域币别">
                  <template #default="scope">
                    {{scope.row.currency_code}} {{scope.row.region_currency}}
                  </template>
                </el-table-column>
                <el-table-column prop="order_id" label="语言"></el-table-column>
                <el-table-column prop="language" label="排序">
                  <template #default="scope">
                    {{getCurrencyLanguage(scope.row.language)}}
                  </template>
                </el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="200" :align="alignValue(300)">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="分销区域编码">
            <el-input v-model="Add_form.region_code" placeholder="请输入分销区域编码" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="分销区域名称">
            <el-input v-model="Add_form.region_name" placeholder="请输入分销区域名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="选择币种">
            <el-select v-model="Add_form.currency_id" @change="setCurrency" placeholder="选择对接系统" size="large" style="width: 260px">
              <el-option v-for="item in currencyList" :key="item.id" :label="item.currency_name" :value="item.id" />
            </el-select>
          </el-form-item>
          <!-- <el-form-item label="分销区域币别">
            <el-input v-model="Add_form.region_currency" placeholder="请输入分销区域币别" style="width:260px;"></el-input>
          </el-form-item> -->
          <el-form-item label="选择对应语言">
            <el-select v-model="Add_form.language" placeholder="选择语言" size="large" style="width: 260px">
              <el-option v-for="item in languageOptions" :key="item.value" :label="item.label" :value="item.value" />
            </el-select>
          </el-form-item>
          <el-form-item v-if="Add_form.deliver_region_id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/deliver_region/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/deliver_region_logistics/index.html
New file
@@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="utf-8">
  <include file="common:title" />
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <include file="common:header" />
  <include file="common:element-plus" />
</head>
<body>
<div id="vue_item" v-cloak>
  <el-container>
    <el-aside class="el-menu-container" :width="el_aside_width">
      <!-- 侧边菜单 -->
      <include file="common:side_menu" />
    </el-aside>
    <el-container>
      <el-header>
        <include file="common:guide" one_word="基础信息配置" two_word="分销区域物流管理" />
      </el-header>
      <el-main>
        <el-card style="width: 100%">
          <template #header>
            <div class="card-header"><span data-i18n="logisticsProduct_management">分销区域物流管理</span>
              &emsp;
              <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                      data-i18n="add">添加</span></el-link>
            </div>
          </template>
          <el-form label-width="auto">
            <el-input v-model="searchdata.kw" placeholder="请输入分销区域物流名称" style="width: 300px"></el-input>
            &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
          </el-form>
          <br />
          <el-table :data="list" border style="width: 100%" :stripe="true">
            <el-table-column prop="id" label="编号" width="80"></el-table-column>
            <el-table-column prop="region_code" label="分销区域编码"></el-table-column>
            <el-table-column prop="region_name" label="分销区域名称"></el-table-column>
            <el-table-column prop="name" label="分销区域物流名称"></el-table-column>
            <el-table-column label="是否开启">
              <template #default="scope">
                {{getIsOpen(scope.row.is_open)}}
              </template>
            </el-table-column>
            <el-table-column prop="order_id" label="排序"></el-table-column>
            <el-table-column label="操作选项">
              <template #default="scope">
                <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
              </template>
            </el-table-column>
          </el-table>
          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                         :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
          </el-pagination>
        </el-card>
      </el-main>
      <!-- <el-footer>Footer</el-footer> -->
    </el-container>
  </el-container>
  <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
    <el-form ref="Add_form" :model="Add_form" label-width="150px">
      <el-form-item label="分销区域">
        <el-select v-model="Add_form.deliver_region_id" style="width:600px;" placeholder="请选择">
          <el-option v-for="deliverRegionItem in deliverRegionList" :key="deliverRegionItem.deliver_region_id" :label="deliverRegionItem.region_code+' - '+deliverRegionItem.region_name" :value="deliverRegionItem.deliver_region_id" />
        </el-select>
      </el-form-item>
      <el-form-item label="分销区域物流名称">
        <el-input v-model="Add_form.name" placeholder="请输入分销区域物流名称" style="width:260px;"></el-input>
      </el-form-item>
      <el-form-item label="是否开启">
        <el-switch
                v-model="Add_form.is_open"
                active-color="#13ce66"
                inactive-color="#ff4949"
                active-value="1"
                inactive-value="2">
        </el-switch>
      </el-form-item>
      <el-form-item v-if="Add_form.id>0" label="排序值">
        <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
      </el-form-item>
      <el-form-item>
        <el-button :loading="loading" type="primary" @click="submit">
          <span v-if="!loading">保 存</span>
          <span v-else>提 交 中...</span>
        </el-button>
        <el-button @click="dialog.addDialogStatus=false">取消</el-button>
      </el-form-item>
    </el-form>
  </el-dialog>
</div>
</body>
<!-- 共用的方法 -->
<script src="/static/vue/mixin_admin.js"></script>
<script src="/static/admin/js/deliver_region_logistics/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/dis_platform/index.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="分销平台管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">分销平台管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入分销平台名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="platform_name" label="分销平台名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="分销平台名称">
            <el-input v-model="Add_form.platform_name" placeholder="请输入分销平台名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/dis_platform/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goods/create.html
New file
@@ -0,0 +1,748 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8" />
    <include file="common:title" />
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <include file="common:header" />
    <include file="common:element-plus" />
    <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
    <style>
      /* .goods_card .el-tabs__item {
        padding: 0 50px;
        height: 50px;
        line-height: 50px;
        font-size: 16px;
      } */
      .goods_description .el-tabs__item {
        padding: 0 20px;
        height: 40px;
        line-height: 40px;
        font-size: 16px;
      }
      .goods_card>.el-tabs__header .el-tabs__item.is-active {
        color: #fff !important;
        background-color: #35aca6;
      }
    </style>
    <style>
      .crSubItem {
        margin-bottom: 20px;
      }
      .SubTi {
        margin-bottom: 10px;
      }
      .SubTi h4 {
        line-height: 30px;
        margin-right: 10px;
        font-size: 15px;
      }
      .subSec {
        padding: 10px 20px 0px 20px;
        background: #f9f9f9;
        border: 1px solid #e7e7e7;
        border-radius: 2px;
      }
      .tox .tox-edit-area::before {
        border: 0px !important;
      }
      .ml-3 {
        margin-left: 0.75rem;
      }
      .otherParameter .el-textarea__inner {
        height: 120px;
      }
      .num {
        font-size: 12px;
      }
    </style>
    <style>
      .form_submit_box {
        position: fixed;
        bottom: 0px;
        left: 250px;
        right: 0;
        text-align: center;
        padding: 35px 0;
        background-color: #fff;
        z-index: 10;
        border-top: 1px solid #e7e7e7;
      }
      .disdetail .el-dialog__header {
        border-bottom: 1px solid #e7e7e7;
        position: absolute;
        top: 16px;
        left: 16px;
        right: 0px;
        height: 20px;
      }
      .disdetail .SubTi h4 {
        font-weight: bold;
      }
      .disdetail .el-row {
        height: 30px;
        line-height: 30px;
        margin-bottom: 20px;
      }
      .el-tabs__new-tab {
        margin: 10px 10px 10px 10px;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <input type="hidden" id="goods_id" value="{$other['id']}" />
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="商品审核" />
          </el-header>
          <el-main style="position: relative;">
            <el-card style="width:100%;margin-bottom: 103px;">
              <template #header>
                <div class="card-header">
                  <span data-i18n="thirdpartystock_management">商品审核</span>
                </div>
              </template>
              <div style="max-width:100%;">
                <el-card v-loading="loading.goodsDisInfo" style="max-width:100%;">
                  <template #header>商品基本信息</template>
                  <el-form label-width="150px" label-position="left" ref="form">
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="商品分类">
                          <template v-for="(item,index) in catelist">
                            {{item.docking_platform_name}}>{{item.first_cate_name}}> {{item.second_cate_name}} > {{item.three_cate_name}}<br>
                          </template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="供应商商品编码">
                          {{goodsDisInfo.supplier_goods_code}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="商品仓库模式">
                          <template v-if="goodsDisInfo.warehouse_mode==1">自建仓</template>
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="对接系统">
                          <template v-if="goodsDisInfo.docking_way==0">无</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="定价方式">
                          <template v-if="goodsDisInfo.price_method==1">自主定价</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="货运属性">
                          {{goodsDisInfo.attr_name}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="品牌">
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="商品用途">
                          {{goodsDisInfo.goods_purpose}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="销售形式">
                          {{goodsDisInfo.sales_form}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="是否侵权">
                          <template v-if="goodsDisInfo.is_tort==0">否</template>
                          <template v-else>是</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="是否停购">
                          <template v-if="goodsDisInfo.is_stop_buy==0">否</template>
                          <template v-else>是</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="负责人">
                          {{goodsDisInfo.recommend_man}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </el-form>
                </el-card>
                <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
                  <el-tab-pane label="分销区域">
                    <el-table :data="disAreaList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="分销区域">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="one_shipment" label="销售模式"></el-table-column>
                      <el-table-column prop="one_shipment" label="配送方式">
                        <template #default="scope">
                          <template v-if="scope.row.distribution_area_id.dis_model==1">海外仓配送</template>
                        </template>
                      </el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="分销库存">
                    <el-table :data="disStockList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="区域">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="third_party_stock_name" label="供应商仓库"></el-table-column>
                      <!-- <el-table-column prop="docking_code" label="平台仓库"></el-table-column> -->
                      <el-table-column prop="supplier_stock_amount" label="供应商库存量"></el-table-column>
                      <el-table-column prop="platform_stock_amount" label="平台库存量"></el-table-column>
                      <!-- <el-table-column prop="one_shipment" label="平台库存量同步供应商库存量"></el-table-column>
                    <el-table-column prop="one_shipment" label="税号"></el-table-column> -->
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="代发价格">
                    <el-table :data="disPriceList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="区域">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="product_name_cn" label="供应商物流产品"></el-table-column>
                      <el-table-column label="平台物流产品">Standard Shipping</el-table-column>
                      <el-table-column prop="supply_price" label="供货单价"></el-table-column>
                      <el-table-column label="平台运费">0.00</el-table-column>
                      <el-table-column prop="dis_price" label="分销售价"></el-table-column>
                      <el-table-column prop="distribution_area_id" label="币别">
                        <template #default="scope">{{scope.row.distribution_area_id.dis_currency}}</template>
                      </el-table-column>
                      <el-table-column prop="take_effect_time" label="价格生效时间"></el-table-column>
                      <el-table-column prop="package_goods_amount" label="包裹可含商品数量"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="退货地址">
                    <el-table :data="disReturnGoodsList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="区域" width="80">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="third_party_stock_name" label="退货仓库" width="150"></el-table-column>
                      <el-table-column label="退货地址">
                        <template #default="scope">
                          {{scope.row.stock_address}}
                          {{scope.row.stock_city}}
                          {{scope.row.stock_province}}
                          {{scope.row.stock_country_id}}
                          {{scope.row.stock_post_code}}
                        </template>
                      </el-table-column>
                      <el-table-column prop="receive_man" label="联系人" width="180"></el-table-column>
                      <el-table-column prop="tel" label="联系电话" width="150"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                </el-tabs>
                <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
                  <el-tab-pane label="商品描述">
                    <el-tabs type="border-card" class="goods_card" style="margin-top: 20px;">
                      <el-tab-pane label="英文">
                        <el-form label-width="150px" label-position="left" label-width="100px">
                          <el-form-item label="标题">
                            {{goodsDisInfo.goods_title_en}}
                          </el-form-item>
                          <el-form-item label="关键词">
                            <template v-for="keyword_item in goodsDisInfo.goods_keyword_en">
                              {{keyword_item}};
                            </template>
                          </el-form-item>
                          <el-form-item label="首段描述">
                            <div v-html="goodsDisInfo.goods_desc_en"></div>
                          </el-form-item>
                        </el-form>
                      </el-tab-pane>
                      <el-tab-pane label="中文">
                        <el-form label-width="150px" label-position="left" label-width="100px">
                          <el-form-item label="标题">
                            {{goodsDisInfo.goods_title_cn}}
                          </el-form-item>
                          <el-form-item label="关键词">
                            <template v-for="keyword_item in goodsDisInfo.goods_keyword_cn">
                              {{keyword_item}};
                            </template>
                          </el-form-item>
                          <el-form-item label="首段描述">
                            <div v-html="goodsDisInfo.goods_desc_cn"></div>
                          </el-form-item>
                        </el-form>
                      </el-tab-pane>
                    </el-tabs>
                  </el-tab-pane>
                  <el-tab-pane label="规格参数">
                    <el-form label-width="150px" label-position="left" ref="form" :model="goodsSpecForm" label-width="100px">
                      <div class="crSubItem">
                        <div class="SubTi">
                          <h4>净规格</h4>
                          <em></em>
                        </div>
                        <div class="subSec">
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="长(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.goods_length}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="宽(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.goods_width}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="高(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.goods_height}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="重量(镑)">
                                {{goodsDisInfo.goodsSpecInfo.goods_weight}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                        </div>
                      </div>
                      <div class="crSubItem">
                        <div class="SubTi">
                          <h4>包装规格</h4>
                          <em></em>
                        </div>
                        <div class="subSec">
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="长(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.spec_length}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="宽(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.spec_width}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="高(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.spec_height}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="重量(镑)">
                                {{goodsDisInfo.goodsSpecInfo.spec_weight}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                        </div>
                      </div>
                      <div class="crSubItem">
                        <div class="SubTi">
                          <h4>装箱规格</h4>
                          <em></em>
                        </div>
                        <div class="subSec">
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="长(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_length}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="宽(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_width}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="高(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_height}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="重量(镑)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_weight}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="箱率">
                                {{goodsDisInfo.goodsSpecInfo.box_pcs}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                        </div>
                      </div>
                    </el-form>
                  </el-tab-pane>
                  <el-tab-pane label="商品属性">
                    <el-card style="max-width:100%;">
                      <template #header>
                        <div class="card-header">
                          <span style="font-size:14px;font-weight:normal;">默认属性</span>
                        </div>
                      </template>
                      <el-form label-width="150px" label-position="left">
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>采购参数</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="出厂价(USD)">
                                  {{goodsDisInfo.goodsAttributeInfo.factory_price}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="分销价(USD)">
                                  {{goodsDisInfo.goodsAttributeInfo.distribution_price}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="采购周期(天)">
                                  {{goodsDisInfo.goodsAttributeInfo.procurement_cycle}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>商品识别码</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="MPN">
                                  {{goodsDisInfo.goodsAttributeInfo.mpn}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="JAN">
                                  {{goodsDisInfo.goodsAttributeInfo.jan}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="GTIN(UPC)">
                                  {{goodsDisInfo.goodsAttributeInfo.gtin_upc}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="GTIN(ISBN)">
                                  {{goodsDisInfo.goodsAttributeInfo.gtin_isbn}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="ISBN(EAN)">
                                  {{goodsDisInfo.goodsAttributeInfo.isbn_ean}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>面料/材料</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="主材质">
                                  {{goodsDisInfo.goodsAttributeInfo.material_main}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="次材质一">
                                  {{goodsDisInfo.goodsAttributeInfo.material_one}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="次材质二">
                                  {{goodsDisInfo.goodsAttributeInfo.material_two}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="次材质三">
                                  <template v-for="material_three_item in goodsDisInfo.goodsAttributeInfo.material_three">
                                    {{material_three_item}};
                                  </template>
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="详细材质">
                                  {{goodsDisInfo.goodsAttributeInfo.material_detailed}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem otherParameter">
                          <div class="SubTi">
                            <h4>其它参数</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <div class="grid-content ep-bg-purple">
                                  <el-form-item label="参考链接">
                                    {{goodsDisInfo.goodsAttributeInfo.reference_link}}
                                  </el-form-item>
                                </div>
                              </el-col>
                              <el-col :span="8">
                                <div class="grid-content">
                                  <el-form-item label="包装内含">
                                    {{goodsDisInfo.goodsAttributeInfo.packaging_contains}}
                                  </el-form-item>
                                </div>
                              </el-col>
                              <el-col :span="8">
                                <div class="grid-content ep-bg-purple">
                                  <el-form-item label="产品卖点">
                                    {{goodsDisInfo.goodsAttributeInfo.selling_points}}
                                  </el-form-item>
                                </div>
                              </el-col>
                            </el-row>
                            <el-row>
                              <el-col :span="12">
                                <div class="grid-content">
                                  <el-form-item label="售后配件">
                                    <template v-if="goodsDisInfo.goodsAttributeInfo.after_sales_parts==1">是</template>
                                    <template v-else>否</template>
                                  </el-form-item>
                                </div>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>电池参数</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="电池型号">
                                  {{goodsDisInfo.goodsAttributeInfo.battery_type}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="电池电压(V)">
                                  {{goodsDisInfo.goodsAttributeInfo.battery_voltage}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="电池容量(mAh)">
                                  {{goodsDisInfo.goodsAttributeInfo.battery_capacity}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                      </el-form>
                    </el-card>
                    <el-card style="max-width:100%;margin-top:20px;">
                      <template #header>
                        <div class="card-header">
                          <span style="font-size:14px;font-weight:normal;">扩展属性</span>
                        </div>
                      </template>
                      <el-row :gutter="20" v-for="(AttributExtendItem,index) in goodsDisInfo.goodsAttributExtendList">
                        <el-col :span="8">
                          <div class="grid-content">
                            <el-form-item label="属性名称">
                              {{AttributExtendItem.define_attribute_name}}
                            </el-form-item>
                          </div>
                        </el-col>
                        <el-col :span="16">
                          <div class="grid-content ep-bg-purple">
                            <el-form-item label="属性值">
                              {{AttributExtendItem.define_attribute_value}}
                            </el-form-item>
                          </div>
                        </el-col>
                      </el-row>
                    </el-card>
                  </el-tab-pane>
                  <el-tab-pane label="零售限价">
                    <el-table :data="goodsDisInfo.goodsRetailPriceLimitList" border style="width: 100%" :stripe="true">
                      <el-table-column label="价格类型" width="180">
                        <template #default="scope">
                          <template v-if="scope.row.price_type==1">日常价</template>
                          <template v-else-if="scope.row.price_type==2">活动价</template>
                        </template>
                      </el-table-column>
                      <el-table-column label="销售国家">
                        <template #default="scope">
                          {{scope.row.sale_country_code}}
                        </template>
                      </el-table-column>
                      <el-table-column label="销售平台">
                        <template #default="scope">
                          {{scope.row.sales_platform}}
                        </template>
                      </el-table-column>
                      <el-table-column label="币别">
                        <template #default="scope">
                          {{scope.row.currency}}
                        </template>
                      </el-table-column>
                      <el-table-column label="最低零售价">
                        <template #default="scope">
                          {{scope.row.min_retail_price}}
                        </template>
                      </el-table-column>
                      <el-table-column label="生效时间">
                        <template #default="scope">
                          {{scope.row.start_time}}
                        </template>
                      </el-table-column>
                      <el-table-column label="失效时间">
                        <template #default="scope">
                          {{scope.row.end_time}}
                        </template>
                      </el-table-column>
                      </el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="商品标签">
                    <el-table :data="goodsDisInfo.goodsLabelList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="label_type" label="标签类型" width="280"></el-table-column>
                      <el-table-column prop="goods_label" label="商品标签"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="限制分销平台">
                    <el-row :gutter="20">
                      <el-col :span="24">
                        <div class="grid-content">
                          <el-form-item label="是否限制分销平台">
                            <template v-if="goodsDisInfo.is_limit_dis_platform==1">是</template>
                            <template v-else>否</template>
                          </el-form-item>
                        </div>
                      </el-col>
                    </el-row>
                    <el-table v-if="goodsDisInfo.is_limit_dis_platform==1" :data="goodsDisInfo.goodsLimitDisPlatformList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="platform_name" label="限制分销平台"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="商品图片">
                    <el-row :gutter="20">
                      <el-col :span="24">
                        <div class="grid-content">
                          <el-button :type="pictureStatuslist[0]==true?'primary':''" @click="setPictureStatus(0)">全部(<span class="num">{{goodsPictureCount.type0??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[1]==true?'primary':''" @click="setPictureStatus(1)">原图(<span class="num">{{goodsPictureCount.type1??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[2]==true?'primary':''" @click="setPictureStatus(2)">普修图(<span
                                  class="num">{{goodsPictureCount.type2??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[3]==true?'primary':''" @click="setPictureStatus(3)">精修图(<span
                                  class="num">{{goodsPictureCount.type3??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[4]==true?'primary':''" @click="setPictureStatus(4)">主图(<span class="num">{{goodsPictureCount.type4??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[5]==true?'primary':''" @click="setPictureStatus(5)">包装图(<span
                                  class="num">{{goodsPictureCount.type5??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[6]==true?'primary':''" @click="setPictureStatus(6)">图片尺寸1000(<span
                                  class="num">{{goodsPictureCount.type6??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[7]==true?'primary':''" @click="setPictureStatus(7)">图片尺寸1600(<span
                                  class="num">{{goodsPictureCount.type7??0}}</span>)</el-button>
                        </div>
                      </el-col>
                    </el-row>
                    <div>
                      <el-image v-for="(img,index) in goodsPictureList" style="width: 100px; height: 100px" :src="img.url" @click="previewPictureCard(img)" :fit="fit" />
                    </div>
                  </el-tab-pane>
                </el-tabs>
              </div>
            </el-card>
            <div class="form_submit_box">
              <el-button type="success" @click="reviewGoods(1)">通过审核(商品审核)</el-Button>
              <el-button type="danger" @click="showReviewGoods()">不通过审核(商品审核)</el-button>
            </div>
          </el-main>
        </el-container>
      </el-container>
      <el-dialog v-model="dialogVisible_Picture">
        <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
      </el-dialog>
      <el-dialog v-model="dialogVisible_reason" style="position: relative;width: 600px;">
        <template #header>
          {{set_nopass_reason_title}}
        </template>
        <el-form label-width="150px" label-position="left" ref="form">
          <el-form-item label="不通过理由">
            <el-input v-model="review_comments" maxlength="30" style="width: 90%" placeholder="请填写不通过理由" type="textarea" show-word-limit />
          </el-form-item>
          <el-form-item>
            <el-button type="danger" @click="reviewGoods(2)">确定不通过</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goods/create.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goods/index.html
New file
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <style>
      .el-table th.el-table__cell,
      .el-table td.el-table__cell,
      .el-select,
      .el-select__wrapper {
        position: unset;
      }
      .el-image-viewer__img {
        width: 50%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="商品审核" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="goods_management">商品审核</span>
                </div>
              </template>
              <el-form :model="searchdata" label-width="auto">
                <el-input v-model="searchdata.platform_goods_code" placeholder="平台商品编码" style="width: 200px; margin-right: 10px;"></el-input>
                <el-input v-model="searchdata.supplier_goods_code" placeholder="供应商商品编码" style="width: 200px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="searchPublishOrder()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="goodsList" v-loading="loading.loading" border style="width: 100%;position: relative;z-index: 0 !important;">
                <el-table-column align="center" prop="picture" label="图片" show-overflow-tooltip width="180">
                  <template #default="scope">
                    <el-image :src="scope.row.picture" style="width: 60px; height: 60px;" hide-on-click-modal="true" :z-index="99" :preview-src-list="[scope.row.picture]" />
                  </template>
                </el-table-column>
                <el-table-column label="是否显示官网" width="150" align="center">
                  <template #default="scope">
                    <el-switch @change="updateExt(scope.row,'is_show')" v-model="scope.row.is_show" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                               :inactive-value="0" inline-prompt active-text="是" inactive-text="否" />
                  </template>
                </el-table-column>
                <el-table-column prop="goods_title_cn" label="商品中文名称"></el-table-column>
                <el-table-column label="发布状态" width="150" align="center">
                  <template #default="scope">
                    <el-switch v-model="scope.row.publish_status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0" inline-prompt
                               active-text="已发布" inactive-text="未发布" disabled />
                  </template>
                </el-table-column>
                <el-table-column label="分销状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.whether_dis==1">已分销</template>
                    <template v-else>未分销</template>
                  </template>
                </el-table-column>
                <el-table-column label="审核状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.status == 0">待提交</template>
                    <template v-else-if="scope.row.status == 1">审核通过</template>
                    <template v-else-if="scope.row.status == 2">审核中</template>
                    <template v-else-if="scope.row.status == 3">审核不通过</template>
                  </template>
                </el-table-column>
                <el-table-column prop="review_comments" label="审核意见" show-overflow-tooltip width="180"></el-table-column>
                <el-table-column prop="add_time" label="创建时间" width="180"></el-table-column>
                <el-table-column label="操作选项" fixed="right" width="120" align="center">
                  <template #default="scope">
                    <el-button v-if="scope.row.status==2" type="primary" @click="editGoods(scope.row.id)">审核</el-button>
                    <el-button v-if="scope.row.status==1" type="danger" @click="showReviewGoods(scope.$index)">下架</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
        </el-container>
      </el-container>
      <el-dialog v-model="dialogVisible_reason" style="position: relative;width: 600px;">
        <template #header>
          {{set_nopass_reason_title}}
        </template>
        <el-form label-width="150px" label-position="left" ref="form">
          <el-form-item label="下架理由">
            <el-input v-model="review_comments" maxlength="30" style="width: 90%" placeholder="请填写下架理由" type="textarea" show-word-limit />
          </el-form-item>
          <el-form-item>
            <el-button type="danger" @click="reviewGoods(2)">确定下架</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goods/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goods_brand/index.html
New file
@@ -0,0 +1,174 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide['one']['text']}" two_word="{$guide['two']['text']}" />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="goods_brand_management">{$other['title']}</span>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchData.kw" placeholder="请输入关键词" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" icon="Search" @click="getGoodsBrandList()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="goodsBrandList" v-loading="loading" border style="width: 100%" :stripe="true" ref="tableRef">
                                <el-table-column prop="brand_name" label="品牌名称"></el-table-column>
                                <el-table-column prop="brand_type" label="品牌类型" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.brand_type==1">
                                            <span data-i18n="brand_type_1">非自有品牌</span>
                                        </template>
                                        <template v-else>
                                            <span data-i18n="brand_type_2">自有品牌</span>
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="need_filings" label="是否需要备案" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.need_filings==1">
                                            <span data-i18n="need_filings_1">是</span>
                                        </template>
                                        <template v-else>
                                            <span data-i18n="need_filings_0">否</span>
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="real_name" label="审核状态" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                                        <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                                        <template v-else-if="scope.row.status==2"><el-tag type="info">未通过审核</el-tag></template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button type="primary" :disabled="scope.row.status==0?false:true" @click="showBrand(scope.row)">审核</el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchData.page" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchData.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-dialog title="品牌信息" width="1200px" align-center="true" class="icon-dialog" v-model="dialogBrand" :before-close="closeForm" append-to-body>
                <el-card style="width: 100%">
                    <el-form label-width="auto">
                        <el-form-item label="品牌名称:">
                            {{brandInfo.brand_name}}
                        </el-form-item>
                        <el-form-item label="品牌类型:">
                            <template v-if="brandInfo.brand_type==1">
                                <span data-i18n="brand_type_1">非自有品牌</span>
                            </template>
                            <template v-else>
                                <span data-i18n="brand_type_2">自有品牌</span>
                            </template>
                        </el-form-item>
                        <el-form-item label="是否需要备案:">
                            <template v-if="brandInfo.need_filings==1">
                                <span data-i18n="need_filings_1">是</span>
                            </template>
                            <template v-else>
                                <span data-i18n="need_filings_0">否</span>
                            </template>
                        </el-form-item>
                        <el-form-item label="品牌介绍">
                            {{brandInfo.brand_desc}}
                        </el-form-item>
                        <el-form-item label="品牌LOGO">
                            <template v-if="brandInfo.brand_logo">
                                <img :src="brandInfo.brand_logo" @click="previewPictureCard(brandInfo.brand_logo)" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
                                     style="width: 100px;height: 100px;" />
                            </template>
                        </el-form-item>
                    </el-form></el-card>
                <br />
                <el-card style="width: 100%">
                    <template #header>
                        <div class="card-header">
                            <span>品牌证书</span>
                        </div>
                    </template>
                    <el-table :data="brandCertList" v-loading="loading_brand_cert" border style="width: 100%" :stripe="true">
                        <el-table-column prop="title" label="文件名称" align="center">
                            <template #default="scope">
                                <el-link :href="scope.row.filename" target="_blank" type="success">{{ scope.row.title }}</el-link>
                            </template>
                        </el-table-column>
                        <el-table-column prop="filesize" label="文件大小" align="center"></el-table-column>
                    </el-table>
                </el-card>
                <br />
                <el-card style="width: 100%">
                    <template #header>
                        <div class="card-header">
                            <span>备案范围</span>
                        </div>
                    </template>
                    <el-table :data="goodsBrandFilingsList" border style="width: 100%" :stripe="true">
                        <el-table-column prop="country" label="销售国家" align="center"></el-table-column>
                        <el-table-column prop="platform_name" label="销售平台" align="center"></el-table-column>
                        <el-table-column prop="amount" label="店铺数量上限" align="center"></el-table-column>
                    </el-table>
                </el-card>
                <br />
                <el-card style="width: 100%">
                    <template #header>
                        <div class="card-header">
                            <span>授权协议</span>
                        </div>
                    </template>
                    <el-table :data="brandAgreementList" v-loading="loading_brand_agreement" border style="width: 100%" :stripe="true">
                        <el-table-column prop="title" label="文件名称" align="center">
                            <template #default="scope">
                                <el-link :href="scope.row.filename" target="_blank" type="success">{{ scope.row.title }}</el-link>
                            </template>
                        </el-table-column>
                        <el-table-column prop="filesize" label="文件大小" align="center"></el-table-column>
                    </el-table>
                </el-card>
                <el-row>
                    <el-col :span="24" style="text-align: center;margin:30px 0px;">
                        <el-button type="success" @click="reviewGoodsBrand(1)">通过审核</el-Button>
                        <el-button type="danger" @click="reviewGoodsBrand(2)">不通过审核</el-button>
                    </el-col>
                </el-row>
            </el-dialog>
            <el-dialog v-model="dialogVisible_Picture">
                <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/goods_brand/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goods_freight_attr/index.html
New file
@@ -0,0 +1,92 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="货运属性管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">货运属性管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入货运属性名称或属性代码" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true" ref="tableRef">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="attr_code" label="货运属性代码" width="180"></el-table-column>
                <el-table-column prop="attr_name" label="货运属性名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="200" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="货运属性代码">
            <el-input v-model="Add_form.attr_code" placeholder="请输入属性代码" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="货运属性名称">
            <el-input v-model="Add_form.attr_name" placeholder="请输入属性名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <!-- <el-input v-model="Add_form.order_id" placeholder="请输入排序" style="width:260px;"></el-input> -->
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goods_freight_attr/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goods_material/index.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="材质管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">材质管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入材质名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="material_name" label="材质名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="材质名称">
            <el-input v-model="Add_form.material_name" placeholder="请输入材质名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goods_material/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goods_purpose/index.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="商品用途管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">商品用途管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入商品用途名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="purpose_name" label="商品用途名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="商品用途名称">
            <el-input v-model="Add_form.purpose_name" placeholder="请输入商品用途名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goods_purpose/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goodskd/create.html
New file
@@ -0,0 +1,735 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8" />
    <include file="common:title" />
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <include file="common:header" />
    <include file="common:element-plus" />
    <style>
      .goods_description .el-tabs__item {
        padding: 0 20px;
        height: 40px;
        line-height: 40px;
        font-size: 16px;
      }
      .goods_card>.el-tabs__header .el-tabs__item.is-active {
        color: #fff !important;
        background-color: #35aca6;
      }
    </style>
    <style>
      .crSubItem {
        margin-bottom: 20px;
      }
      .SubTi {
        margin-bottom: 10px;
      }
      .SubTi h4 {
        line-height: 30px;
        margin-right: 10px;
        font-size: 15px;
      }
      .subSec {
        padding: 10px 20px 0px 20px;
        background: #f9f9f9;
        border: 1px solid #e7e7e7;
        border-radius: 2px;
      }
      .tox .tox-edit-area::before {
        border: 0px !important;
      }
      .ml-3 {
        margin-left: 0.75rem;
      }
      .otherParameter .el-textarea__inner {
        height: 120px;
      }
      .num {
        font-size: 12px;
      }
    </style>
    <style>
      .form_submit_box {
        position: fixed;
        bottom: 0px;
        left: 250px;
        right: 0;
        text-align: center;
        padding: 35px 0;
        background-color: #fff;
        z-index: 10;
        border-top: 1px solid #e7e7e7;
      }
      .disdetail .el-dialog__header {
        border-bottom: 1px solid #e7e7e7;
        position: absolute;
        top: 16px;
        left: 16px;
        right: 0px;
        height: 20px;
      }
      .disdetail .SubTi h4 {
        font-weight: bold;
      }
      .disdetail .el-row {
        height: 30px;
        line-height: 30px;
        margin-bottom: 20px;
      }
      .el-tabs__new-tab {
        margin: 10px 10px 10px 10px;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <input type="hidden" id="goods_id" value="{$other['id']}" />
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="商品刊登审核" />
          </el-header>
          <el-main style="position: relative;">
            <el-card style="width:100%;margin-bottom: 103px;">
              <template #header>
                <div class="card-header">
                  <span data-i18n="thirdpartystock_management">商品刊登审核</span>
                </div>
              </template>
              <div style="max-width:100%;">
                <el-card v-loading="loading.goodsDisInfo" style="max-width:100%;">
                  <template #header>商品基本信息</template>
                  <el-form label-width="150px" label-position="left" ref="form">
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="商品分类">
                          <template v-for="(item,index) in catelist">
                            {{item.docking_platform_name}}>{{item.first_cate_name}}> {{item.second_cate_name}} > {{item.three_cate_name}}<br>
                          </template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="供应商商品编码">
                          {{goodsDisInfo.supplier_goods_code}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="商品仓库模式">
                          <template v-if="goodsDisInfo.warehouse_mode==1">自建仓</template>
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="对接系统">
                          <template v-if="goodsDisInfo.docking_way==0">无</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="定价方式">
                          <template v-if="goodsDisInfo.price_method==1">自主定价</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="货运属性">
                          {{goodsDisInfo.attr_name}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="品牌">
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="商品用途">
                          {{goodsDisInfo.goods_purpose}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="销售形式">
                          {{goodsDisInfo.sales_form}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="8">
                        <el-form-item label="是否侵权">
                          <template v-if="goodsDisInfo.is_tort==0">否</template>
                          <template v-else>是</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="是否停购">
                          <template v-if="goodsDisInfo.is_stop_buy==0">否</template>
                          <template v-else>是</template>
                        </el-form-item>
                      </el-col>
                      <el-col :span="8">
                        <el-form-item label="负责人">
                          {{goodsDisInfo.recommend_man}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </el-form>
                </el-card>
                <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
                  <el-tab-pane label="分销区域">
                    <el-table :data="disAreaList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="分销区域">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="one_shipment" label="销售模式"></el-table-column>
                      <el-table-column prop="one_shipment" label="配送方式">
                        <template #default="scope">
                          <template v-if="scope.row.distribution_area_id.dis_model==1">海外仓配送</template>
                        </template>
                      </el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="分销库存">
                    <el-table :data="disStockList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="区域">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="third_party_stock_name" label="供应商仓库"></el-table-column>
                      <!-- <el-table-column prop="docking_code" label="平台仓库"></el-table-column> -->
                      <el-table-column prop="supplier_stock_amount" label="供应商库存量"></el-table-column>
                      <el-table-column prop="platform_stock_amount" label="平台库存量"></el-table-column>
                      <!-- <el-table-column prop="one_shipment" label="平台库存量同步供应商库存量"></el-table-column>
                    <el-table-column prop="one_shipment" label="税号"></el-table-column> -->
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="代发价格">
                    <el-table :data="disPriceList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="区域">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="product_name_cn" label="供应商物流产品"></el-table-column>
                      <el-table-column label="平台物流产品">Standard Shipping</el-table-column>
                      <el-table-column prop="supply_price" label="供货单价"></el-table-column>
                      <el-table-column label="平台运费">0.00</el-table-column>
                      <el-table-column prop="dis_price" label="分销售价"></el-table-column>
                      <el-table-column prop="distribution_area_id" label="币别">
                        <template #default="scope">{{scope.row.distribution_area_id.dis_currency}}</template>
                      </el-table-column>
                      <el-table-column prop="take_effect_time" label="价格生效时间"></el-table-column>
                      <el-table-column prop="package_goods_amount" label="包裹可含商品数量"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="退货地址">
                    <el-table :data="disReturnGoodsList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="distribution_area_id" label="区域" width="80">
                        <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                      </el-table-column>
                      <el-table-column prop="third_party_stock_name" label="退货仓库" width="150"></el-table-column>
                      <el-table-column label="退货地址">
                        <template #default="scope">
                          {{scope.row.stock_address}}
                          {{scope.row.stock_city}}
                          {{scope.row.stock_province}}
                          {{scope.row.stock_country_id}}
                          {{scope.row.stock_post_code}}
                        </template>
                      </el-table-column>
                      <el-table-column prop="receive_man" label="联系人" width="180"></el-table-column>
                      <el-table-column prop="tel" label="联系电话" width="150"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                </el-tabs>
                <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
                  <el-tab-pane label="商品描述">
                    <el-tabs type="border-card" class="goods_card" style="margin-top: 20px;">
                      <el-tab-pane label="英文">
                        <el-form label-width="150px" label-position="left" label-width="100px">
                          <el-form-item label="标题">
                            {{goodsDisInfo.goods_title_en}}
                          </el-form-item>
                          <el-form-item label="关键词">
                            <template v-for="keyword_item in goodsDisInfo.goods_keyword_en">
                              {{keyword_item}};
                            </template>
                          </el-form-item>
                          <el-form-item label="首段描述">
                            <div v-html="goodsDisInfo.goods_desc_en"></div>
                          </el-form-item>
                        </el-form>
                      </el-tab-pane>
                      <el-tab-pane label="中文">
                        <el-form label-width="150px" label-position="left" label-width="100px">
                          <el-form-item label="标题">
                            {{goodsDisInfo.goods_title_cn}}
                          </el-form-item>
                          <el-form-item label="关键词">
                            <template v-for="keyword_item in goodsDisInfo.goods_keyword_cn">
                              {{keyword_item}};
                            </template>
                          </el-form-item>
                          <el-form-item label="首段描述">
                            <div v-html="goodsDisInfo.goods_desc_cn"></div>
                          </el-form-item>
                        </el-form>
                      </el-tab-pane>
                    </el-tabs>
                  </el-tab-pane>
                  <el-tab-pane label="规格参数">
                    <el-form label-width="150px" label-position="left" ref="form" :model="goodsSpecForm" label-width="100px">
                      <div class="crSubItem">
                        <div class="SubTi">
                          <h4>净规格</h4>
                          <em></em>
                        </div>
                        <div class="subSec">
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="长(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.goods_length}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="宽(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.goods_width}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="高(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.goods_height}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="重量(镑)">
                                {{goodsDisInfo.goodsSpecInfo.goods_weight}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                        </div>
                      </div>
                      <div class="crSubItem">
                        <div class="SubTi">
                          <h4>包装规格</h4>
                          <em></em>
                        </div>
                        <div class="subSec">
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="长(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.spec_length}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="宽(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.spec_width}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="高(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.spec_height}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="重量(镑)">
                                {{goodsDisInfo.goodsSpecInfo.spec_weight}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                        </div>
                      </div>
                      <div class="crSubItem">
                        <div class="SubTi">
                          <h4>装箱规格</h4>
                          <em></em>
                        </div>
                        <div class="subSec">
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="长(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_length}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="宽(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_width}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="高(英寸)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_height}}
                              </el-form-item>
                            </el-col>
                            <el-col :span="6">
                              <el-form-item label="重量(镑)">
                                {{goodsDisInfo.goodsSpecInfo.box_spec_weight}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                          <el-row :gutter="20">
                            <el-col :span="6">
                              <el-form-item label="箱率">
                                {{goodsDisInfo.goodsSpecInfo.box_pcs}}
                              </el-form-item>
                            </el-col>
                          </el-row>
                        </div>
                      </div>
                    </el-form>
                  </el-tab-pane>
                  <el-tab-pane label="商品属性">
                    <el-card style="max-width:100%;">
                      <template #header>
                        <div class="card-header">
                          <span style="font-size:14px;font-weight:normal;">默认属性</span>
                        </div>
                      </template>
                      <el-form label-width="150px" label-position="left">
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>采购参数</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="出厂价(USD)">
                                  {{goodsDisInfo.goodsAttributeInfo.factory_price}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="分销价(USD)">
                                  {{goodsDisInfo.goodsAttributeInfo.distribution_price}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="采购周期(天)">
                                  {{goodsDisInfo.goodsAttributeInfo.procurement_cycle}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>商品识别码</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="MPN">
                                  {{goodsDisInfo.goodsAttributeInfo.mpn}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="JAN">
                                  {{goodsDisInfo.goodsAttributeInfo.jan}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="GTIN(UPC)">
                                  {{goodsDisInfo.goodsAttributeInfo.gtin_upc}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="GTIN(ISBN)">
                                  {{goodsDisInfo.goodsAttributeInfo.gtin_isbn}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="ISBN(EAN)">
                                  {{goodsDisInfo.goodsAttributeInfo.isbn_ean}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>面料/材料</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="主材质">
                                  {{goodsDisInfo.goodsAttributeInfo.material_main}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="次材质一">
                                  {{goodsDisInfo.goodsAttributeInfo.material_one}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="次材质二">
                                  {{goodsDisInfo.goodsAttributeInfo.material_two}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="次材质三">
                                  <template v-for="material_three_item in goodsDisInfo.goodsAttributeInfo.material_three">
                                    {{material_three_item}};
                                  </template>
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="详细材质">
                                  {{goodsDisInfo.goodsAttributeInfo.material_detailed}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem otherParameter">
                          <div class="SubTi">
                            <h4>其它参数</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <div class="grid-content ep-bg-purple">
                                  <el-form-item label="参考链接">
                                    {{goodsDisInfo.goodsAttributeInfo.reference_link}}
                                  </el-form-item>
                                </div>
                              </el-col>
                              <el-col :span="8">
                                <div class="grid-content">
                                  <el-form-item label="包装内含">
                                    {{goodsDisInfo.goodsAttributeInfo.packaging_contains}}
                                  </el-form-item>
                                </div>
                              </el-col>
                              <el-col :span="8">
                                <div class="grid-content ep-bg-purple">
                                  <el-form-item label="产品卖点">
                                    {{goodsDisInfo.goodsAttributeInfo.selling_points}}
                                  </el-form-item>
                                </div>
                              </el-col>
                            </el-row>
                            <el-row>
                              <el-col :span="12">
                                <div class="grid-content">
                                  <el-form-item label="售后配件">
                                    <template v-if="goodsDisInfo.goodsAttributeInfo.after_sales_parts==1">是</template>
                                    <template v-else>否</template>
                                  </el-form-item>
                                </div>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                        <div class="crSubItem">
                          <div class="SubTi">
                            <h4>电池参数</h4>
                            <em></em>
                          </div>
                          <div class="subSec">
                            <el-row>
                              <el-col :span="8">
                                <el-form-item label="电池型号">
                                  {{goodsDisInfo.goodsAttributeInfo.battery_type}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="电池电压(V)">
                                  {{goodsDisInfo.goodsAttributeInfo.battery_voltage}}
                                </el-form-item>
                              </el-col>
                              <el-col :span="8">
                                <el-form-item label="电池容量(mAh)">
                                  {{goodsDisInfo.goodsAttributeInfo.battery_capacity}}
                                </el-form-item>
                              </el-col>
                            </el-row>
                          </div>
                        </div>
                      </el-form>
                    </el-card>
                    <el-card style="max-width:100%;margin-top:20px;">
                      <template #header>
                        <div class="card-header">
                          <span style="font-size:14px;font-weight:normal;">扩展属性</span>
                        </div>
                      </template>
                      <el-row :gutter="20" v-for="(AttributExtendItem,index) in goodsDisInfo.goodsAttributExtendList">
                        <el-col :span="8">
                          <div class="grid-content">
                            <el-form-item label="属性名称">
                              {{AttributExtendItem.define_attribute_name}}
                            </el-form-item>
                          </div>
                        </el-col>
                        <el-col :span="16">
                          <div class="grid-content ep-bg-purple">
                            <el-form-item label="属性值">
                              {{AttributExtendItem.define_attribute_value}}
                            </el-form-item>
                          </div>
                        </el-col>
                      </el-row>
                    </el-card>
                  </el-tab-pane>
                  <el-tab-pane label="零售限价">
                    <el-table :data="goodsDisInfo.goodsRetailPriceLimitList" border style="width: 100%" :stripe="true">
                      <el-table-column label="价格类型" width="180">
                        <template #default="scope">
                          <template v-if="scope.row.price_type==1">日常价</template>
                          <template v-else-if="scope.row.price_type==2">活动价</template>
                        </template>
                      </el-table-column>
                      <el-table-column label="销售国家">
                        <template #default="scope">
                          {{scope.row.sale_country_code}}
                        </template>
                      </el-table-column>
                      <el-table-column label="销售平台">
                        <template #default="scope">
                          {{scope.row.sales_platform}}
                        </template>
                      </el-table-column>
                      <el-table-column label="币别">
                        <template #default="scope">
                          {{scope.row.currency}}
                        </template>
                      </el-table-column>
                      <el-table-column label="最低零售价">
                        <template #default="scope">
                          {{scope.row.min_retail_price}}
                        </template>
                      </el-table-column>
                      <el-table-column label="生效时间">
                        <template #default="scope">
                          {{scope.row.start_time}}
                        </template>
                      </el-table-column>
                      <el-table-column label="失效时间">
                        <template #default="scope">
                          {{scope.row.end_time}}
                        </template>
                      </el-table-column>
                      </el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="商品标签">
                    <el-table :data="goodsDisInfo.goodsLabelList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="label_type" label="标签类型" width="280"></el-table-column>
                      <el-table-column prop="goods_label" label="商品标签"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="限制分销平台">
                    <el-row :gutter="20">
                      <el-col :span="24">
                        <div class="grid-content">
                          <el-form-item label="是否限制分销平台">
                            <template v-if="goodsDisInfo.is_limit_dis_platform==1">是</template>
                            <template v-else>否</template>
                          </el-form-item>
                        </div>
                      </el-col>
                    </el-row>
                    <el-table v-if="goodsDisInfo.is_limit_dis_platform==1" :data="goodsDisInfo.goodsLimitDisPlatformList" border style="width: 100%" :stripe="true">
                      <el-table-column prop="platform_name" label="限制分销平台"></el-table-column>
                    </el-table>
                  </el-tab-pane>
                  <el-tab-pane label="商品图片">
                    <el-row :gutter="20">
                      <el-col :span="24">
                        <div class="grid-content">
                          <el-button :type="pictureStatuslist[0]==true?'primary':''" @click="setPictureStatus(0)">全部(<span class="num">{{goodsPictureCount.type0??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[1]==true?'primary':''" @click="setPictureStatus(1)">原图(<span class="num">{{goodsPictureCount.type1??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[2]==true?'primary':''" @click="setPictureStatus(2)">普修图(<span
                                  class="num">{{goodsPictureCount.type2??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[3]==true?'primary':''" @click="setPictureStatus(3)">精修图(<span
                                  class="num">{{goodsPictureCount.type3??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[4]==true?'primary':''" @click="setPictureStatus(4)">主图(<span class="num">{{goodsPictureCount.type4??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[5]==true?'primary':''" @click="setPictureStatus(5)">包装图(<span
                                  class="num">{{goodsPictureCount.type5??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[6]==true?'primary':''" @click="setPictureStatus(6)">图片尺寸1000(<span
                                  class="num">{{goodsPictureCount.type6??0}}</span>)</el-button>
                          <el-button :type="pictureStatuslist[7]==true?'primary':''" @click="setPictureStatus(7)">图片尺寸1600(<span
                                  class="num">{{goodsPictureCount.type7??0}}</span>)</el-button>
                        </div>
                      </el-col>
                    </el-row>
                    <div>
                      <el-image v-for="(img,index) in goodsPictureList" style="width: 100px; height: 100px" :src="img.url" @click="previewPictureCard(img)" :fit="fit" />
                    </div>
                  </el-tab-pane>
                </el-tabs>
              </div>
            </el-card>
            <div class="form_submit_box">
              <el-button type="success" @click="reviewGoodsKD(1)">通过审核(刊登)</el-Button>
              <el-button type="danger" @click="showReviewGoodsKD()">不通过审核(刊登)</el-button>
            </div>
          </el-main>
        </el-container>
      </el-container>
      <el-dialog v-model="dialogVisible_Picture">
        <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
      </el-dialog>
      <el-dialog v-model="dialogVisible_reason" style="position: relative;width: 600px;">
        <template #header>
          {{set_nopass_reason_title}}
        </template>
        <el-form label-width="150px" label-position="left" ref="form">
          <el-form-item label="不通过理由">
            <el-input v-model="kd_review_comments" maxlength="30" style="width: 90%" placeholder="请填写不通过理由" type="textarea" show-word-limit />
          </el-form-item>
          <el-form-item>
            <el-button type="danger" @click="reviewGoodsKD(2)">确定不通过</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goodskd/create.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/goodskd/index.html
New file
@@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <style>
      .el-table th.el-table__cell,
      .el-table td.el-table__cell,
      .el-select,
      .el-select__wrapper {
        position: unset;
      }
      .el-image-viewer__img {
        width: 50%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="刊登审核" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="goods_management">刊登审核</span>
                </div>
              </template>
              <el-form :model="searchdata" label-width="auto">
                <el-input v-model="searchdata.platform_goods_code" placeholder="平台商品编码" style="width: 200px; margin-right: 10px;"></el-input>
                <el-input v-model="searchdata.supplier_goods_code" placeholder="供应商商品编码" style="width: 200px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="searchPublishOrder()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="PublishOrderList" v-loading="loading.loading" border style="width: 100%;position: relative;z-index: 0 !important;" ref="tableRef">
                <el-table-column align="center" prop="picture" label="图片" show-overflow-tooltip width="100">
                  <template #default="scope">
                    <el-image :src="scope.row.picture" style="width: 60px; height: 60px;" hide-on-click-modal="true" :z-index="99" :preview-src-list="[scope.row.picture]" />
                  </template>
                </el-table-column>
                <el-table-column prop="goods_title_cn" label="中文标题"></el-table-column>
                <el-table-column prop="supplier_goods_code" label="供应商商品编码" width="150"></el-table-column>
                <el-table-column label="刊登状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.kd_publish_status == 0">
                      <el-button type="danger">未刊登</el-button>
                    </template>
                    <template v-else-if="scope.row.kd_publish_status == 1"><el-button type="success">已刊登</el-button></template>
                  </template>
                </el-table-column>
                <el-table-column label="审核状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.kd_audit_status == 0">待提交</template>
                    <template v-else-if="scope.row.kd_audit_status == 1">审核通过</template>
                    <template v-else-if="scope.row.kd_audit_status == 2">审核中</template>
                    <template v-else-if="scope.row.kd_audit_status == 3">审核不通过</template>
                  </template>
                </el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button type="primary" @click="editGoodsKD(scope.row.id)">审核</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
        </el-container>
      </el-container>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/goodskd/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/index/index.html
New file
@@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:element-plus">
</head>
<body>
    <div id="vue_item" v-cloak>
        <el-container>
            <el-aside class="el-menu-container" :width="el_aside_width">
                <!-- 侧边菜单 -->
                <include file="common:side_menu" />
            </el-aside>
            <el-container>
                <el-header>
                    <include file="common:guide" one_word="首页" two_word="控制台" />
                </el-header>
                <el-main>
                    <div class="flex justify_content_between">
                        <el-card style="width: 30%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="supplier_info_title">供应商信息</span>
                                </div>
                            </template>
                        </el-card>
                        <el-card style="width: 69%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="to_do_items">待办事项</span>
                                </div>
                            </template>
                        </el-card>
                    </div>
                    <br />
                    <el-card style="width: 100%">
                        <template #header>
                            <div class="card-header">
                                <span>数据汇总</span>
                            </div>
                        </template>
                    </el-card>
                    <br />
                    <el-card style="width: 100%">
                        <template #header>
                            <div class="card-header">
                                <span>通知公告</span>
                            </div>
                        </template>
                    </el-card>
                    <br />
                    <el-card style="width: 100%">
                        <template #header>
                            <div class="card-header">
                                <span>订单走势</span>
                            </div>
                        </template>
                    </el-card>
                    <br />
                    <el-card style="width: 100%">
                        <template #header>
                            <div class="card-header">
                                <span>销量排名</span>
                            </div>
                        </template>
                    </el-card>
                </el-main>
                <el-footer>Footer</el-footer>
            </el-container>
        </el-container>
    </div>
</body>
<!-- 共用的方法 -->
<script src="/static/vue/mixin_admin.js"></script>
<script src="/static/admin/js/index/index.js"></script>
</html>
app/admin/view/language/index.html
New file
@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <link rel="stylesheet" href="/static/admin/css/image_viewer.css" media="all">
    <style>
      .previewImage {
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="{$other['title']}" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">{$other['title']}</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入语言名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="name" label="语言名称(中文)"></el-table-column>
                <el-table-column prop="name_loc" label="语言名称"></el-table-column>
                <el-table-column prop="symbol" label="语言标识"></el-table-column>
                <el-table-column prop="trans_symbol" label="翻译标识"></el-table-column>
                <el-table-column label="是否启用" width="150" align="center">
                  <template #default="scope">
                    <el-switch @change="updateExt(scope.row,'is_show')" v-model="scope.row.is_show" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                               :inactive-value="0" inline-prompt active-text="是" inactive-text="否" />
                  </template>
                </el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="900px">
        <el-form ref="Add_form" :rules="rules" :model="Add_form" label-width="180px">
          <el-form-item label="语言名称(中文)" prop="name">
            <el-input v-model="Add_form.name" clearable placeholder="请输入语言名称(中文)" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="语言名称" prop="name_loc">
            <el-input v-model="Add_form.name_loc" clearable placeholder="请输入语言名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="语言标识" prop="symbol">
            <el-input v-model="Add_form.symbol" clearable placeholder="请输入语言标识" :disabled="Add_form.id>0" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="翻译标识" prop="trans_symbol">
            <el-input v-model="Add_form.trans_symbol" clearable placeholder="请输入翻译标识" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script language="JavaScript">
    const viewPath = '{$viewPath}';
  </script>
  <script src="/static/admin/js/language/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/language_pag/index.html
New file
@@ -0,0 +1,151 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <link rel="stylesheet" href="/static/admin/css/image_viewer.css" media="all">
    <style>
      .previewImage {
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="{$other['title']}" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">{$other['title']}</span>
                  &emsp;
                </div>
              </template>
              <el-form label-width="auto">
                <!-- <el-select v-model="searchdata.platform_type" style="width: 180px;margin-right: 10px;" @change="index">
                  <el-option v-for="item in platformTypeList" :key="item.id" :label="item.name" :value="item.id" />
                </el-select> -->
                <el-input v-model="searchdata.type" placeholder="请输入类型" style="width: 180px;margin-right: 10px;" clearable></el-input>
                <el-input v-model="searchdata.name" placeholder="请输入名称" style="width: 180px;margin-right: 10px;" clearable></el-input>
                <el-input v-model="searchdata.value" placeholder="请输入值" style="width: 180px;" clearable></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button> <el-button type="warning" @click="createJson()">生成json文件</el-button>
              </el-form>
              <br />
              <el-tabs v-model="langs.symbol" @tab-change="handChange">
                <el-tab-pane v-for="(item, index) in langs.list" :key="index" :label="item.name" :name="item.symbol" lazy></el-tab-pane>
              </el-tabs>
              <el-button type="primary" icon="Plus" @click="handleAdd" v-if="active==0">新增</el-button>
              <el-button @click="handleSync" v-if="active!=0">
                同步
              </el-button>
              <el-button @click="handleTrans" v-if="active!=0">
                翻译
              </el-button>
              <el-table :data="list" v-loading="loading.list" border style="width: 100%;margin-top: 10px;" :stripe="true" ref="tableRef">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="type" label="类型" width="150">
                  <template #default="scope">
                    <div @click="copyToClipboard(scope.row,1)">
                      {{scope.row.type}}
                    </div>
                  </template>
                </el-table-column>
                <el-table-column prop="name" label="名称" width="300">
                  <template #default="scope">
                    <div @click="copyToClipboard(scope.row,2)">
                      {{scope.row.name}}
                    </div>
                  </template>
                </el-table-column>
                <el-table-column prop="symbol" label="引用方式">
                  <template #default="scope">
                    <div @click="copyToClipboard(scope.row,3)">
                      t('{{scope.row.type}}.{{scope.row.name}}','{{scope.row.from_value}}')
                    </div>
                  </template>
                </el-table-column>
                <el-table-column prop="from_value" label="源语言" v-if="active!=0">
                  <template #default="scope">
                    <div @click="copyToClipboard(scope.row,4)">
                      {{scope.row.from_value}}
                    </div>
                  </template>
                </el-table-column>
                <el-table-column prop="value" label="值">
                  <template #default="scope">
                    <div @click="copyToClipboard(scope.row,4)">
                      {{scope.row.value}}
                    </div>
                  </template>
                </el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="150" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                    <el-button type="warning" @click="clearValue(scope.$index)">清空值</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="800px">
        <el-form ref="Add_form" :rules="rules" :model="Add_form" label-width="120px">
          <!-- <el-form-item label="平台类型" prop="platform_type">
            <el-select v-model="Add_form.platform_type" style="width: 180px;margin-right: 10px;" @change="index">
              <el-option v-for="item in platformTypeList" :key="item.id" :label="item.name" :value="item.id" />
            </el-select>
          </el-form-item> -->
          <el-form-item label="类型" prop="type">
            <el-input v-model="Add_form.type" clearable placeholder="请输入类型" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="名称" prop="name">
            <el-input v-model="Add_form.name" clearable placeholder="请输入名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="值" prop="value">
            <el-input v-model="Add_form.value" clearable placeholder="请输入值" style="width:260px;"></el-input>
            <div class="form-tips" v-if="mode == 'edit'" style="margin-left: 10px;">源语言:{{Add_form.from_value}}</div>
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading.add" type="primary" @click="submit">
              <span v-if="!loading.add">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script language="JavaScript">
    const viewPath = '{$viewPath}';
  </script>
  <script src="/static/admin/js/language_pag/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/login/index.html
New file
@@ -0,0 +1,112 @@
<!DOCTYPE HTML>
<html>
    <head>
        <title>账号登录</title>
        <link rel="shortcut icon" href="/favicon.ico">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="/static/supplier/login/login.css?x=1">
        <include file="common:element-plus">
    </head>
    <body>
        <div class="loginbg"></div>
        <input type="hidden" id="backurl" value="{$SERVER.HTTP_REFERER|default=''}">
        <div id="login_app" class="login-bg">
            <div class="login-register">
                <div class="register-form">
                    <div class="text-center font-size-20 mb30">
                        <div class="mt45">
                            <img src="/static/supplier/login/logo-m.png" style="height:100px;border-radius: 49%;" />
                        </div>
                        <p class="mt10">总管理后台登录</p>
                    </div>
                    <br />
                    <el-form :model="form" label-width="auto" style="max-width: 600px"  @keydown.enter="login">
                        <el-form-item>
                            <el-input v-model="userdata.username" placeholder="请输入账号" size="large" prefix-icon="user"></el-input>
                        </el-form-item>
                        <el-form-item>
                            <el-input v-model="userdata.password" type="password" placeholder="请输入密码" size="large" prefix-icon="lock"></el-input>
                        </el-form-item>
                        <br />
                        <el-button type="primary" @click="login" size="large" class="btn_block">登录</el-button>
                    </el-form>
                </div>
            </div>
        </div>
        <script>
            var backurl = $('#backurl').val();
            const { ElMessage } = ElementPlus;
            const App = {
                data() {
                    return {
                        userdata: {
                            username: '',
                            password: '',
                            backurl: backurl,
                        },
                    };
                },
                mounted() { },
                created() { },
                methods: {
                    login() {
                        let that = this;
                        if (that.userdata.username == '') {
                            ElMessage({
                                message: "请输入账号",
                                type: 'error',
                                plain: true,
                                duration: 2000,
                            });
                            return;
                        }
                        if (that.userdata.password == '') {
                            ElMessage({
                                message: "请输入密码",
                                type: 'error',
                                plain: true,
                                duration: 2000,
                            });
                            return;
                        }
                        let url = "/admin/login/login.html"
                        postRequest(url, that.userdata).then(res => {
                            if (res.data.code == 200) {
                                that.$message({
                                    message: res.data.message,
                                    type: 'success',
                                    plain: true,
                                    duration: 500,
                                    onClose: function () {
                                        document.location = res.data.url;
                                    },
                                })
                                //
                            }
                            else {
                                that.$message({
                                    message: res.data.message,
                                    type: 'error',
                                    plain: true,
                                    duration: 3000,
                                })
                            }
                        });
                    },
                }
            };
            const app = Vue.createApp(App);
            for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
                app.component(key, component)
            }
            app.use(ElementPlus, {
                locale: ElementPlusLocaleZhCn,
            });
            app.mount("#login_app");
        </script>
    </body>
</html>
app/admin/view/logistics_vas/index.html
New file
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="增值服务管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">增值服务管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入增值服务名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="vas_code" label="增值服务编码"></el-table-column>
                <el-table-column prop="vas_name" label="增值服务名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="增值服务编码">
            <el-input v-model="Add_form.vas_code" placeholder="请输入增值服务编码" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="增值服务名称">
            <el-input v-model="Add_form.vas_name" placeholder="请输入增值服务名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/logistics_vas/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/menu/index.html
New file
@@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script>
            $(function () {
                $(".el-sub-menu__title").hover(function () {
                    $(this).addClass('hovercurrent');
                }, function () {
                    $(this).removeClass('hovercurrent');
                });
            });
        </script>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="后台菜单管理" two_word="{$other.title}" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>{$other.title}</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add()">添加</el-link>
                                </div>
                            </template>
                            <el-table :data="list" :tree-props="{children: 'children'}" row-key="id" default-expand-all border style="width: 100%" ref="tableRef">
                                <el-table-column label="菜单名称" prop="title"></el-table-column>
                                <el-table-column label="菜单索引" prop="menu_index"></el-table-column>
                                <el-table-column label="连接地址" prop="menu_url"></el-table-column>
                                <el-table-column label="Icon图标" prop="menu_icon" align="center"></el-table-column>
                                <el-table-column label="显示/隐藏" width="120" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.show_menu" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0"
                                                   inline-prompt active-text="显示" inactive-text="隐藏" @change="updateShowMenu(scope.row)" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="排序" prop="order_id" align="center" width="100"></el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="150" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="Edit(scope.row)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <!-- 添加一级菜单 -->
            <el-dialog :title="Add_title" v-model="dialogVisible_menu" :show-close="true" width="30%">
                <el-tabs v-model="languages.symbol" @tab-change="handChange">
                    <el-tab-pane v-for="(item, index) in languages.list" :key="index" :label="item.name" :name="item.symbol" lazy></el-tab-pane>
                </el-tabs>
                <el-form ref="form" :model="Add_form" label-width="100px">
                    <el-form-item label="所属父类">
                        <el-select v-model="Add_form.father_id" placeholder="选择上级菜单" filterable clearable style="width: 80%;">
                            <el-option label="--" :value="0"></el-option>
                            <el-option v-for="(item,i) in list" :key="i" :label="item.title" :value="item.id"></el-option>
                        </el-select>
                    </el-form-item>
                    <el-form-item label="菜单名称">
                        <el-input v-model="Add_form.title" placeholder="请输入菜单名称" style="width: 80%;"></el-input>
                        <el-button type="primary" size="small" style="margin-left: 10px;" v-if="active!=0" @click="handTranslation('title')" :loading="loadingTran">翻译</el-button>
                    </el-form-item>
                    <el-form-item label="菜单索引">
                        <el-input v-model="Add_form.menu_index" placeholder="请输入菜单索引" style="width: 80%;"></el-input>
                    </el-form-item>
                    <el-form-item label="Icon图标">
                        <el-input v-model="Add_form.menu_icon" placeholder="请输入icon" style="width: 80%;"></el-input>
                    </el-form-item>
                    <el-form-item label="连接地址">
                        <el-input v-model="Add_form.menu_url" placeholder="请输入连接地址" style="width: 80%;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="Add_form.id>0" label="排序值">
                        <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveMenu">保存</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script language="JavaScript">
        const viewPath = '{$viewPath}';
    </script>
    <script src="/static/admin/js/menu/index.js"></script>
</html>
app/admin/view/message/create.html
New file
@@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
        <style>
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="消息管理" two_word="编辑商城消息 " />
                    </el-header>
                    <el-main>
                        <input type="hidden" id="message_id" value="{$other.id}">
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header"><span data-i18n="goods_management">{{message_title}}</span>
                                </div>
                            </template>
                            <el-form :rules="messageRules" ref="Form" :model="messageInfo" :before-close="closeForm" label-width="150px">
                                <el-form-item label="消息标题" prop="title">
                                    <el-input v-model="messageInfo.title"></el-input>
                                </el-form-item>
                                <el-form-item label="消息类别" prop="title">
                                    <el-select v-model="messageInfo.msg_category_id" placeholder="请选择消息分类" @change="handleCategory" style="width: 220px">
                                        <el-option v-for="item in msgCategoryList[0]" :key="item.id" :label="item.title" :value="item.id" />
                                    </el-select>
                                    <el-select v-model="messageInfo.sub_msg_category_id" placeholder="请选择二级消息分类" clearable style="width: 220px; margin-left: 10px;">
                                        <el-option label="默认消息类别" :value="0"></el-option>
                                        <el-option v-if="curr_category_id>0" v-for="item in msgCategoryList[curr_category_id]" :key="item.id" :label="item.title" :value="item.id" />
                                    </el-select>
                                </el-form-item>
                                <el-form-item label="发布时间" prop="publish_time">
                                    <el-date-picker value-format="YYYY-MM-DD hh:mm:ss" type="datetime" v-model="messageInfo.publish_time" clearable
                                                    placeholder="请输入发布时间"></el-date-picker>
                                </el-form-item>
                                <el-form-item label="消息内容" prop="content">
                                    <textarea class="textarea" :id="'tinymce-content'" v-model="messageInfo.content" style="height: 300px;"></textarea>
                                </el-form-item>
                                <template v-if="messageInfo.id && messageInfo.id>0">
                                    <el-form-item label="消息附件">
                                        <el-card style="width: 100%">
                                            <template #header>
                                                <div class="card-header">
                                                    <el-upload ref="upload" class="upload-demo" :show-file-list="false" :http-request="uploadAttachment" action="" :auto-upload="true">
                                                        <template #trigger>
                                                            <el-link type="primary" class="header_add_btn" icon="upload-filled" :underline="false" href="javascript:void(0)">
                                                                <span>上传</span>
                                                            </el-link>
                                                        </template>
                                                    </el-upload>
                                                </div>
                                            </template>
                                            <el-table :data="attachmentList" v-loading="loading_attachment" border style="width: 100%" :stripe="true">
                                                <el-table-column prop="title" label="文件名称" align="center">
                                                    <template #default="scope">
                                                        <el-link :href="scope.row.filename" target="_blank" type="success">{{ scope.row.title }}</el-link>
                                                    </template>
                                                </el-table-column>
                                                <el-table-column prop="filesize" label="文件大小" align="center"></el-table-column>
                                                <el-table-column label="操作选项" align="center">
                                                    <template #default="scope">
                                                        <el-button icon="delete" type="danger" @click="deleteAttachment(scope.$index)"></el-button>
                                                    </template>
                                                </el-table-column>
                                            </el-table>
                                        </el-card>
                                    </el-form-item>
                                </template>
                                <el-form-item>
                                    <el-button type="primary" :loading="loading.addLoading" @click="submitForm">
                                        <span v-if="!loading.addLoading">保 存</span>
                                        <span v-else>提 交 中...</span>
                                    </el-button><el-button @click="backForm">返回</el-button>
                                </el-form-item>
                            </el-form>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script language="JavaScript">
        const viewPath = '{$viewPath}';
    </script>
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/message/create.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/message/index.html
New file
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
        <style>
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="消息管理" two_word="商城消息 " />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header"><span data-i18n="goods_management">商城消息</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" @click="create()" href="javascript:void(0)"><span
                                              data-i18n="add">添加</span></el-link>
                                </div>
                            </template>
                            <el-form :model="searchdata" label-width="auto">
                                <el-input v-model="searchdata.kw" placeholder="请输入标题" style="width: 200px; margin-right: 10px;" clearable></el-input>
                                &ensp;<el-button type="success" icon="Search" @click="getMessageList()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="messageList" v-loading="loading.loading" border style="width: 100%;position: relative;z-index: 0 !important;" ref="tableRef">
                                <el-table-column prop="title" label="消息标题" show-overflow-tooltip align="left"></el-table-column>
                                <el-table-column prop="catetitle" label="消息类别" show-overflow-tooltip width="180" align="center"></el-table-column>
                                <el-table-column prop="publish_time" label="发布时间" width="180" align="center"></el-table-column>
                                <el-table-column prop="views" label="浏览次数" width="180" align="center"></el-table-column>
                                <el-table-column label="发布状态" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch @change="updateExt(scope.row,'status')" v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc"
                                                   :active-value="1" :inactive-value="0" inline-prompt active-text="发布" inactive-text="草稿" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="200" :align="alignValue(300)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="editMessage(scope.row.id)"></el-button>
                                        <el-button icon="delete" type="danger" @click="deleteMessage(scope.$index)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script language="JavaScript">
        const viewPath = '{$viewPath}';
    </script>
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/message/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/msg_category/index.html
New file
@@ -0,0 +1,94 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script>
            $(function () {
                $(".el-sub-menu__title").hover(function () {
                    $(this).addClass('hovercurrent');
                }, function () {
                    $(this).removeClass('hovercurrent');
                });
            });
        </script>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边消息分类 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide.one.text}" two_word="{$guide.two.text}" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>{$other.title}</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add()">添加</el-link>
                                </div>
                            </template>
                            <el-table :data="list" :tree-props="{children: 'children'}" row-key="id" default-expand-all border style="width: 100%" ref="tableRef">
                                <el-table-column label="消息分类名称" prop="title"></el-table-column>
                                <el-table-column label="显示/隐藏" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.ifshow" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0"
                                                   inline-prompt active-text="显示" inactive-text="隐藏" @change="updateShowCate(scope.row)" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="排序" prop="order_id" align="center"></el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="Edit(scope.row)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <!-- 添加一级消息分类 -->
            <el-dialog :title="Add_title" v-model="dialogVisible" :show-close="true" width="30%">
                <el-form ref="form" :model="Add_form" label-width="100px">
                    <el-form-item label="所属父类">
                        <el-select v-model="Add_form.father_id" placeholder="选择上级消息分类" filterable clearable style="width: 90%;">
                            <el-option label="顶级分类" :value="0"></el-option>
                            <el-option v-for="(item,i) in list" :key="i" :label="item.title" :value="item.id"></el-option>
                        </el-select>
                    </el-form-item>
                    <el-form-item label="消息分类名称">
                        <el-input v-model="Add_form.title" placeholder="请输入消息分类名称" style="width: 90%;"></el-input>
                    </el-form-item>
                    <el-form-item v-if="Add_form.id>0" label="排序值">
                        <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" :loading="ifsubmit" @click="saveCate">保存</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script language="JavaScript">
        const viewPath = '{$viewPath}';
    </script>
    <script src="/static/admin/js/msg_category/index.js"></script>
</html>
app/admin/view/notice/create.html
New file
@@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
        <style>
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="消息管理" two_word="编辑商城公告 " />
                    </el-header>
                    <el-main>
                        <input type="hidden" id="notice_id" value="{$other.id}">
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header"><span data-i18n="goods_management">{{notice_title}}</span>
                                </div>
                            </template>
                            <el-form :rules="noticeRules" ref="Form" :model="noticeInfo" :before-close="closeForm" label-width="150px">
                                <el-form-item label="公告标题" prop="title">
                                    <el-input v-model="noticeInfo.title"></el-input>
                                </el-form-item>
                                <el-form-item label="发布时间" prop="publish_time">
                                    <el-date-picker value-format="YYYY-MM-DD hh:mm:ss" type="datetime" v-model="noticeInfo.publish_time" clearable
                                                    placeholder="请输入发布时间"></el-date-picker>
                                </el-form-item>
                                <el-form-item label="公告内容" prop="content">
                                    <textarea class="textarea" :id="'tinymce-content'" v-model="noticeInfo.content" style="height: 300px;"></textarea>
                                </el-form-item>
                                <template v-if="noticeInfo.id && noticeInfo.id>0">
                                    <el-form-item label="公告附件">
                                        <el-card style="width: 100%">
                                            <template #header>
                                                <div class="card-header">
                                                    <el-upload ref="upload" class="upload-demo" :show-file-list="false" :http-request="uploadAttachment" action="" :auto-upload="true">
                                                        <template #trigger>
                                                            <el-link type="primary" class="header_add_btn" icon="upload-filled" :underline="false" href="javascript:void(0)">
                                                                <span>上传</span>
                                                            </el-link>
                                                        </template>
                                                    </el-upload>
                                                </div>
                                            </template>
                                            <el-table :data="attachmentList" v-loading="loading_attachment" border style="width: 100%" :stripe="true">
                                                <el-table-column prop="title" label="文件名称" align="center">
                                                    <template #default="scope">
                                                        <el-link :href="scope.row.filename" target="_blank" type="success">{{ scope.row.title }}</el-link>
                                                    </template>
                                                </el-table-column>
                                                <el-table-column prop="filesize" label="文件大小" align="center"></el-table-column>
                                                <el-table-column label="操作选项" align="center">
                                                    <template #default="scope">
                                                        <el-button icon="delete" type="danger" @click="deleteAttachment(scope.$index)"></el-button>
                                                    </template>
                                                </el-table-column>
                                            </el-table>
                                        </el-card>
                                    </el-form-item>
                                </template>
                                <el-form-item>
                                    <el-button type="primary" :loading="loading.addLoading" @click="submitForm">
                                        <span v-if="!loading.addLoading">保 存</span>
                                        <span v-else>提 交 中...</span>
                                    </el-button><el-button @click="backForm">返回</el-button>
                                </el-form-item>
                            </el-form>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/notice/create.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/notice/index.html
New file
@@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
        <style>
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="消息管理" two_word="商城公告 " />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header"><span data-i18n="goods_management">商城公告</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" @click="create()" href="javascript:void(0)"><span
                                              data-i18n="add">添加</span></el-link>
                                </div>
                            </template>
                            <el-form :model="searchdata" label-width="auto">
                                <el-input v-model="searchdata.kw" placeholder="请输入标题" style="width: 200px; margin-right: 10px;" clearable></el-input>
                                &ensp;<el-button type="success" icon="Search" @click="getNoticeList()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="noticeList" v-loading="loading.loading" border style="width: 100%;position: relative;z-index: 0 !important;" ref="tableRef">
                                <el-table-column prop="title" label="公告标题" show-overflow-tooltip align="left"></el-table-column>
                                <el-table-column prop="publish_time" label="发布时间" width="180" align="center"></el-table-column>
                                <el-table-column prop="views" label="浏览次数" width="180" align="center"></el-table-column>
                                <el-table-column label="发布状态" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch @change="updateExt(scope.row,'status')" v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc"
                                                   :active-value="1" :inactive-value="0" inline-prompt active-text="发布" inactive-text="草稿" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="200" :align="alignValue(300)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="editNotice(scope.row.id)"></el-button>
                                        <el-button icon="delete" type="danger" @click="deleteNotice(scope.$index)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/notice/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/partner_school/index.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="合作学校管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">合作学校管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入合作学校名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="school_name" label="合作学校名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="合作学校名称">
            <el-input v-model="Add_form.school_name" placeholder="请输入合作学校名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/partner_school/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/pay_bank/index.html
New file
@@ -0,0 +1,151 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <link rel="stylesheet" href="/static/admin/css/image_viewer.css" media="all">
    <style>
      .previewImage {
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="{$other['title']}" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">{$other['title']}</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入开户行/账户名称/账户" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="payee_name" label="开户行"></el-table-column>
                <el-table-column prop="account_name" label="账户名称"></el-table-column>
                <el-table-column prop="account" label="账户"></el-table-column>
                <el-table-column prop="img_url" label="logo">
                  <template #default="scope">
                    <el-image :src="scope.row.img_url" :preview-src-list="[scope.row.img_url]" style="width: 40px;height: 40px;"></el-image>
                  </template>
                </el-table-column>
                <el-table-column label="线下支付" width="150" align="center">
                  <template #default="scope">
                    <el-switch @change="updateExt(scope.row,'isoffline')" v-model="scope.row.isoffline" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc"
                               :active-value="1" :inactive-value="0" inline-prompt active-text="是" inactive-text="否" />
                  </template>
                </el-table-column>
                <el-table-column label="线上支付" width="150" align="center">
                  <template #default="scope">
                    <el-switch @change="updateExt(scope.row,'isonline')" v-model="scope.row.isonline" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc"
                               :active-value="1" :inactive-value="0" inline-prompt active-text="是" inactive-text="否" />
                  </template>
                </el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="开户行">
            <el-input v-model="Add_form.payee_name" placeholder="请输入开户行" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="账户名称">
            <el-input v-model="Add_form.account_name" placeholder="请输入账户名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="账户">
            <el-input v-model="Add_form.account" placeholder="请输入账户" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="LOGO:" prop="img_url">
            <el-upload :show-file-list="false" list-type="picture-card" accept="png,jpg,jpeg,gif" :before-upload="handleBeforeUpload" :http-request="uploadLogo">
              <template #trigger>
                <template v-if="Add_form.img_url">
                  <img class="el-upload-list__item-thumbnail" :src="Add_form.img_url" style="width: 100%;height: 100%;" alt="" />
                  <div style="position: absolute; bottom: 0px;right: 0px;"></div>
                </template>
                <template v-else>
                  <el-icon>
                    <Plus />
                  </el-icon>
                </template>
              </template>
              <template #tip>
                <div class="el-upload__tip">
                  <template v-if="Add_form.img_url"><span @click="handleView" :preview-src-list="[Add_form.img_url]"
                          style="color: #CB261C; cursor: pointer; margin-right: 10px;">预览</span></template>
                  限1张,格式为png、jpg、jpeg,大小不超过4M
                </div>
              </template>
            </el-upload>
            <el-dialog v-model="dialogVisible_img">
              <img w-full :src="dialogImageUrl" class="previewImage" alt="Preview Image" />
            </el-dialog>
          </el-form-item>
          <el-form-item label="备注">
            <el-input v-model="Add_form.remark" placeholder="请输入备注" type="textarea" style="width:90%;" :rows="3"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script language="JavaScript">
    const viewPath = '{$viewPath}';
  </script>
  <script src="/static/admin/js/pay_bank/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/payment_tool/index.html
New file
@@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="{$other.title}" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">{$other.title}</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="payment_tool_id" label="编号" width="80"></el-table-column>
                <el-table-column prop="payment_tool_name" label="收款工具名称"></el-table-column>
                <el-table-column label="是否开通" width="150" align="center">
                  <template #default="scope">
                    <el-switch @change="updateExt(scope.row,'is_show')" v-model="scope.row.is_show" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                               :inactive-value="0" inline-prompt active-text="是" inactive-text="否" />
                  </template>
                </el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="货币名称">
            <el-input v-model="Add_form.payment_tool_name" placeholder="请输入收款工具名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.payment_tool_id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script language="JavaScript">
    const viewPath = '{$viewPath}';
  </script>
  <script src="/static/admin/js/payment_tool/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/platform_logistics_product/index.html
New file
@@ -0,0 +1,99 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="平台物流产品管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">平台物流产品管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入平台物流产品名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true" ref="tableRef">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="product_name_cn" label="平台物流产品中文名称" width="180"></el-table-column>
                <el-table-column prop="product_name_en" label="平台物流产品英文名称"></el-table-column>
                <el-table-column prop="cycle_start" label="时间周期-最少天数"></el-table-column>
                <el-table-column prop="cycle_end" label="时间周期-最大天数"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="200" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="200px">
          <el-form-item label="平台物流产品中文名称">
            <el-input v-model="Add_form.product_name_cn" placeholder="请输入平台物流产品中文名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="平台物流产品英文名称">
            <el-input v-model="Add_form.product_name_en" placeholder="请输入平台物流产品英文名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="时间周期-最少天数">
            <el-input-number v-model="Add_form.cycle_start" placeholder="请输入最少天数" style="width:260px;" />
          </el-form-item>
          <el-form-item label="时间周期-最大天数">
            <el-input-number v-model="Add_form.cycle_end" placeholder="请输入最大天数" style="width:260px;" />
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" style="width:260px;" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/platform_logistics_product/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/platform_region/index.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="平台所属区域管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">平台所属区域管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入区域名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="region_name" label="区域名称"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="区域名称">
            <el-input v-model="Add_form.region_name" placeholder="请输入区域名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/platform_region/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/publish_order/create.html
New file
@@ -0,0 +1,840 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8" />
    <include file="common:title" />
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <include file="common:header" />
    <include file="common:element-plus" />
    <script src="/static/tinymce/js/tinymce/tinymce.min.js"></script>
    <style>
      /* .goods_card .el-tabs__item {
        padding: 0 50px;
        height: 50px;
        line-height: 50px;
        font-size: 16px;
      } */
      .goods_description .el-tabs__item {
        padding: 0 20px;
        height: 40px;
        line-height: 40px;
        font-size: 16px;
      }
      .goods_card>.el-tabs__header .el-tabs__item.is-active {
        color: #fff !important;
        background-color: #35aca6;
      }
    </style>
    <style>
      .crSubItem {
        margin-bottom: 20px;
      }
      .SubTi {
        margin-bottom: 10px;
      }
      .SubTi h4 {
        line-height: 30px;
        margin-right: 10px;
        font-size: 15px;
      }
      .subSec {
        padding: 10px 20px 0px 20px;
        background: #f9f9f9;
        border: 1px solid #e7e7e7;
        border-radius: 2px;
      }
      .tox .tox-edit-area::before {
        border: 0px !important;
      }
      .ml-3 {
        margin-left: 0.75rem;
      }
      .otherParameter .el-textarea__inner {
        height: 120px;
      }
      .num {
        font-size: 12px;
      }
    </style>
    <style>
      .form_submit_box {
        position: fixed;
        bottom: 0px;
        left: 250px;
        right: 0;
        text-align: center;
        padding: 35px 0;
        background-color: #fff;
        z-index: 10;
        border-top: 1px solid #e7e7e7;
      }
      .disdetail .el-dialog__header {
        border-bottom: 1px solid #e7e7e7;
        position: absolute;
        top: 16px;
        left: 16px;
        right: 0px;
        height: 20px;
      }
      .disdetail .SubTi h4 {
        font-weight: bold;
      }
      .disdetail .el-row {
        height: 30px;
        line-height: 30px;
        margin-bottom: 20px;
      }
      .el-tabs__new-tab {
        margin: 10px 10px 10px 10px;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <input type="hidden" id="publish_order_id" value="{$other['id']}" />
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="刊登" two_word="审核刊登单" />
          </el-header>
          <el-main style="position: relative;">
            <el-card style="width:100%;margin-bottom: 103px;">
              <template #header>
                <div class="card-header">
                  <span data-i18n="thirdpartystock_management">审核刊登单</span>
                </div>
              </template>
              <el-card style="max-width:100%;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">基础信息</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                  <el-form-item label="刊登类型">
                    <el-radio-group v-model="publishOrderInfoForm.public_type" disabled class="ml-4">
                      <el-radio :value="1">无属性</el-radio>
                    </el-radio-group>
                  </el-form-item>
                  <template v-if="publishOrderInfoForm.supplier_goods_code!==null">
                    <el-form-item label="选择分类">
                      <el-cascader v-model="publishOrderInfoForm.cate_code" disabled :options="categoryList" clearable style="width:350px;" @change="handleCategoryChange" />
                    </el-form-item>
                    <el-form-item label="品牌名称">
                      <el-select v-model="publishOrderInfoForm.brand_code" disabled placeholder="请选择品牌名称" style="width:350px;">
                        <el-option v-for="freight_attr_item in goodsBrandList" :key="freight_attr_item.attr_code" :label="freight_attr_item.attr_name"
                                   :value="freight_attr_item.attr_code" />
                      </el-select>
                  </template>
                  </el-form-item>
                </el-form>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-if="publishOrderInfoForm.public_type==1">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">商品信息</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                  <el-form-item label="供应商商品编码">
                    <el-input v-model="publishOrderInfoForm.supplier_goods_code" @change="getGoodsInfo" placeholder="请输入供应商商品编码" style="width:350px;"
                              :disabled="publishOrderInfoForm.istemp===1?true:false"></el-input>
                  </el-form-item>
                  <el-form-item label="商品名称">
                    {{publishOrderInfoForm.goods_title_cn}}
                  </el-form-item>
                  <el-form-item label="分销信息">
                    <el-button type="success" @click="showGoodsDisInfo()">查看</el-button>
                  </el-form-item>
                </el-form>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">描述信息</span>
                  </div>
                </template>
                <el-tabs class="goods_description" type="border-card">
                  <el-tab-pane label="英文">
                    <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                      <el-form-item label="标题" :rules="[{required:true}]">
                        {{publishOrderInfoForm.goods_title_en}}
                      </el-form-item>
                      <el-form-item label="描述">
                        <div v-html="publishOrderInfoForm.goods_desc_en"></div>
                      </el-form-item>
                    </el-form>
                  </el-tab-pane>
                  <el-tab-pane label="中文">
                    <el-form label-width="150px" label-position="left" ref="form" :model="publishOrderInfoForm" label-width="100px">
                      <el-form-item label="标题">
                        {{publishOrderInfoForm.goods_title_cn}}
                      </el-form-item>
                      <el-form-item label="描述">
                        <div v-html="publishOrderInfoForm.goods_desc_cn"></div>
                      </el-form-item>
                    </el-form>
                  </el-tab-pane>
                </el-tabs>
              </el-card>
              <el-card style="max-width:100%;margin-top: 20px;" v-loading="loading.loading">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">通用图片</span>
                  </div>
                </template>
                <el-row :gutter="20" style="margin-top: 20px;">
                  <el-col :span="24">
                    <div class="grid-content ep-bg-purple">
                      <template v-for="(item,index) in publishOrderPictureList" :key="index">
                        <el-image style="width: 100px; height: 100px" :src="item.url" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" :preview-src-list="[item.url]" />
                      </template>
                    </div>
                  </el-col>
                </el-row>
              </el-card>
            </el-card>
            <div class="form_submit_box">
              <el-button type="success" @click="reviewPublishOrder(1)">通过审核(刊登)</el-Button>
              <el-button type="danger" @click="showReviewPublishOrder()">不通过审核(刊登)</el-button>
            </div>
          </el-main>
        </el-container>
      </el-container>
      <el-dialog v-model="dialogVisible_Picture">
        <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
      </el-dialog>
      <el-dialog v-model="dialogVisible_reason" style="position: relative;width: 600px;">
        <template #header>
          {{set_nopass_reason_title}}
        </template>
        <el-form label-width="150px" label-position="left" ref="form">
          <el-form-item label="不通过理由">
            <el-input v-model="review_comments" maxlength="30" style="width: 90%" placeholder="请填写不通过理由" type="textarea" show-word-limit />
          </el-form-item>
          <el-form-item>
            <el-button type="danger" @click="reviewPublishOrder(2)">确定不通过</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
      <el-dialog class="disdetail" v-model="dialog.setGoodsDisInfo" :show-close="true" :close-on-click-modal="false" style="position: relative;width: 70%;">
        <template #header>
          {{set_goods_dis_info_title}}
        </template>
        <div style="max-width:100%;max-height: 850px;overflow-y: scroll;margin-top: 50px;">
          <el-card v-loading="loading.goodsDisInfo" style="max-width:100%;">
            <template #header>商品基本信息</template>
            <el-form label-width="150px" label-position="left" ref="form">
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="商品分类">
                    {{goodsDisInfo.first_cate_name}} > {{goodsDisInfo.second_cate_name}} > {{goodsDisInfo.three_cate_name}}
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="供应商商品编码">
                    {{goodsDisInfo.supplier_goods_code}}
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="商品仓库模式">
                    <template v-if="goodsDisInfo.warehouse_mode==1">自建仓</template>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="对接系统">
                    <template v-if="goodsDisInfo.docking_way==0">无</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="定价方式">
                    <template v-if="goodsDisInfo.price_method==1">自主定价</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="货运属性">
                    {{goodsDisInfo.attr_name}}
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="品牌">
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="商品用途">
                    {{goodsDisInfo.goods_purpose}}
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="销售形式">
                    {{goodsDisInfo.sales_form}}
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="8">
                  <el-form-item label="是否侵权">
                    <template v-if="goodsDisInfo.is_tort==0">否</template>
                    <template v-else>是</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="是否停购">
                    <template v-if="goodsDisInfo.is_stop_buy==0">否</template>
                    <template v-else>是</template>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="负责人">
                    {{goodsDisInfo.recommend_man}}
                  </el-form-item>
                </el-col>
              </el-row>
            </el-form>
          </el-card>
          <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
            <el-tab-pane label="分销区域">
              <el-table :data="disAreaList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="分销区域">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="one_shipment" label="销售模式"></el-table-column>
                <el-table-column prop="one_shipment" label="配送方式">
                  <template #default="scope">
                    <template v-if="scope.row.distribution_area_id.dis_model==1">海外仓配送</template>
                  </template>
                </el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="分销库存">
              <el-table :data="disStockList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="区域">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="third_party_stock_name" label="供应商仓库"></el-table-column>
                <!-- <el-table-column prop="docking_code" label="平台仓库"></el-table-column> -->
                <el-table-column prop="supplier_stock_amount" label="供应商库存量"></el-table-column>
                <el-table-column prop="platform_stock_amount" label="平台库存量"></el-table-column>
                <!-- <el-table-column prop="one_shipment" label="平台库存量同步供应商库存量"></el-table-column>
            <el-table-column prop="one_shipment" label="税号"></el-table-column> -->
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="代发价格">
              <el-table :data="disPriceList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="区域">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="product_name_cn" label="供应商物流产品"></el-table-column>
                <el-table-column label="平台物流产品">Standard Shipping</el-table-column>
                <el-table-column prop="supply_price" label="供货单价"></el-table-column>
                <el-table-column label="平台运费">0.00</el-table-column>
                <el-table-column prop="dis_price" label="分销售价"></el-table-column>
                <el-table-column prop="distribution_area_id" label="币别">
                  <template #default="scope">{{scope.row.distribution_area_id.dis_currency}}</template>
                </el-table-column>
                <el-table-column prop="take_effect_time" label="价格生效时间"></el-table-column>
                <el-table-column prop="package_goods_amount" label="包裹可含商品数量"></el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="退货地址">
              <el-table :data="disReturnGoodsList" border style="width: 100%" :stripe="true">
                <el-table-column prop="distribution_area_id" label="区域" width="80">
                  <template #default="scope">{{scope.row.distribution_area_id.region_name}}</template>
                </el-table-column>
                <el-table-column prop="third_party_stock_name" label="退货仓库" width="150"></el-table-column>
                <el-table-column label="退货地址">
                  <template #default="scope">
                    {{scope.row.stock_address}}
                    {{scope.row.stock_city}}
                    {{scope.row.stock_province}}
                    {{scope.row.stock_country_id}}
                    {{scope.row.stock_post_code}}
                  </template>
                </el-table-column>
                <el-table-column prop="receive_man" label="联系人" width="180"></el-table-column>
                <el-table-column prop="tel" label="联系电话" width="150"></el-table-column>
              </el-table>
            </el-tab-pane>
          </el-tabs>
          <el-tabs type="border-card" v-loading="loading.goodsDisInfo" style="margin-top: 20px;">
            <el-tab-pane label="商品描述">
              <el-tabs type="border-card" class="goods_card" style="margin-top: 20px;">
                <el-tab-pane label="英文">
                  <el-form label-width="150px" label-position="left" label-width="100px">
                    <el-form-item label="标题">
                      {{goodsDisInfo.goods_title_en}}
                    </el-form-item>
                    <el-form-item label="关键词">
                      <template v-for="keyword_item in goodsDisInfo.goods_keyword_en">
                        {{keyword_item}};
                      </template>
                    </el-form-item>
                    <el-form-item label="首段描述">
                      <div v-html="goodsDisInfo.goods_desc_en"></div>
                    </el-form-item>
                  </el-form>
                </el-tab-pane>
                <el-tab-pane label="中文">
                  <el-form label-width="150px" label-position="left" label-width="100px">
                    <el-form-item label="标题">
                      {{goodsDisInfo.goods_title_cn}}
                    </el-form-item>
                    <el-form-item label="关键词">
                      <template v-for="keyword_item in goodsDisInfo.goods_keyword_cn">
                        {{keyword_item}};
                      </template>
                    </el-form-item>
                    <el-form-item label="首段描述">
                      <div v-html="goodsDisInfo.goods_desc_cn"></div>
                    </el-form-item>
                  </el-form>
                </el-tab-pane>
              </el-tabs>
            </el-tab-pane>
            <el-tab-pane label="规格参数">
              <el-form label-width="150px" label-position="left" ref="form" :model="goodsSpecForm" label-width="100px">
                <div class="crSubItem">
                  <div class="SubTi">
                    <h4>净规格</h4>
                    <em></em>
                  </div>
                  <div class="subSec">
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="长(cm)">
                          {{goodsDisInfo.goodsSpecInfo.goods_length}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="宽(cm)">
                          {{goodsDisInfo.goodsSpecInfo.goods_width}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="高(cm)">
                          {{goodsDisInfo.goodsSpecInfo.goods_height}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="重量(kg)">
                          {{goodsDisInfo.goodsSpecInfo.goods_weight}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>
                </div>
                <div class="crSubItem">
                  <div class="SubTi">
                    <h4>包装规格</h4>
                    <em></em>
                  </div>
                  <div class="subSec">
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="长(cm)">
                          {{goodsDisInfo.goodsSpecInfo.spec_length}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="宽(cm)">
                          {{goodsDisInfo.goodsSpecInfo.spec_width}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="高(cm)">
                          {{goodsDisInfo.goodsSpecInfo.spec_height}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="重量(kg)">
                          {{goodsDisInfo.goodsSpecInfo.spec_weight}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>
                </div>
                <div class="crSubItem">
                  <div class="SubTi">
                    <h4>装箱规格</h4>
                    <em></em>
                  </div>
                  <div class="subSec">
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="长(cm)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_length}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="宽(cm)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_width}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="高(cm)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_height}}
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item label="重量(kg)">
                          {{goodsDisInfo.goodsSpecInfo.box_spec_weight}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="20">
                      <el-col :span="6">
                        <el-form-item label="箱率">
                          {{goodsDisInfo.goodsSpecInfo.box_pcs}}
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>
                </div>
              </el-form>
            </el-tab-pane>
            <el-tab-pane label="商品属性">
              <el-card style="max-width:100%;">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">默认属性</span>
                  </div>
                </template>
                <el-form label-width="150px" label-position="left">
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>采购参数</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="出厂价(USD)">
                            {{goodsDisInfo.goodsAttributeInfo.factory_price}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="分销价(USD)">
                            {{goodsDisInfo.goodsAttributeInfo.distribution_price}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="采购周期(天)">
                            {{goodsDisInfo.goodsAttributeInfo.procurement_cycle}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>商品识别码</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="MPN">
                            {{goodsDisInfo.goodsAttributeInfo.mpn}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="JAN">
                            {{goodsDisInfo.goodsAttributeInfo.jan}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="GTIN(UPC)">
                            {{goodsDisInfo.goodsAttributeInfo.gtin_upc}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="GTIN(ISBN)">
                            {{goodsDisInfo.goodsAttributeInfo.gtin_isbn}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="ISBN(EAN)">
                            {{goodsDisInfo.goodsAttributeInfo.isbn_ean}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>面料/材料</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="主材质">
                            {{goodsDisInfo.goodsAttributeInfo.material_main}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="次材质一">
                            {{goodsDisInfo.goodsAttributeInfo.material_one}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="次材质二">
                            {{goodsDisInfo.goodsAttributeInfo.material_two}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="次材质三">
                            <template v-for="material_three_item in goodsDisInfo.goodsAttributeInfo.material_three">
                              {{material_three_item}};
                            </template>
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="详细材质">
                            {{goodsDisInfo.goodsAttributeInfo.material_detailed}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem otherParameter">
                    <div class="SubTi">
                      <h4>其它参数</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <div class="grid-content ep-bg-purple">
                            <el-form-item label="参考链接">
                              {{goodsDisInfo.goodsAttributeInfo.reference_link}}
                            </el-form-item>
                          </div>
                        </el-col>
                        <el-col :span="8">
                          <div class="grid-content">
                            <el-form-item label="包装内含">
                              {{goodsDisInfo.goodsAttributeInfo.packaging_contains}}
                            </el-form-item>
                          </div>
                        </el-col>
                        <el-col :span="8">
                          <div class="grid-content ep-bg-purple">
                            <el-form-item label="产品卖点">
                              {{goodsDisInfo.goodsAttributeInfo.selling_points}}
                            </el-form-item>
                          </div>
                        </el-col>
                      </el-row>
                      <el-row>
                        <el-col :span="12">
                          <div class="grid-content">
                            <el-form-item label="售后配件">
                              <template v-if="goodsDisInfo.goodsAttributeInfo.after_sales_parts==1">是</template>
                              <template v-else>否</template>
                            </el-form-item>
                          </div>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                  <div class="crSubItem">
                    <div class="SubTi">
                      <h4>电池参数</h4>
                      <em></em>
                    </div>
                    <div class="subSec">
                      <el-row>
                        <el-col :span="8">
                          <el-form-item label="电池型号">
                            {{goodsDisInfo.goodsAttributeInfo.battery_type}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="电池电压(V)">
                            {{goodsDisInfo.goodsAttributeInfo.battery_voltage}}
                          </el-form-item>
                        </el-col>
                        <el-col :span="8">
                          <el-form-item label="电池容量(mAh)">
                            {{goodsDisInfo.goodsAttributeInfo.battery_capacity}}
                          </el-form-item>
                        </el-col>
                      </el-row>
                    </div>
                  </div>
                </el-form>
              </el-card>
              <el-card style="max-width:100%;margin-top:20px;">
                <template #header>
                  <div class="card-header">
                    <span style="font-size:14px;font-weight:normal;">扩展属性</span>
                  </div>
                </template>
                <el-row :gutter="20" v-for="(AttributExtendItem,index) in goodsDisInfo.goodsAttributExtendList">
                  <el-col :span="8">
                    <div class="grid-content">
                      <el-form-item label="属性名称">
                        {{AttributExtendItem.define_attribute_name}}
                      </el-form-item>
                    </div>
                  </el-col>
                  <el-col :span="16">
                    <div class="grid-content ep-bg-purple">
                      <el-form-item label="属性值">
                        {{AttributExtendItem.define_attribute_value}}
                      </el-form-item>
                    </div>
                  </el-col>
                </el-row>
              </el-card>
            </el-tab-pane>
            <el-tab-pane label="零售限价">
              <el-table :data="goodsDisInfo.goodsRetailPriceLimitList" border style="width: 100%" :stripe="true">
                <el-table-column label="价格类型" width="180">
                  <template #default="scope">
                    <template v-if="scope.row.price_type==1">日常价</template>
                    <template v-else-if="scope.row.price_type==2">活动价</template>
                  </template>
                </el-table-column>
                <el-table-column label="销售国家">
                  <template #default="scope">
                    {{scope.row.sale_country_code}}
                  </template>
                </el-table-column>
                <el-table-column label="销售平台">
                  <template #default="scope">
                    {{scope.row.sales_platform}}
                  </template>
                </el-table-column>
                <el-table-column label="币别">
                  <template #default="scope">
                    {{scope.row.currency}}
                  </template>
                </el-table-column>
                <el-table-column label="最低零售价">
                  <template #default="scope">
                    {{scope.row.min_retail_price}}
                  </template>
                </el-table-column>
                <el-table-column label="生效时间">
                  <template #default="scope">
                    {{scope.row.start_time}}
                  </template>
                </el-table-column>
                <el-table-column label="失效时间">
                  <template #default="scope">
                    {{scope.row.end_time}}
                  </template>
                </el-table-column>
                </el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="商品标签">
              <el-table :data="goodsDisInfo.goodsLabelList" border style="width: 100%" :stripe="true">
                <el-table-column prop="label_type" label="标签类型" width="280"></el-table-column>
                <el-table-column prop="goods_label" label="商品标签"></el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="限制分销平台">
              <el-row :gutter="20">
                <el-col :span="24">
                  <div class="grid-content">
                    <el-form-item label="是否限制分销平台">
                      <template v-if="goodsDisInfo.is_limit_dis_platform==1">是</template>
                      <template v-else>否</template>
                    </el-form-item>
                  </div>
                </el-col>
              </el-row>
              <el-table v-if="goodsDisInfo.is_limit_dis_platform==1" :data="goodsDisInfo.goodsLimitDisPlatformList" border style="width: 100%" :stripe="true">
                <el-table-column prop="platform_name" label="限制分销平台"></el-table-column>
              </el-table>
            </el-tab-pane>
            <el-tab-pane label="商品图片">
              <el-row :gutter="20">
                <el-col :span="24">
                  <div class="grid-content">
                    <el-button :type="pictureStatuslist[0]==true?'primary':''" @click="setPictureStatus(0)">全部(<span class="num">{{goodsPictureCount.type0??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[1]==true?'primary':''" @click="setPictureStatus(1)">原图(<span class="num">{{goodsPictureCount.type1??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[2]==true?'primary':''" @click="setPictureStatus(2)">普修图(<span class="num">{{goodsPictureCount.type2??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[3]==true?'primary':''" @click="setPictureStatus(3)">精修图(<span class="num">{{goodsPictureCount.type3??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[4]==true?'primary':''" @click="setPictureStatus(4)">主图(<span class="num">{{goodsPictureCount.type4??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[5]==true?'primary':''" @click="setPictureStatus(5)">包装图(<span class="num">{{goodsPictureCount.type5??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[6]==true?'primary':''" @click="setPictureStatus(6)">图片尺寸1000(<span class="num">{{goodsPictureCount.type6??0}}</span>)</el-button>
                    <el-button :type="pictureStatuslist[7]==true?'primary':''" @click="setPictureStatus(7)">图片尺寸1600(<span class="num">{{goodsPictureCount.type7??0}}</span>)</el-button>
                  </div>
                </el-col>
              </el-row>
              <div>
                <el-image v-for="(img,index) in goodsPictureList" style="width: 100px; height: 100px" :src="img.url" @click="previewPictureCard(img)" :fit="fit" />
              </div>
            </el-tab-pane>
          </el-tabs>
          <div style="text-align: center; margin: 20px 0px;" v-if="!loading.dis_loading">
            <el-button @click="dialog.setGoodsDisInfo=false">关闭</el-Button>
          </div>
        </div>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/publish_order/create.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/publish_order/index.html
New file
@@ -0,0 +1,111 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <style>
      .el-table th.el-table__cell,
      .el-table td.el-table__cell,
      .el-select,
      .el-select__wrapper {
        position: unset;
      }
      .el-image-viewer__img {
        width: 50%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="刊登审核" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="goods_management">刊登审核</span>
                </div>
              </template>
              <el-form :model="searchdata" label-width="auto">
                <el-input v-model="searchdata.platform_goods_code" placeholder="平台商品编码" style="width: 200px; margin-right: 10px;"></el-input>
                <el-input v-model="searchdata.supplier_goods_code" placeholder="供应商商品编码" style="width: 200px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="searchPublishOrder()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="PublishOrderList" v-loading="loading.loading" border style="width: 100%;position: relative;z-index: 0 !important;" ref="tableRef">
                <el-table-column align="center" prop="picture" label="图片" show-overflow-tooltip width="100">
                  <template #default="scope">
                    <el-image :src="scope.row.picture" style="width: 60px; height: 60px;" hide-on-click-modal="true" :z-index="99" :preview-src-list="[scope.row.picture]" />
                  </template>
                </el-table-column>
                <el-table-column prop="publish_order_code" label="刊登单号" show-overflow-tooltip width="150"></el-table-column>
                <el-table-column prop="public_type" label="刊登类型" show-overflow-tooltip width="180">
                  <template #default="scope">
                    <template v-if="scope.row.public_type == 1">无属性</template>
                    <template v-else-if="scope.row.public_type == 2">多属性</template>
                  </template>
                </el-table-column>
                <el-table-column prop="goods_title_cn" label="中文标题"></el-table-column>
                <el-table-column label="刊登分类">
                  <template #default="scope">
                    {{scope.row.first_cate_name}}/{{scope.row.second_cate_name}}/{{scope.row.three_cate_name}}
                  </template>
                </el-table-column>
                <el-table-column prop="supplier_goods_code" label="供应商商品编码" width="150"></el-table-column>
                <el-table-column label="刊登状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.publish_status == 0">
                      <el-button type="danger">未刊登</el-button>
                    </template>
                    <template v-else-if="scope.row.publish_status == 1"><el-button type="success">已刊登</el-button></template>
                  </template>
                </el-table-column>
                <el-table-column label="审核状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.audit_status == 0">待提交</template>
                    <template v-else-if="scope.row.audit_status == 1">审核通过</template>
                    <template v-else-if="scope.row.audit_status == 2">审核中</template>
                    <template v-else-if="scope.row.audit_status == 3">审核不通过</template>
                  </template>
                </el-table-column>
                <el-table-column prop="review_comments" label="审核意见" show-overflow-tooltip width="180"></el-table-column>
                <el-table-column prop="add_time" label="创建时间" width="180"></el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button type="primary" @click="editPublishOrder(scope.row.id)">审核</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
        </el-container>
      </el-container>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/publish_order/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/remit_record/index.html
New file
@@ -0,0 +1,166 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <style>
            /* 解决图片放大时层显示问题 */
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide['one']['text']}" two_word="{$guide['two']['text']}" />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="goods_brand_management">{$other['title']}</span>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchData.kw" placeholder="请输入关键词" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" icon="Search" @click="getRemitRecordList()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="list" v-loading="loading" border style="width: 100%" :stripe="true" ref="tableRef">
                                <el-table-column type="index" label="编号" width="80" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="payee_name" label="汇款方式" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="account_name" label="收款账户信息" show-overflow-tooltip>
                                    <template #default="scope">
                                        {{scope.row.account_name}}<br>
                                        {{scope.row.account}}
                                    </template>
                                </el-table-column>
                                <el-table-column prop="remit_amount" label="汇款金额" width="100" show-overflow-tooltip>
                                    <template #default="scope">
                                        {{scope.row.asset_name}} {{scope.row.remit_amount}}
                                    </template>
                                </el-table-column>
                                <el-table-column prop="service_charge" label="手续费" width="100" show-overflow-tooltip>
                                    <template #default="scope">
                                        <template v-if="scope.row.status==1">{{scope.row.service_charge}}</template>
                                        <template v-else>-</template>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="remittor_name" label="汇款人账户信息" show-overflow-tooltip>
                                    <template #default="scope">
                                        {{scope.row.remittor_name}}<br>
                                        {{scope.row.remittor_account}}
                                    </template>
                                </el-table-column>
                                <el-table-column prop="remit_transaction_number" label="汇款交易号" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="remit_date_time" label="汇款日期" align="center" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="add_time" label="系统时间" align="center" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="voucher_url" label="转账截图" width="100" show-overflow-tooltip>
                                    <template #default="scope">
                                        <el-image :src="scope.row.voucher_url" :preview-src-list="[scope.row.voucher_url]" style="width: 40px;height: 40px;"></el-image>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="real_name" label="审核状态" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                                        <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                                        <template v-else-if="scope.row.status==2"><el-tag type="info">未通过审核</el-tag></template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button type="primary" :disabled="scope.row.status==0?false:true" @click="showRecord(scope.row)">审核</el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchData.page" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchData.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-dialog title="汇款信息" width="1200px" align-center="true" class="icon-dialog" v-model="dialogRecord" :before-close="closeForm" append-to-body>
                <el-card style="width: 100%">
                    <el-form :rules="assetRules" ref="assetForm" :inline-message="true" :model="assetInfo" :validate-on-rule-change="false" label-width="200px">
                        <el-form-item label="汇款方式:">
                            {{recordInfo.payee_name}}
                        </el-form-item>
                        <el-form-item label="收款账户名:">
                            <p>{{recordInfo.account_name}}</p>
                        </el-form-item>
                        <el-form-item label="收款账户:">
                            <p>{{recordInfo.account}}</p>
                        </el-form-item>
                        <el-form-item label="汇款币别:">
                            {{recordInfo.asset_name}}
                        </el-form-item>
                        <el-form-item label="汇款金额:">
                            {{recordInfo.asset_name}} {{recordInfo.remit_amount}}
                        </el-form-item>
                        <el-form-item label="汇款人账户名称:">
                            {{recordInfo.remittor_name}}
                        </el-form-item>
                        <el-form-item label="汇款人账户:">
                            {{recordInfo.remittor_account}}
                        </el-form-item>
                        <el-form-item label="汇款交易号:">
                            {{recordInfo.remit_transaction_number}}
                        </el-form-item>
                        <el-form-item label="汇款日期:">
                            {{recordInfo.remit_date_time}}
                        </el-form-item>
                        <el-form-item label="转账截图:" prop="voucher_url">
                            <el-image :src="recordInfo.voucher_url" :preview-src-list="[recordInfo.voucher_url]" style="width: 50px;"></el-image>
                        </el-form-item>
                        <el-form-item label="系统时间:">
                            {{recordInfo.add_time}}
                        </el-form-item>
                        <el-form-item label="手续费:" prop="service_charge">
                            <el-input v-model="assetInfo.service_charge" style="width:200px;" placeholder="请输入手续费"></el-input>
                        </el-form-item>
                    </el-form>
                </el-card>
                <br />
                <el-row>
                    <el-col :span="24" style="text-align: center;margin:30px 0px;">
                        <el-button type="success" @click="passReviewRemitRecord()">到账通过审核</el-Button>
                        <el-button type="danger" @click="reviewRemitRecord(2)">不通过审核</el-button>
                    </el-col>
                </el-row>
            </el-dialog>
            <el-dialog v-model="dialogVisible_Picture">
                <img w-full :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/remit_record/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/return_exchange/index.html
New file
@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="utf-8">
  <include file="common:title" />
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <include file="common:header" />
  <include file="common:element-plus" />
</head>
<body>
<div id="vue_item" v-cloak>
  <el-container>
    <el-aside class="el-menu-container" :width="el_aside_width">
      <!-- 侧边菜单 -->
      <include file="common:side_menu" />
    </el-aside>
    <el-container>
      <el-header>
        <include file="common:guide" one_word="基础信息配置" two_word="退换货类型管理" />
      </el-header>
      <el-main>
        <el-card style="width: 100%">
          <template #header>
            <div class="card-header"><span data-i18n="logisticsProduct_management">退换货类型管理</span>
              &emsp;
              <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                      data-i18n="add">添加</span></el-link>
            </div>
          </template>
          <el-form label-width="auto">
            <el-input v-model="searchdata.kw" placeholder="请输入退换货类型名称" style="width: 300px"></el-input>
            &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
          </el-form>
          <br />
          <el-table :data="list" border style="width: 100%" :stripe="true">
            <el-table-column prop="id" label="编号" width="80"></el-table-column>
            <el-table-column prop="name" label="退换货类型名称"></el-table-column>
            <el-table-column label="是否开启比例">
              <template #default="scope">
                {{getIsProportion(scope.row.is_proportion)}}
              </template>
            </el-table-column>
            <el-table-column label="比例">
              <template #default="scope">
                {{getProportion(scope.row)}}
              </template>
            </el-table-column>
            <el-table-column prop="note" label="比例说明"></el-table-column>
            <el-table-column prop="order_id" label="排序"></el-table-column>
            <el-table-column label="操作选项">
              <template #default="scope">
                <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
              </template>
            </el-table-column>
          </el-table>
          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                         :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
          </el-pagination>
        </el-card>
      </el-main>
      <!-- <el-footer>Footer</el-footer> -->
    </el-container>
  </el-container>
  <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
    <el-form ref="Add_form" :model="Add_form" label-width="120px">
      <el-form-item label="退换货类型名称">
        <el-input v-model="Add_form.name" placeholder="请输入退换货类型名称" style="width:260px;"></el-input>
      </el-form-item>
      <el-form-item label="是否开启比例">
        <el-switch
                v-model="Add_form.is_proportion"
                active-color="#13ce66"
                inactive-color="#ff4949"
                active-value="1"
                inactive-value="2">
        </el-switch>
      </el-form-item>
      <el-form-item label="比例">
        <el-input-number v-model="Add_form.proportion" :min="1" :max="100" label="请输入比例"></el-input-number>
      </el-form-item>
      <el-form-item label="比例说明">
        <el-input v-model="Add_form.note" placeholder="请输入比例说明" style="width:260px;"></el-input>
      </el-form-item>
      <el-form-item v-if="Add_form.id>0" label="排序值">
        <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
      </el-form-item>
      <el-form-item>
        <el-button :loading="loading" type="primary" @click="submit">
          <span v-if="!loading">保 存</span>
          <span v-else>提 交 中...</span>
        </el-button>
        <el-button @click="dialog.addDialogStatus=false">取消</el-button>
      </el-form-item>
    </el-form>
  </el-dialog>
</div>
</body>
<!-- 共用的方法 -->
<script src="/static/vue/mixin_admin.js"></script>
<script src="/static/admin/js/return_exchange/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/return_exchange_type/index.html
New file
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="退换货类型分类管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header">
                  <span data-i18n="logisticsProduct_management">退换货类型分类管理</span>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入退换货类型名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="name" label="退换货类型名称"></el-table-column>
                <el-table-column label="分类">
                  <template #default="scope">
                    {{getTypes(scope.row.type)}}
                  </template>
                </el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="120px">
          <el-form-item label="退换货类型名称">
            {{Add_name}}
          </el-form-item>
          <el-form-item label="退换货类型分类">
            <el-select v-model="Add_form.type" placeholder="请选择退换货类型分类" style="width:260px;" multiple clearable>
              <el-option v-for="typeItem in typeList" :key="typeItem.id" :label="typeItem.name" :value="typeItem.id" />
            </el-select>
          </el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/return_exchange_type/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/sales_platform/index.html
New file
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
    <link rel="stylesheet" href="/static/admin/css/image_viewer.css" media="all">
    <style>
      .previewImage {
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="销售平台管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">销售平台管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入销售平台名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="platform_name" label="销售平台名称"></el-table-column>
                <el-table-column label="所属区域">
                  <template #default="scope">
                    <template v-for="item in platformRegionList">
                      <template v-if="scope.row.platform_region_id!=null&&scope.row.platform_region_id.includes(item.id)">{{item.region_name}};</template>
                    </template>
                  </template>
                </el-table-column>
                <el-table-column prop="logo" label="logo">
                  <template #default="scope">
                    <el-image :src="scope.row.logo" :preview-src-list="[scope.row.logo]" style="width: 40px;height: 40px;"></el-image>
                  </template>
                </el-table-column>
                <el-table-column label="是否显示官网" width="150" align="center">
                  <template #default="scope">
                    <el-switch @change="updateExt(scope.row,'is_show')" v-model="scope.row.is_show" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                               :inactive-value="0" inline-prompt active-text="是" inactive-text="否" />
                  </template>
                </el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="销售平台名称">
            <el-input v-model="Add_form.platform_name" placeholder="请输入销售平台名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="所属区域" :rules="[{required:true}]">
            <el-select v-model="Add_form.platform_region_id" placeholder="请选择所属区域" style="width:350px;" clearable multiple>
              <el-option v-for="item in platformRegionList" :key="item.id" :label="item.region_name" :value="item.id" />
            </el-select>
          </el-form-item>
          <el-form-item label="LOGO:" prop="logo">
            <el-upload :show-file-list="false" list-type="picture-card" accept="png,jpg,jpeg,gif" :before-upload="handleBeforeUpload" :http-request="uploadLogo">
              <template #trigger>
                <template v-if="Add_form.logo">
                  <img class="el-upload-list__item-thumbnail" :src="Add_form.logo" style="width: 100%;height: 100%;" alt="" />
                  <div style="position: absolute; bottom: 0px;right: 0px;"></div>
                </template>
                <template v-else>
                  <el-icon>
                    <Plus />
                  </el-icon>
                </template>
              </template>
              <template #tip>
                <div class="el-upload__tip">
                  <template v-if="Add_form.logo"><span @click="handleView" :preview-src-list="[Add_form.logo]"
                          style="color: #CB261C; cursor: pointer; margin-right: 10px;">预览</span></template>
                  限1张,格式为png、jpg、jpeg,大小不超过4M
                </div>
              </template>
            </el-upload>
            <el-dialog v-model="dialogVisible_img">
              <img w-full :src="dialogImageUrl" class="previewImage" alt="Preview Image" />
            </el-dialog>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script language="JavaScript">
    const viewPath = '{$viewPath}';
  </script>
  <script src="/static/admin/js/sales_platform/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/seller/add.html
New file
@@ -0,0 +1,192 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
</head>
<body>
    <input type="hidden" value="{$other['id']}" id="seller_id">
    <div id="vue_item" v-cloak>
        <el-container>
            <el-aside class="el-menu-container" :width="el_aside_width">
                <!-- 侧边菜单 -->
                <include file="common:side_menu" />
            </el-aside>
            <el-container>
                <el-header>
                    <include file="common:guide" one_word="分销商管理" two_word="{$other.title}" />
                </el-header>
                <el-main>
                    <el-card>
                        <template #header>
                            <div class="card-header">
                                <span>分销商账号信息</span>
                                &emsp;
                                <el-link type="primary" class="header_add_btn" icon="ArrowLeftBold" :underline="false"
                                    href="/admin/seller/index.html">返回</el-link>
                            </div>
                        </template>
                        <el-form ref="useritem" :model="seller_info" label-width="100px" size="large">
                            <el-form-item label="手机">
                                <el-input v-model="seller_info.phone" style="width: 350px;"
                                    placeholder="请输入分销商手机号"></el-input>
                            </el-form-item>
                            <el-form-item label="密码">
                                <el-input placeholder="请输入密码" v-model="seller_info.password" show-password
                                    style="width: 350px;"></el-input>
                                <span v-if="seller_info.id" class="gray14">不修改密码保留为空</span>
                            </el-form-item>
                            <el-form-item label="账号到期时间">
                                <el-date-picker v-model="seller_info.end_time" type="date" placeholder="选择日期"
                                    value-format="YYYY-MM-DD"></el-date-picker>
                            </el-form-item>
                            <el-form-item label="状态" prop="delivery">
                                <el-switch v-model="seller_info.sub_ban_access" inline-prompt active-text="允许登录"
                                    inactive-text="禁止登录"
                                    style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
                                    :active-value="1" :inactive-value="0"></el-switch>
                            </el-form-item>
                            <el-form-item>
                                <el-button type="primary" @click="save_seller_info()" size="large">提交保存</el-button>
                                <!-- <el-button @click="show_seller_info=false" size="large">取消</el-button> -->
                            </el-form-item>
                        </el-form>
                    </el-card>
<br />
                    <el-card v-if="seller_id>0">
                        <template #header>
                            <div class="card-header">
                                <span>分销商信息</span>
                            </div>
                        </template>
                        <el-form :inline-message="true" :model="baseInfo" :validate-on-rule-change="false"
                            label-width="300px" style="margin-top: 50px;">
                            <el-form-item label="账户类型" prop="account_type">
                                <el-radio-group v-model="baseInfo.account_type" @change="setAccountType" class="ml-4">
                                    <el-radio :value="1">个人</el-radio>
                                    <el-radio :value="2">企业</el-radio>
                                </el-radio-group>
                            </el-form-item>
                            <el-form-item label="联系人名称">
                                <el-input v-model="baseInfo.first_name" style="width:350px;"></el-input>
                            </el-form-item>
                            <el-form-item label="联系人姓氏">
                                <el-input v-model="baseInfo.last_name" style="width:350px;"></el-input>
                            </el-form-item>
                            <el-form-item label="国家/省份城市" prop="cate_code">
                                <el-cascader :placeholder="请选择" v-model="baseInfo.cate_code" :options="countryList"
                                    clearable style="width:350px;" @change="handleCountryChange" />
                            </el-form-item>
                            <el-form-item label="详细地址">
                                <el-input v-model="baseInfo.detailed_address" style="width: 50%" :rows="3"
                                    type="textarea"></el-input>
                            </el-form-item>
                            <el-divider></el-divider>
                            <div style="font-size: 24px;
                                                            line-height: 33px;
                                                            color: #333333;
                                                            margin-bottom: 10px;margin-left: 110px;">
                                为给您提供定制化的分销服务,烦请您完善以下资料:
                            </div>
                            <template v-if="baseInfo.account_type==2">
                                <el-form-item label="公司名称" prop="company_name">
                                    <el-input v-model="baseInfo.company_name" style="width:350px;"></el-input>
                                </el-form-item>
                                <el-form-item label="公司主营业务" prop="main_business">
                                    <el-radio-group v-model="baseInfo.main_business" class="ml-4">
                                        <template v-for="(item, index) in mainBusiness">
                                            <el-radio :value="item.id">{{item.name}}</el-radio>
                                        </template>
                                    </el-radio-group>
                                </el-form-item>
                                <el-form-item label="公司规模" prop="company_scale">
                                    <el-radio-group v-model="baseInfo.company_scale" class="ml-4">
                                        <template v-for="(item, index) in company_scales">
                                            <el-radio :value="item.id">{{item.name}}</el-radio>
                                        </template>
                                    </el-radio-group>
                                </el-form-item>
                            </template>
                            <el-form-item label="电商经验" prop="ec_exp">
                                <el-radio-group v-model="baseInfo.ec_exp" class="ml-4">
                                    <template v-for="(item, index) in ecExps">
                                        <el-radio :value="item.value" :key="index">{{item.label}}</el-radio>
                                    </template>
                                </el-radio-group>
                            </el-form-item>
                            <el-form-item label="主营区域(多选)" prop="main_area">
                                <el-checkbox-group v-model="baseInfo.main_area" class="ml-4">
                                    <template v-for="(item, index) in mainAreas">
                                        <el-checkbox :value="item.id" :label="item.country_name" />
                                    </template>
                                </el-checkbox-group>
                            </el-form-item>
                            <el-form-item label="主营平台(多选)" prop="main_dis_platform">
                                <el-checkbox-group v-model="baseInfo.main_dis_platform" class="ml-4">
                                    <template v-for="(item, index) in disPlatformList">
                                        <el-checkbox :value="item.id" :label="item.platform_name" />
                                    </template>
                                </el-checkbox-group>
                            </el-form-item>
                            <el-form-item label="运营策略" prop="operate_str">
                                <el-radio-group v-model="baseInfo.operate_str" class="ml-4">
                                    <template v-for="(item, index) in operateStrs">
                                        <el-radio :value="item.id" :key="index">{{item.name}}</el-radio>
                                    </template>
                                </el-radio-group>
                            </el-form-item>
                            <el-form-item label="店铺链接" prop="store_link">
                                <el-input v-model="baseInfo.store_link" style="width:350px;"
                                    :placeholder="请输入店铺链接"></el-input>
                            </el-form-item>
                            <el-form-item label="QQ:" prop="contact_qq">
                                <el-input v-model="baseInfo.contact_qq" style="width:350px;"
                                    :placeholder="请输入QQ"></el-input>
                            </el-form-item>
                            <el-form-item label="请输入联系微信" prop="contact_weixin">
                                <el-input v-model="baseInfo.contact_weixin" style="width:350px;"
                                    :placeholder="请输入联系微信"></el-input>
                            </el-form-item>
                            <el-form-item style="display: none;">
                                <el-button type="primary" @click="submitForm">
                                    <span>保存</span>
                                </el-button>
                            </el-form-item>
                        </el-form>
                    </el-card>
                    <br />
                    <el-card style="display: none;">
                        <template #header>
                            <div class="card-header">
                                <span>资质证明文件</span>
                            </div>
                        </template>
                    </el-card>
                </el-main>
            </el-container>
        </el-container>
    </div>
</body>
<!-- 共用的方法 -->
<script src="/static/vue/mixin_admin.js"></script>
<script src="/static/vue/moment.min.js"></script>
<script src="/static/admin/js/seller/add.js"></script>
</html>
app/admin/view/seller/index.html
New file
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="分销商管理" two_word="{$other.title}列表" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>{$other.title}列表</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                             @click="goto_edit_seller(0)">添加</el-link>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchdata.kw" size="large" placeholder="可通过账号/姓名 筛选" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" size="large" icon="Search" @click="searchseller_list()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="seller_list" border style="width: 100%" ref="tableRef">
                                <el-table-column label="账号(手机号)" prop="phone" width="150"></el-table-column>
                                <el-table-column label="帐号类型">
                                    <template #default="scope">
                                        <span v-if="scope.row.account_type==1">个人</span>
                                        <span v-else-if="scope.row.account_type==2">企业</span>
                                        <span v-else>个人</span>
                                    </template>
                                </el-table-column>
                                <el-table-column label="用户信息" prop="certificate_name" width="200">
                                    <template #default="scope">
                                        <span>联系人:</span><br />
                                        {{scope.row.last_name}} {{scope.row.first_name}}
                                        <span v-if="scope.row.account_type==2">公司:{{scope.row.company_name}}</span>
                                    </template>
                                </el-table-column>
                                <el-table-column label="账号状态" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.sub_ban_access" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                   :inactive-value="0" inline-prompt active-text="允许登录" inactive-text="禁止登录" @change="set_ban_access(scope.$index)" />
                                    </template>
                                </el-table-column>
                                <!-- <el-table-column label="审核状态" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                   :inactive-value="0" inline-prompt active-text="通过审核" inactive-text="未审核" @change="setAuditStatus(scope.$index)" />
                                    </template>
                                </el-table-column> -->
                                <el-table-column label="账号时间" width="180" align="center">
                                    <template #default="scope">
                                        开始:{{formatDate(scope.row['start_time'])}}<br />
                                        结束:{{formatDate(scope.row['end_time'])}}
                                    </template>
                                </el-table-column>
                                <el-table-column label="最近登录信息" width="180" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.login_time>0">
                                            时间:{{formatDate(scope.row['login_time'])}}
                                            <br />
                                            IP:{{scope.row['login_ip']}}
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作" fixed="right" min-width="150" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="goto_edit_seller(scope.row.id)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-drawer :title="seller_title" :direction="direction" v-model="show_seller_info" size="35%">
                <div id="comment_item">
                    <div class="layui-row">
                        <div class="layui-col-md12 caller-contar">
                            <div class="caller-item">
                                <el-form ref="useritem" :model="useritem" label-width="150px">
                                    <el-form-item label="账号">
                                        <template v-if="useritem.id">
                                            {{useritem.user_name}}
                                        </template>
                                        <template v-else>
                                            <el-input v-model="useritem.user_name" style="width: 330px;"></el-input>
                                        </template>
                                    </el-form-item>
                                    <el-form-item label="密码">
                                        <el-input placeholder="请输入密码" v-model="useritem.pwd" show-password style="width: 330px;"></el-input>
                                        <span v-if="useritem.id" class="gray14">不修改密码保留为空</span>
                                    </el-form-item>
                                    <el-form-item label="分销商名称">
                                        <el-input v-model="useritem.seller_name" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item label="联系人">
                                        <el-input v-model="useritem.real_name" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item label="手机号">
                                        <el-input v-model="useritem.phone" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item v-if="useritem.id" label="账号到期时间">
                                        <el-date-picker v-model="useritem.endtime" type="date" placeholder="选择日期">
                                        </el-date-picker>
                                    </el-form-item>
                                    <el-form-item>
                                        <el-button type="primary" @click="save_seller">{{seller_button_txt}}</el-button>
                                        <el-button @click="show_seller_info=false">取消</el-button>
                                    </el-form-item>
                                </el-form>
                            </div>
                        </div>
                    </div>
                </div>
            </el-drawer>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/seller/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/seller_base_info/index.html
New file
@@ -0,0 +1,217 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <style>
            .el-checkbox__input.is-checked+.el-checkbox__label {
                color: var(--el-checkbox-checked-text-color) !important;
            }
            .el-checkbox__input.is-checked .el-checkbox__inner {
                background-color: var(--el-checkbox-checked-bg-color) !important;
                border-color: var(--el-checkbox-checked-input-border-color) !important;
            }
            .el-checkbox__input.is-checked .el-checkbox__inner:after {
                border-color: var(--el-checkbox-checked-icon-color) !important;
                transform: rotate(45deg) scaleY(1) !important;
            }
            .el-radio__input.is-checked+.el-radio__label {
                color: var(--el-color-primary) !important;
            }
            .el-radio__input.is-checked .el-radio__inner {
                background: var(--el-color-primary) !important;
                border-color: var(--el-color-primary) !important;
            }
            .el-radio__input.is-disabled .el-radio__inner:after {
                background-color: var(--el-disabled-bg-color) !important;
                cursor: not-allowed;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide['one']['text']}" two_word="{$guide['two']['text']}" />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="goods_brand_management">{$other['title']}</span>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchData.kw" placeholder="请输入姓名" style="width: 300px" clearable></el-input>
                                &ensp;
                                <el-button type="success" icon="Search" @click="index()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="list" v-loading="loading" border style="width: 100%" :stripe="true" ref="tableRef">
                                <el-table-column prop="last_name" label="姓氏"></el-table-column>
                                <el-table-column prop="first_name" label="名称"></el-table-column>
                                <el-table-column prop="certificate_name" label="认证姓名"></el-table-column>
                                <el-table-column prop="certificate_number" label="证件号码"></el-table-column>
                                <el-table-column prop="real_name" label="审核状态" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                                        <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                                        <template v-else-if="scope.row.status==2"><el-tag type="danger">待审核</el-tag></template>
                                        <template v-else-if="scope.row.status==3"><el-tag type="info">未通过审核</el-tag></template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button type="primary" :disabled="scope.row.status==2?false:true" @click="showBaseInfo(scope.row)">审核</el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchData.page" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchData.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-dialog title="分销商实名信息" width="1200px" align-center="true" class="icon-dialog" v-model="dialogBaseInfo" :before-close="closeForm" append-to-body>
                <el-card style="width: 100%">
                    <el-form label-width="auto">
                        <el-form-item label="账户类型:">
                            <template v-if="baseInfo.account_type==1">
                                <span data-i18n="account_type_1">个人</span>
                            </template>
                            <template v-else>
                                <span data-i18n="account_type_2">企业</span>
                            </template>
                        </el-form-item>
                        <el-form-item v-if="baseInfo.account_type==1" label="名称" prop="first_name">
                            {{baseInfo.first_name}}
                        </el-form-item>
                        <el-form-item v-if="baseInfo.account_type==2" label="联系人名称" prop="first_name">
                            {{baseInfo.first_name}}
                        </el-form-item>
                        <el-form-item v-if="baseInfo.account_type==1" label="姓氏" prop="last_name">
                            {{baseInfo.last_name}}
                        </el-form-item>
                        <el-form-item v-if="baseInfo.account_type==2" label="联系人姓氏" prop="last_name">
                            {{baseInfo.last_name}}
                        </el-form-item>
                        <el-form-item label="国家/省份/城市">
                            <el-cascader v-model="baseInfo.cate_code" :options="countryList" style="width:450px;" disabled />
                        </el-form-item>
                        <el-form-item label="详细地址">
                            {{baseInfo.detailed_address}}
                        </el-form-item>
                        <el-divider></el-divider>
                        <el-form-item v-if="baseInfo.account_type==2" label="公司名称" prop="company_name">
                            {{baseInfo.company_name}}
                        </el-form-item>
                        <el-form-item v-if="baseInfo.account_type==2" label="公司主营业务" prop="main_business">
                            <el-radio-group v-model="baseInfo.main_business" class="ml-4">
                                <template v-for="(item, index) in mainBusiness">
                                    <el-radio :value="item.id" disabled>{{item.name}}</el-radio>
                                </template>
                            </el-radio-group>
                        </el-form-item>
                        <el-form-item v-if="baseInfo.account_type==2" label="公司规模" prop="company_scale">
                            <el-radio-group v-model="baseInfo.company_scale" class="ml-4">
                                <template v-for="(item, index) in company_scales">
                                    <el-radio :value="item.id" disabled>{{item.name}}</el-radio>
                                </template>
                            </el-radio-group>
                        </el-form-item>
                        <el-form-item label="电商经验">
                            <el-radio-group v-model="baseInfo.ec_exp" class="ml-4">
                                <template v-for="(item, index) in ecExps">
                                    <el-radio :value="item.value" :key="index" disabled>{{item.label}}</el-radio>
                                </template>
                            </el-radio-group>
                        </el-form-item>
                        <el-form-item label="主营区域(多选)">
                            <el-checkbox-group v-model="baseInfo.main_area" class="ml-4">
                                <template v-for="(item, index) in mainAreas">
                                    <el-checkbox :value="item.id" :label="item.country_name" disabled />
                                </template>
                            </el-checkbox-group>
                        </el-form-item>
                        <el-form-item label="主营平台(多选)">
                            <el-checkbox-group v-model="baseInfo.main_dis_platform" class="ml-4">
                                <template v-for="(item, index) in disPlatformList">
                                    <el-checkbox :value="item.id" :label="item.platform_name" disabled />
                                </template>
                            </el-checkbox-group>
                        </el-form-item>
                        <el-form-item label="运营策略">
                            <el-radio-group v-model="baseInfo.operate_str" class="ml-4">
                                <template v-for="(item, index) in operateStrs">
                                    <el-radio :value="item.id" :key="index" disabled>{{item.name}}</el-radio>
                                </template>
                            </el-radio-group>
                        </el-form-item>
                        <el-form-item label="店铺链接:">
                            {{baseInfo.store_link}}
                        </el-form-item>
                        <el-form-item label="联系QQ:">{{baseInfo.contact_qq}}
                        </el-form-item>
                        <el-form-item label="联系微信:">{{baseInfo.contact_weixin}}
                        </el-form-item>
                        <el-divider></el-divider>
                        <el-form-item label="证件类型:" prop="certificate_type">
                            <template v-for="item in certificatetypes">
                                <template v-if="item.id==baseInfo.certificate_type">
                                    {{item.type_name}}
                                </template>
                            </template>
                        </el-form-item>
                        <el-form-item label="姓名:" prop="certificate_name">
                            {{baseInfo.certificate_name}}
                        </el-form-item>
                        <el-form-item v-if="baseInfo.certificate_type==1" label="身份证号:">
                            {{baseInfo.certificate_number}}
                        </el-form-item>
                        <el-form-item v-else label="通行证号码:">
                            {{baseInfo.certificate_number}}
                        </el-form-item>
                        <el-form-item label="证件照片" prop="cert_front">
                            <el-image :src="baseInfo.cert_front" :preview-src-list="[baseInfo.cert_front]" style="width: 100px;height: 100px;"></el-image>
                            <el-image :src="baseInfo.cert_back" :preview-src-list="[baseInfo.cert_back]" style="width: 100px;height: 100px; margin-left: 10px;"></el-image>
                        </el-form-item>
                    </el-form></el-card>
                <el-row>
                    <el-col :span="24" style="text-align: center;margin:30px 0px;">
                        <el-button type="success" @click="reviewBaseInfo(1)">通过审核</el-Button>
                        <el-button type="danger" @click="reviewBaseInfo(3)">不通过审核</el-button>
                    </el-col>
                </el-row>
            </el-dialog>
            <el-dialog v-model="dialogVisible_Picture">
                <img :src="previewImageUrl" alt="Preview Image" style="width: 100%;" />
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/seller_baseinfo/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/stock_country/index.html
New file
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="基础信息配置" two_word="国家管理" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="logisticsProduct_management">国家管理</span>
                  &emsp;
                  <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)" @click="Add(-1)"><span
                          data-i18n="add">添加</span></el-link>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="searchdata.kw" placeholder="请输入国家名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search" @click="index()">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="list" border style="width: 100%" :stripe="true">
                <el-table-column prop="id" label="编号" width="80"></el-table-column>
                <el-table-column prop="country" label="国家名称"></el-table-column>
                <el-table-column prop="country_code" label="国家编码"></el-table-column>
                <el-table-column prop="order_id" label="排序"></el-table-column>
                <el-table-column label="操作选项">
                  <template #default="scope">
                    <el-button icon="edit" type="primary" @click="Add(scope.$index)"></el-button>
                    <el-button icon="delete" type="danger" @click="del(scope.$index)"></el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="Add_title" v-model="dialog.addDialogStatus" :show-close="true" width="700px">
        <el-form ref="Add_form" :model="Add_form" label-width="100px">
          <el-form-item label="国家名称">
            <el-input v-model="Add_form.country" placeholder="请输入国家名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="国家编码">
            <el-input v-model="Add_form.country_code" placeholder="请输入国家编码" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item v-if="Add_form.id>0" label="排序值">
            <el-input-number v-model="Add_form.order_id" class="mx-4" controls-position="right" />
          </el-form-item>
          <el-form-item>
            <el-button :loading="loading" type="primary" @click="submit">
              <span v-if="!loading">保 存</span>
              <span v-else>提 交 中...</span>
            </el-button>
            <el-button @click="dialog.addDialogStatus=false">取消</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/stock_country/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/supplier/add.html
New file
@@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
    </head>
    <body>
        <input type="hidden" value="{$other['id']}" id="supplier_id">
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="供应商管理" two_word="{$other.title}" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>供应商账号信息</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="ArrowLeftBold" :underline="false" href="/admin/supplier/index.html">返回</el-link>
                                </div>
                            </template>
                            <el-form ref="useritem" :model="supplier_info" label-width="100px" size="large">
                                <el-form-item label="供应商名称" v-if="supplier_id==0">
                                    <el-input v-model="supplier_info.supplier_name" style="width: 350px;" placeholder="请输入供应商名称"></el-input>
                                </el-form-item>
                                <el-form-item label="主账号">
                                    <el-input v-model="supplier_info.user_name" style="width: 350px;" placeholder="请输入供应商账号"></el-input>
                                </el-form-item>
                                <el-form-item label="密码">
                                    <el-input placeholder="请输入密码" v-model="supplier_info.password" show-password style="width: 350px;"></el-input>
                                    <span v-if="supplier_info.id" class="gray14">不修改密码保留为空</span>
                                </el-form-item>
                                <el-form-item label="姓名">
                                    <el-input v-model="supplier_info.account_name" style="width: 350px;" placeholder="请输入供应商联系人姓名"></el-input>
                                </el-form-item>
                                <el-form-item label="手机号">
                                    <el-input v-model="supplier_info.account_phone" style="width: 350px;" placeholder="请输入联系人手机号"></el-input>
                                </el-form-item>
                                <el-form-item label="账号到期时间">
                                    <el-date-picker v-model="supplier_info.end_time" type="date" placeholder="选择日期" value-format="YYYY-MM-DD"></el-date-picker>
                                </el-form-item>
                                <el-form-item label="状态" prop="delivery">
                                    <el-switch v-model="supplier_info.sub_ban_access" inline-prompt active-text="允许登录" inactive-text="禁止登录"
                                               style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949" :active-value="1" :inactive-value="0"></el-switch>
                                </el-form-item>
                                <el-form-item>
                                    <el-button type="primary" @click="save_supplier_info()" size="large">提交保存</el-button>
                                    <!-- <el-button @click="show_supplier_info=false" size="large">取消</el-button> -->
                                </el-form-item>
                            </el-form>
                        </el-card>
                        <template v-if="supplier_id>0">
                            <br />
                            <el-card>
                                <template #header>
                                    <div class="card-header">
                                        <span>供应商信息</span>
                                    </div>
                                </template>
                                <el-form ref="useritem" :model="supplier_info" label-width="160px" size="large">
                                    <el-form-item label="供应商名称">
                                        <el-input v-model="supplier_info.supplier_name" style="width: 500px;" placeholder="请输入供应商名称"></el-input>
                                    </el-form-item>
                                    <el-form-item label="英文名称">
                                        <el-input v-model="supplier_info.supplier_en_name" style="width: 500px;" placeholder="请输入供应商英文名称"></el-input>
                                    </el-form-item>
                                    <el-form-item label="联系人">
                                        <el-input v-model="supplier_info.real_name" style="width: 500px;" placeholder="请输入供应商联系人姓名"></el-input>
                                    </el-form-item>
                                    <el-form-item label="手机号">
                                        <el-input v-model="supplier_info.phone" style="width: 500px;" placeholder="请输入联系人手机号"></el-input>
                                    </el-form-item>
                                    <el-form-item label="邮箱">
                                        <el-input v-model="supplier_info.email" style="width: 500px;" placeholder="请输入联系人邮箱"></el-input>
                                    </el-form-item>
                                    <el-form-item label="座机">
                                        <el-input v-model="supplier_info.phone_number" style="width: 500px;" placeholder="请输入联系人座机"></el-input>
                                    </el-form-item>
                                    <el-form-item label="公司唯一代码">
                                        <el-input v-model="supplier_info.unique_code" style="width: 500px;" placeholder="请输入供应商的企业唯一代码"></el-input>
                                    </el-form-item>
                                    <el-form-item label="法人姓名">
                                        <el-input v-model="supplier_info.legal_person_name" style="width: 500px;" placeholder="请输入供应商的法人姓名"></el-input>
                                    </el-form-item>
                                    <el-form-item label="法人身份证号">
                                        <el-input v-model="supplier_info.legal_person_id_number" style="width: 500px;" placeholder="请输入供应商的法人身份证号"></el-input>
                                    </el-form-item>
                                    <el-form-item label="公司地址">
                                        <el-input v-model="supplier_info.address" style="width: 500px;" placeholder="请输入供应商的地址"></el-input>
                                    </el-form-item>
                                    <el-form-item label="邮编">
                                        <el-input v-model="supplier_info.postal_code" style="width: 500px;" placeholder="请输入供应商的邮编"></el-input>
                                    </el-form-item>
                                    <el-form-item label="业务经理">
                                        <el-input v-model="supplier_info.account_executive" style="width: 500px;" placeholder="请输入业务经理"></el-input>
                                    </el-form-item>
                                    <el-form-item label="业务经理联系方式">
                                        <el-input v-model="supplier_info.account_executive_phone" style="width: 500px;" placeholder="请输入业务经理联系方式"></el-input>
                                    </el-form-item>
                                    <el-form-item>
                                        <el-button type="primary" @click="save_supplier_info()" size="large">提交保存</el-button>
                                        <!-- <el-button @click="show_supplier_info=false" size="large">取消</el-button> -->
                                    </el-form-item>
                                </el-form>
                            </el-card>
                            <br />
                            <el-card>
                                <template #header>
                                    <div class="card-header">
                                        <span>资质证明文件</span>
                                    </div>
                                </template>
                            </el-card>
                        </template>
                    </el-main>
                </el-container>
            </el-container>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/vue/moment.min.js"></script>
    <script src="/static/admin/js/supplier/add.js"></script>
</html>
app/admin/view/supplier/index.html
New file
@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="供应商管理" two_word="{$other.title}列表" />
                    </el-header>
                    <el-main>
                        <el-card>
                            <template #header>
                                <div class="card-header">
                                    <span>{$other.title}列表</span>
                                    &emsp;
                                    <el-link type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false" href="javascript:void(0)"
                                             @click="goto_edit_supplier(0)">添加</el-link>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchdata.kw" size="large" placeholder="可通过账号/姓名 筛选" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" size="large" icon="Search" @click="searchsupplier_list()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="supplier_list" border style="width: 100%" ref="tableRef">
                                <el-table-column label="账号" prop="user_name" width="150"></el-table-column>
                                <el-table-column label="供应商名称" prop="supplier_name"></el-table-column>
                                <el-table-column label="联系人" prop="real_name" width="200">
                                    <template #default="scope">
                                        {{scope.row.real_name}}<br />
                                        {{scope.row.phone}}
                                    </template>
                                </el-table-column>
                                <el-table-column label="账号状态" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.ban_access" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                   :inactive-value="0" inline-prompt active-text="允许登录" inactive-text="禁止登录" @change="set_ban_access(scope.$index)" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="审核状态" width="150" align="center">
                                    <template #default="scope">
                                        <el-switch v-model="scope.row.audit_status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1"
                                                   :inactive-value="0" inline-prompt active-text="通过审核" inactive-text="未审核" @change="setAuditStatus(scope.$index)" />
                                    </template>
                                </el-table-column>
                                <el-table-column label="账号时间" width="180" align="center">
                                    <template #default="scope">
                                        开始:{{formatDate(scope.row['start_time'])}}<br />
                                        结束:{{formatDate(scope.row['end_time'])}}
                                    </template>
                                </el-table-column>
                                <el-table-column label="最近登录信息" width="180" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.login_time>0">
                                            时间:{{formatDate(scope.row['login_time'])}}
                                            <br />
                                            IP:{{scope.row['login_ip']}}
                                        </template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作" fixed="right" min-width="150" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button icon="edit" type="primary" @click="goto_edit_supplier(scope.row.id)"></el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-drawer :title="supplier_title" :direction="direction" v-model="show_supplier_info" size="35%">
                <div id="comment_item">
                    <div class="layui-row">
                        <div class="layui-col-md12 caller-contar">
                            <div class="caller-item">
                                <el-form ref="useritem" :model="useritem" label-width="150px">
                                    <el-form-item label="账号">
                                        <template v-if="useritem.id">
                                            {{useritem.user_name}}
                                        </template>
                                        <template v-else>
                                            <el-input v-model="useritem.user_name" style="width: 330px;"></el-input>
                                        </template>
                                    </el-form-item>
                                    <el-form-item label="密码">
                                        <el-input placeholder="请输入密码" v-model="useritem.pwd" show-password style="width: 330px;"></el-input>
                                        <span v-if="useritem.id" class="gray14">不修改密码保留为空</span>
                                    </el-form-item>
                                    <el-form-item label="供应商名称">
                                        <el-input v-model="useritem.supplier_name" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item label="联系人">
                                        <el-input v-model="useritem.real_name" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item label="手机号">
                                        <el-input v-model="useritem.phone" style="width: 330px;"></el-input>
                                    </el-form-item>
                                    <el-form-item v-if="useritem.id" label="账号到期时间">
                                        <el-date-picker v-model="useritem.endtime" type="date" placeholder="选择日期">
                                        </el-date-picker>
                                    </el-form-item>
                                    <el-form-item>
                                        <el-button type="primary" @click="save_supplier">{{supplier_button_txt}}</el-button>
                                        <el-button @click="show_supplier_info=false">取消</el-button>
                                    </el-form-item>
                                </el-form>
                            </div>
                        </div>
                    </div>
                </div>
            </el-drawer>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/supplier/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/admin/view/third_party_logistics_product_temp/index.html
New file
@@ -0,0 +1,130 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="物流产品审核" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span>物流产品审核</span>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="input" placeholder="请输入物流产品名称/对接编码" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="logistics_product_list" border style="width: 100%" :stripe="true" ref="tableRef">
                <el-table-column label="对接平台产品">
                  <template #default="scope">
                    <template v-if="scope.row.platform_logistics_product_id!=null">
                      {{scope.row.platform_logistics_product_name.product_name_en}}
                      {{scope.row.platform_logistics_product_name.product_name_cn}}({{scope.row.platform_logistics_product_name.cycle_start}}-{{scope.row.platform_logistics_product_name.cycle_end}}天)
                    </template>
                  </template>
                </el-table-column>
                <el-table-column prop="docking_code" label="对接编码" width="180"></el-table-column>
                <el-table-column prop="product_name_cn" label="第三方物流名称"></el-table-column>
                <el-table-column prop="product_name_en" label="第三方物流英文名称"></el-table-column>
                <el-table-column label="增值服务" width="220">
                  <template #default="scope">
                    <template v-if="scope.row.value_added_services!=null" v-for="vas_item in logistics_vas">
                      <template v-if="scope.row.value_added_services.includes(vas_item.vas_code)">{{vas_item.vas_name}};</template>
                    </template>
                  </template>
                </el-table-column>
                <el-table-column label="审核状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                    <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                    <template v-else-if="scope.row.status==2"><el-tag type="warning">未通过</el-tag></template>
                    <template v-else-if="scope.row.status==3"><el-tag type="warning">已提交审核</el-tag></template>
                  </template>
                </el-table-column>
                <el-table-column prop="edit_time" label="提交时间"></el-table-column>
                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button type="primary" :disabled="scope.row.status==3?false:true" @click="create_product(scope.$index)">审核</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="create_product_title" v-model="Visible_logisticsProduct" :show-close="true" width="40%">
        <el-form ref="form" :model="create_product_form" label-width="100px">
          <!-- <el-form-item label="物流类型">
            <el-input placeholder="自建仓物流" disabled style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="对接系统">
            <el-select v-model="create_product_form.docking_system" disabled placeholder="选择对接系统" size="large" style="width: 260px">
              <el-option v-for="item in docking_system_options" :key="item.value" :label="item.label" :value="item.value" />
            </el-select>
          </el-form-item> -->
          <el-form-item label="平台物流产品" prop="platform_logistics_product_id">
            <el-select v-model="create_product_form.platform_logistics_product_id" disabled placeholder="请选择平台物流产品" style="width: 350px">
              <el-option v-for="item in platformLogisticsProductList" :key="item.id" :label="item.product_name_en+' '+item.product_name_cn+'('+item.cycle_start+'-'+item.cycle_end+'天)'"
                         :value="item.id" />
            </el-select>
          </el-form-item>
          <el-form-item label="对接编码">
            <el-input v-model="create_product_form.docking_code" readonly placeholder="请输入对接编码" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="物流产品名称">
            <el-input v-model="create_product_form.product_name_cn" readonly placeholder="请输入物流产品名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="物流英文名称">
            <el-input v-model="create_product_form.product_name_en" readonly placeholder="请输入物流英文名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="增值服务">
            <el-checkbox-group disabled v-model="create_product_form.value_added_services" @change="handleCheckedCitiesChange">
              <el-checkbox v-for="vas_item in logistics_vas" :key="vas_item.vas_code" :label="vas_item.vas_name" :value="vas_item.vas_code">
                {{ vas_item.vas_name }}
              </el-checkbox>
            </el-checkbox-group>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="reviewLogisticsProduct(1)">通过审核</el-button>
            <el-button type="danger" @click="reviewLogisticsProduct(2)">不通过审核</el-button>
          </el-form-item>
        </el-form>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/third_party_logistics_product_temp/index.js?v=<?php echo create_random()?>"></script>
</html>
app/admin/view/third_party_stock_temp/index.html
New file
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <include file="common:title" />
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <include file="common:header" />
    <include file="common:element-plus" />
  </head>
  <body>
    <div id="vue_item" v-cloak>
      <el-container>
        <el-aside class="el-menu-container" :width="el_aside_width">
          <!-- 侧边菜单 -->
          <include file="common:side_menu" />
        </el-aside>
        <el-container>
          <el-header>
            <include file="common:guide" one_word="数据审核" two_word="第三方仓库审核" />
          </el-header>
          <el-main>
            <el-card style="width: 100%">
              <template #header>
                <div class="card-header"><span data-i18n="thirdpartystock_management">第三方仓库审核</span>
                </div>
              </template>
              <el-form label-width="auto">
                <el-input v-model="input" placeholder="请输入对接编码/仓库名称" style="width: 300px"></el-input>
                &ensp;<el-button type="success" icon="Search">搜索</el-button>
              </el-form>
              <br />
              <el-table :data="stock_list" border style="width: 100%" :stripe="true" ref="tableRef">
                <!-- <el-table-column prop="stock_type" label="仓库类型" width="180">
                  <template #default="scope">
                    自建仓
                  </template>
                </el-table-column>
                <el-table-column prop="docking_system" label="对接系统" width="180">
                  <template #default="scope">
                    无
                  </template>
                </el-table-column> -->
                <el-table-column prop="third_party_stock_name" label="仓库名称" width="180"></el-table-column>
                <el-table-column prop="docking_code" label="对接编码" width="180"></el-table-column>
                <el-table-column label="审核状态" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.need_review==2">
                      <el-tag type="danger">提交审核</el-tag>
                    </template>
                    <template v-else-if="scope.row.need_review==0"><el-tag type="warning">未提交</el-tag></template>
                    <template v-else>
                      <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                      <template v-else-if="scope.row.status==1"><el-tag type="success">通过审核</el-tag></template>
                      <template v-else-if="scope.row.status==2"><el-tag type="warning">未通过</el-tag></template>
                    </template>
                  </template>
                </el-table-column>
                <el-table-column prop="edit_time" label="提交时间" width="180"></el-table-column>
                <el-table-column label="是否需要审核" width="150" align="center">
                  <template #default="scope">
                    <template v-if="scope.row.need_review==2">是</template>
                    <template v-else-if="scope.row.need_review==1">--</template>
                  </template>
                </el-table-column>
                <el-table-column label="审核" fixed="right" min-width="140" :align="alignValue(200)">
                  <template #default="scope">
                    <el-button type="primary" :disabled="scope.row.need_review==2?false:true" @click="create_stock(scope.$index)">审核</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchdata.p" :page-sizes="[20, 30, 40, 50]"
                             :page-size="searchdata.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
              </el-pagination>
            </el-card>
          </el-main>
          <!-- <el-footer>Footer</el-footer> -->
        </el-container>
      </el-container>
      <el-dialog :title="create_stock_title" v-model="Visible_thirdPartyStock" :show-close="true" width="75%">
        <el-form ref="form" :model="create_stock_form" label-width="100px">
          <el-form-item label="仓库类型">
            <el-input placeholder="自建仓" disabled style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="对接系统">
            <el-select v-model="create_stock_form.docking_system" placeholder="选择对接系统" disabled size="large" style="width: 260px">
              <el-option v-for="item in docking_system_options" :key="item.value" :label="item.label" :value="item.value" />
            </el-select>
          </el-form-item>
          <el-form-item label="仓库名称">
            <el-input v-model="create_stock_form.third_party_stock_name" readonly placeholder="请输入仓库名称" style="width:260px;"></el-input>
          </el-form-item>
          <el-form-item label="对接编码">
            <el-input v-model="create_stock_form.docking_code" readonly placeholder="请输入对接编码" style="width:260px;"></el-input>
          </el-form-item>
        </el-form>
        <el-card v-if="create_stock_form.id" style="width: 100%">
          <template #header>
            <div class="card-header">
              <span data-i18n="thirdpartystock_management">仓库地址</span>
            </div>
          </template>
          <br />
          <el-table :data="stock_address_list" border style="width: 100%" :stripe="true">
            <el-table-column label="适用范围" width="220">
              <template #default="scope">
                <template v-for="range_item in suit_range_list">
                  <template v-if="scope.row.suit_range.includes(range_item.id)">{{range_item.name}};</template>
                </template>
              </template>
            </el-table-column>
            <el-table-column prop="receive_man" label="联系人" width="180"></el-table-column>
            <el-table-column prop="tel" label="电话" width="180"></el-table-column>
            <el-table-column label="详细地址">
              <template #default="scope">
                {{scope.row.stock_address}}
                {{scope.row.stock_city}}
                {{scope.row.stock_province}}
                {{scope.row.country}}
                {{scope.row.stock_post_code}}
              </template>
            </el-table-column>
            <el-table-column label="审核状态" width="150" align="center">
              <template #default="scope">
                <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                <template v-else-if="scope.row.status==2"><el-tag type="warning">未通过</el-tag></template>
              </template>
            </el-table-column>
            <el-table-column label="审核" align="center" width="280">
              <template #default="scope">
                <el-button type="primary" :disabled="scope.row.status==0?false:true" @click="reviewAddress(scope.$index,1)">通过审核</el-button>
                <el-button type="danger" :disabled="scope.row.status==0?false:true" @click="reviewAddress(scope.$index,2)">不通过审核</el-button>
              </template>
            </el-table-column>
          </el-table>
        </el-card>
        <div style="margin-top: 20px; text-align: center;">
          <!-- <el-button type="primary" @click="reviewStock(1)">通过审核</el-button>  -->
          <el-button type="danger" @click="reviewStock(2)">不通过审核</el-button>
        </div>
      </el-dialog>
    </div>
  </body>
  <!-- 共用的方法 -->
  <script src="/static/vue/mixin_admin.js"></script>
  <script src="/static/admin/js/third_party_stock_temp/index.js?v=<?php echo create_random()?>"></script>
</html>
app/admin/view/withdrawal_record/index.html
New file
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="utf-8">
        <include file="common:title" />
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <include file="common:header" />
        <include file="common:element-plus" />
        <style>
            /* 解决图片放大时层显示问题 */
            .el-table th.el-table__cell,
            .el-table td.el-table__cell,
            .el-select,
            .el-select__wrapper {
                position: unset;
            }
            .el-image-viewer__img {
                width: 50%;
            }
        </style>
    </head>
    <body>
        <div id="vue_item" v-cloak>
            <el-container>
                <el-aside class="el-menu-container" :width="el_aside_width">
                    <!-- 侧边菜单 -->
                    <include file="common:side_menu" />
                </el-aside>
                <el-container>
                    <el-header>
                        <include file="common:guide" one_word="{$guide['one']['text']}" two_word="{$guide['two']['text']}" />
                    </el-header>
                    <el-main>
                        <el-card style="width: 100%">
                            <template #header>
                                <div class="card-header">
                                    <span data-i18n="goods_brand_management">{$other['title']}</span>
                                </div>
                            </template>
                            <el-form label-width="auto">
                                <el-input v-model="searchData.kw" placeholder="请输入收款账户" style="width: 300px"></el-input>
                                &ensp;
                                <el-button type="success" icon="Search" @click="getWithdrawalRecordList()">搜索</el-button>
                            </el-form>
                            <br />
                            <el-table :data="list" v-loading="loading" border style="width: 100%" :stripe="true" ref="tableRef">
                                <el-table-column type="index" label="编号" width="80" show-overflow-tooltip></el-table-column>
                                <el-table-column label="提现账户" show-overflow-tooltip>
                                    <template #default="scope">
                                        {{scope.row.asset_name}} {{scope.row.currency_name}}
                                    </template>
                                </el-table-column>
                                <el-table-column prop="payment_tool_name" label="提现方式" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="payment_account" label="收款账户" show-overflow-tooltip>
                                </el-table-column>
                                <el-table-column prop="remit_amount" label="提现金额" width="100" show-overflow-tooltip>
                                    <template #default="scope">
                                        {{scope.row.asset_name}} {{scope.row.payment_amount}}
                                    </template>
                                </el-table-column>
                                <el-table-column prop="payment_remark" label="备注" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="review_comments" label="未通过原因" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="add_time" label="系统时间" align="center" show-overflow-tooltip></el-table-column>
                                <el-table-column prop="service_charge" label="手续费" width="100" show-overflow-tooltip>
                                    <template #default="scope">
                                        <template v-if="scope.row.status==1">{{scope.row.service_charge}}</template>
                                        <template v-else>-</template>
                                    </template>
                                </el-table-column>
                                <el-table-column prop="real_name" label="审核状态" width="200" align="center">
                                    <template #default="scope">
                                        <template v-if="scope.row.status==0"><el-tag type="danger">未审核</el-tag></template>
                                        <template v-else-if="scope.row.status==1"><el-tag type="success">已审核</el-tag></template>
                                        <template v-else-if="scope.row.status==2"><el-tag type="info">未通过审核</el-tag></template>
                                    </template>
                                </el-table-column>
                                <el-table-column label="操作选项" fixed="right" min-width="140" :align="alignValue(200)">
                                    <template #default="scope">
                                        <el-button type="primary" :disabled="scope.row.status==0?false:true" @click="showRecord(scope.row)">审核</el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchData.page" :page-sizes="[20, 30, 40, 50]"
                                           :page-size="searchData.page_size" layout="total, sizes, prev, pager, next" :total="other.count">
                            </el-pagination>
                        </el-card>
                    </el-main>
                </el-container>
            </el-container>
            <el-dialog title="提现信息" width="1200px" align-center="true" class="icon-dialog" v-model="dialogRecord" :before-close="closeForm" append-to-body>
                <el-card style="width: 100%">
                    <el-form :rules="assetRules" ref="assetForm" :inline-message="true" :model="assetInfo" :validate-on-rule-change="false" label-width="200px">
                        <el-form-item label="提现账户:">
                            {{recordInfo.asset_name}} {{recordInfo.currency_name}}
                        </el-form-item>
                        <el-form-item label="提现方式:">
                            <p>{{recordInfo.payment_tool_name}}</p>
                        </el-form-item>
                        <el-form-item label="收款账户:">
                            <p>{{recordInfo.payment_account}}</p>
                        </el-form-item>
                        <el-form-item label="提现币别:">
                            {{recordInfo.asset_name}}
                        </el-form-item>
                        <el-form-item label="提现金额:">
                            {{recordInfo.asset_name}} {{recordInfo.payment_amount}}
                        </el-form-item>
                        <el-form-item label="系统时间:">
                            {{recordInfo.add_time}}
                        </el-form-item>
                        <el-form-item label="备注:">
                            {{recordInfo.payment_remark}}
                        </el-form-item>
                        <el-form-item label="手续费:" prop="service_charge">
                            <el-input v-model="assetInfo.service_charge" style="width:200px;" placeholder="请输入手续费"></el-input>
                        </el-form-item>
                        <el-form-item label="不通过原因" prop="review_comments" v-if="assetInfo.status==2">
                            <el-input v-model="assetInfo.review_comments" style="width: 500px" :rows="2" type="textarea" placeholder="不通过原因" />
                        </el-form-item>
                        <el-form-item>
                            <el-button type="success" @click="passReviewWithdrawalRecord()">到账通过审核</el-Button>
                            <el-button type="danger" @click="reviewWithdrawalRecord(2)">不通过审核</el-button>
                        </el-form-item>
                    </el-form>
                </el-card>
            </el-dialog>
        </div>
    </body>
    <!-- 共用的方法 -->
    <script src="/static/vue/mixin_admin.js"></script>
    <script src="/static/admin/js/withdrawal_record/index.js?v=<?php echo rand(1000,9999)?>"></script>
</html>
app/common.php
New file
@@ -0,0 +1,1162 @@
<?php
// 应用公共文件
use think\facade\Config;
use think\facade\Db;
/**
 * 打印调试函数
 * @param $content
 * @param $is_die
 */
function echo_dhklog($content, $beizhu = '', $log_name = '', $type = '')
{
    header('Content-type: text/html; charset=utf-8');
    $date = Date('Y-m-d');
    if (is_array($content)) {
        $content = json_encode($content, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    } else {
        $content = print_r($content, true);
    }
    if (!$log_name) {
        $log_name = $date;
    }
    $log_filename = root_path() . "/runtime/log/" . $log_name . ".log";
    $logtxt = $log_name . Date('H:i:s') . $beizhu . PHP_EOL . $content . PHP_EOL;
    if ($type == 'error') {
        //Log::error($logtxt);
    } else {
        //Log::info($logtxt);
    }
    file_put_contents($log_filename, $logtxt, FILE_APPEND);
}
/**
 * 处理数据按照某个字段分类处理
 */
function datalist($result, $one_field = '', $two_field = '', $ifarr = TRUE)
{
    if (!empty($result) && is_array($result)) {
        foreach ($result as $value) {
            if (is_array($one_field)) {
                $result_arr[$value[$one_field[0]]]['list'][] = $value;
                $result_arr[$value[$one_field[0]]][$one_field[1]] = $value[$one_field[1]];
            } else {
                if (empty($two_field)) {
                    if ($ifarr)
                        $result_arr[strval($value[$one_field])][] = $value;
                    else
                        $result_arr[strval($value[$one_field])] = $value;
                } else {
                    if ($ifarr)
                        $result_arr[strval($value[$one_field])][$value[$two_field]][] = $value;
                    else
                        $result_arr[$value[$one_field]][$value[$two_field]] = $value;
                }
            }
        }
        return $result_arr;
    } else
        return array();
}
/**
 * 处理数据按照某个字段分类处理
 */
function dataField($result, $one_field = '', $two_field = '', $ifarr = TRUE)
{
    if (!is_string($one_field)) {
        return array();
    }
    if (!is_string($two_field)) {
        return array();
    }
    if (!empty($result) && is_array($result)) {
        foreach ($result as $value) {
            if ($ifarr)
                $result_arr[strval($value[$one_field])][] = $value[$two_field];
            else
                $result_arr[strval($value[$one_field])] = $value[$two_field];
        }
        return $result_arr;
    } else
        return array();
}
function datalistinfo($result, $one_field = '', $two_field = '', $ifarr = TRUE)
{
    if (!empty($result) && is_array($result)) {
        foreach ($result as $value) {
            if (is_array($one_field)) {
                ////////////$one_field是数组的情况///////////////////
                if (empty($two_field)) {
                    $result_arr[$value[$one_field[0]]]['list'][] = $value;
                    if (empty($result_arr[$value[$one_field[0]]]['info'])) {
                        $result_arr[$value[$one_field[0]]]['info'] = $value;
                    }
                } else {
                    ////////////处理多层级关系数据
                    $result_arr[$value[$one_field[0]]]['list'][$value[$two_field]]['list'][] = $value;
                    if (empty($result_arr[$value[$one_field[0]]]['list'][$value[$two_field]]['info'])) {
                        $result_arr[$value[$one_field[0]]]['list'][$value[$two_field]]['info'] = $value;
                    }
                    if (empty($result_arr[$value[$one_field[0]]]['info'])) {
                        $result_arr[$value[$one_field[0]]]['info'] = $value;
                    }
                }
            } else {
                if (empty($two_field)) {
                    if ($ifarr)
                        $result_arr[$value[$one_field]][] = $value;
                    else
                        $result_arr[$value[$one_field]] = $value;
                } elseif (is_array($two_field)) {
                    ////////////$two_field是数组的情况///////////////////
                    $result_arr[$value[$one_field]][$value[$two_field[0]]]['list'][] = $value;
                    if (empty($result_arr[$value[$one_field]][$value[$two_field[0]]]['info'])) {
                        $result_arr[$value[$one_field]][$value[$two_field[0]]]['info'] = $value;
                    }
                } else {
                    if ($ifarr)
                        $result_arr[$value[$one_field]][$value[$two_field]][] = $value;
                    else
                        $result_arr[$value[$one_field]][$value[$two_field]] = $value;
                }
            }
        }
        return $result_arr;
    } else
        return array();
}
function getidlist($result, $one_field = '')
{
    if (!empty($result) && is_array($result)) {
        foreach ($result as $value) {
            $result_arr[] = $value[$one_field];
        }
        return $result_arr;
    } else
        return array();
}
//////将数组中的数字类型转为字符串////////
function arrayinttostring($result)
{
    if (!empty($result) && is_array($result)) {
        foreach ($result as $key => $value) {
            $result_arr[$key] = (string)$value;
        }
        return $result_arr;
    } else
        return array();
}
////////获取当前网址/////////
function getcurrurl()
{
    $pageurl = 'http://';
    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
        $pageurl = 'https://';
    }
    $pageurl .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    return $pageurl;
}
/**
 * @method 多维数组转字符串
 * @return type $srting
 */
function arraytostring($arr, $delimiter = ',')
{
    if (is_array($arr)) {
        return implode($delimiter, array_map('arraytostring', $arr));
    }
    return $arr;
}
/**
 * 日期转UNIX时间戳
 */
function to_timestamp($date)
{
    return strtotime($date);
}
/**
 * 数组转成字符串
 */
function g_implode($array)
{
    if (!empty($array)) {
        return "'" . implode("','", is_array($array) ? $array : array($array)) . "'";
    } else {
        return 0;
    }
}
function g_implodeid($array)
{
    if (!empty($array)) {
        return implode(",", is_array($array) ? $array : array($array));
    } else {
        return 0;
    }
}
/**
 * 数组转成字符串-针对含有多字段按某字段转字符串
 */
function arrtostr($array, $field)
{
    if (!empty($array)) {
        $temparr = array();
        foreach ($array as $value) {
            $temparr[] = $value[$field];
        }
        return implode(",", is_array($temparr) ? $temparr : array($temparr));
    } else {
        return '';
    }
}
/**
 * 字符串转成数组
 * @param $str
 * @param $delimiter
 * @return string[]|void
 */
function strtoarray($str = '', $delimiter = ',')
{
    if ($str) {
        return explode($delimiter, $str);
    }
}
/**
 * 模板格式化 对相等情况的处理
 * @param type $compare1
 * @param type $compare2
 * @return string
 */
function iseq($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
{
    if (isset($str) && $str == $compare) {
        return ' ' . $eqbackstr;
    }
    return '' . $neqbackstr;
}
function isinarray($str, $compare, $backstr = 'selected', $notinbackstr = '', $space = ' ')
{
    if (is_array($compare)) {
        if (in_array($str, $compare)) {
            return $space . $backstr;
        }
    } elseif ($compare == '0') {
        ////总账号权限///////
        return '';
    }
    return $space . $notinbackstr;
}
/**
 * 模板格式化 对不相等情况的处理
 * @param type $compare1
 * @param type $compare2
 * @return string
 */
////////////////
function isneq($str, $compare, $backstr = 'disabled')
{
    if (isset($str) && $str != $compare) {
        return ' ' . $backstr;
    }
    return '';
}
////大于等于///////////////
function isegt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
{
    if (isset($str) && $str >= $compare) {
        return ' ' . $eqbackstr;
    }
    return '' . $neqbackstr;
}
////大于///////////////
function isgt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
{
    if (isset($str) && $str > $compare) {
        return ' ' . $eqbackstr;
    }
    return '' . $neqbackstr;
}
////小于等于///////////////
function iselt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
{
    if (isset($str) && $str <= $compare) {
        return ' ' . $eqbackstr;
    }
    return '' . $neqbackstr;
}
////小于///////////////
function islt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
{
    if (isset($str) && $str < $compare) {
        return ' ' . $eqbackstr;
    }
    return '' . $neqbackstr;
}
function isempty($str, $emptystr = 'closed-box', $notemptystr = '', $space = ' ')
{
    if (empty($str)) {
        return $space . $emptystr;
    }
    return $space . $notemptystr;
}
function is_weixin()
{
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== FALSE) {
        return TRUE;
    }
    return FALSE;
}
function isMobile()
{
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return TRUE;
    }
    // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset($_SERVER['HTTP_VIA'])) {
        // 找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], "wap") ? TRUE : FALSE;
    }
    // 脑残法,判断手机发送的客户端标志,兼容性有待提高
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $clientkeywords = array(
            'nokia',
            'sony',
            'ericsson',
            'mot',
            'samsung',
            'htc',
            'sgh',
            'lg',
            'sharp',
            'sie-',
            'philips',
            'panasonic',
            'alcatel',
            'lenovo',
            'iphone',
            'ipod',
            'blackberry',
            'meizu',
            'android',
            'netfront',
            'symbian',
            'ucweb',
            'windowsce',
            'palm',
            'operamini',
            'operamobi',
            'openwave',
            'nexusone',
            'cldc',
            'midp',
            'wap',
            'mobile'
        );
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return TRUE;
        }
    }
    // 协议法,因为有可能不准确,放到最后判断
    if (isset($_SERVER['HTTP_ACCEPT'])) {
        // 如果只支持wml并且不支持html那一定是移动设备
        // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== FALSE) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === FALSE || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
            return TRUE;
        }
    }
    return FALSE;
}
/////判断是否是苹果机///////////
function isiphone()
{
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $clientkeywords = array(
            'iphone',
            'ipad',
            'ipod',
        );
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return TRUE;
        }
    }
    return FALSE;
}
//生成随机数
function randomnumber($length = 11)
{
    $pattern = '1234567890';
    $key = '';
    for ($i = 0; $i < $length; $i++) {
        $key .= $pattern[mt_rand(0, 9)];
    }
    return $key;
}
//生成随机数
function randomkeys($length = 4, $str = 'forgetkey')
{
    $pattern = '1234567890';
    $key = '';
    for ($i = 0; $i < $length; $i++) {
        $key .= $pattern[mt_rand(0, 9)];
    }
    session($str, $key);
    session($str . 'time', time());
    return $key;
}
function destroy_session($str = 'forgetkey')
{
    session($str, NULL);
    session($str . 'time', NULL);
}
/** 获取当前时间戳,精确到毫秒 */
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
/** 格式化时间戳,精确到毫秒,x代表毫秒 */
function microtime_format($tag, $time)
{
    $time = sprintf("%.3f", $time);
    //echo $time;exit;
    list($usec, $sec) = explode(".", $time);
    $date = date($tag, $usec);
    return str_replace('x', $sec, $date);
}
/**
 * 获取客户端IP地址1
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
 * @return mixed
 */
function getIP()
{
    $ip = FALSE;
    if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ips = explode(", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
        if ($ip) {
            array_unshift($ips, $ip);
            $ip = FALSE;
        }
        for ($i = 0; $i < count($ips); $i++) {
            if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {
                $ip = $ips[$i];
                break;
            }
        }
    }
    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
/**
 * 获取客户端IP地址2
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
 * @return mixed
 */
function get_client_ip($type = 0, $adv = FALSE)
{
    $type = $type ? 1 : 0;
    static $ip = NULL;
    if ($ip !== NULL)
        return $ip[$type];
    if ($adv) {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos = array_search('unknown', $arr);
            if (FALSE !== $pos)
                unset($arr[$pos]);
            $ip = trim($arr[0]);
        } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u", ip2long($ip));
    $ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}
/**
 * 根据年月日创建目录
 * $path
 */
function g_mkdir_ymd($path)
{
    $rooturl = '.';
    $y = date('/Y');
    $m = date('/m');
    $d = date('/d');
    g_mkdir($rooturl . $path . $y);
    g_mkdir($rooturl . $path . $y . $m);
    g_mkdir($rooturl . $path . $y . $m . $d);
    return $path . $y . $m . $d . '/';
}
/**
 * 创建目录
 */
function g_mkdir($dir, $mode = 0777, $makeindex = TRUE)
{
    if (!is_dir($dir)) {
        g_mkdir(dirname($dir));
        @mkdir($dir, $mode);
        //        if($makeindex) {
        //            @touch($dir.'/index.html');
        //            @chmod($dir.'/index.html', 0777);
        //        }
    }
    return TRUE;
}
function getstatus($str, $comparestr, $backstr = 'disabled')
{
    if ($str == $comparestr) {
        return ' ' . $backstr;
    }
    return '';
}
/**
 * 删除文件-图片
 * $path
 */
function delpic($str)
{
    if (!empty($str)) {
        $rooturl = $_SERVER["DOCUMENT_ROOT"];
        if (file_exists($rooturl . $str)) {
            unlink($rooturl . $str);
        }
    }
}
//////文件地址是否存在/////////////
function isexists($str)
{
    if (!empty($str)) {
        $rooturl = $_SERVER["DOCUMENT_ROOT"];
        if (file_exists($rooturl . $str)) {
            return TRUE;
        } else {
            return FALSE;
        }
    } else {
        return FALSE;
    }
}
//判断数组是否为空
function is_empty($d)
{
    if (is_array($d)) {
        foreach ($d as $k => $v) {
            if (is_array($v)) {
                return is_empty($v);
            } else {
                if (strlen($v) > 0) {
                    return FALSE;
                }
            }
        }
    } else {
        if (strlen($d) > 0) {
            return FALSE;
        }
    }
    return TRUE;
}
function isint($str = 0)
{
    return preg_match("/^\d*$/", $str);
}
function joinmd5($pwd)
{
    return md5(Config::get('app.md5_str') . $pwd);
}
function verifyphone($str = '')
{
    if (!empty($str)) {
        if (preg_match("/^[1689][3456789]\d{9}$/i", $str)) {
            return TRUE;
        } else
            return FALSE;
    } else
        return FALSE;
}
/**
 * GET 请求
 * @param string $url
 */
function ihttpget($url)
{
    $oCurl = curl_init();
    if (stripos($url, "https://") !== FALSE) {
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
    }
    curl_setopt($oCurl, CURLOPT_URL, $url);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
    $sContent = curl_exec($oCurl);
    $aStatus = curl_getinfo($oCurl);
    curl_close($oCurl);
    if (intval($aStatus["http_code"]) == 200) {
        return $sContent;
    } else {
        return FALSE;
    }
}
/**
 * POST 请求
 * @param string $url
 * @param array $param
 * @return string content
 */
function ihttppost($url, $param, $header = array())
{
    $oCurl = curl_init();
    if (stripos($url, "https://") !== FALSE) {
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
    }
    if (is_string($param)) {
        $strPOST = $param;
    } else {
        $aPOST = array();
        foreach ($param as $key => $val) {
            $aPOST[] = $key . "=" . urlencode($val);
        }
        $strPOST = join("&", $aPOST);
    }
    curl_setopt($oCurl, CURLOPT_URL, $url);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($oCurl, CURLOPT_POST, TRUE);
    curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
    if ($header) {
        curl_setopt($oCurl, CURLOPT_HTTPHEADER, $header);
    }
    $sContent = curl_exec($oCurl);
    $aStatus = curl_getinfo($oCurl);
    curl_close($oCurl);
    if (intval($aStatus["http_code"]) == 200) {
        return $sContent;
    } else {
        return FALSE;
    }
}
function getext($file)
{
    return pathinfo($file, PATHINFO_EXTENSION);
}
function pr($str = '')
{
    print_r($str);
    //exit;
}
function getbr($str)
{
    if (!empty($str)) {
        $str = str_replace(chr(13) . chr(10), '<br>', $str);
    }
    return $str;
}
//////获取当前日期时间戳/////////////
function getcurrdate()
{
    return strtotime(date('Y-m-d', time()));
}
/**
 * 简单的URL验证函数
 * @param $url
 * @return bool
 */
function isValidUrl($url): bool
{
    // 请根据实际需要实现更复杂的验证逻辑
    return filter_var($url, FILTER_VALIDATE_URL) !== FALSE;
}
/*
 * 获取当前语言
 */
function getLanguage($lang = 'zh-cn')
{
    switch ($lang) {
        case 'zh-cn':
            return '中文';
            break;
        case 'en-us':
            return 'English';
        case 'ar':
            return 'عربي';
            break;
        // 更多的 case 语句
        default:
            return '中文';
    }
}
// 单位自动转换函数-传字节
function getsizebytype($size = 0)
{
    $kb = 1024;         // Kilobyte
    $mb = 1024 * $kb;   // Megabyte
    $gb = 1024 * $mb;   // Gigabyte
    $tb = 1024 * $gb;   // Terabyte
    if (!is_numeric($size)) {
        return "0 B";
    } else if ($size < $kb) {
        return $size . " B";
    } else if ($size < $mb) {
        return round($size / $kb, 2) . " KB";
    } else if ($size < $gb) {
        return round($size / $mb, 2) . " MB";
    } else if ($size < $tb) {
        return round($size / $gb, 2) . " GB";
    } else {
        return round($size / $tb, 2) . " TB";
    }
}
// 获取文件大小,单位字节
function getfileSize($filedir)
{
    if (!file_exists($filedir)) {
        return 0;
    }
    $size = abs(filesize($filedir));
    return $size;
}
/**
 *
 * @return array|mixed|object|\think\App
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\DbException
 * @throws \think\db\exception\ModelNotFoundException
 */
function get_category()
{
    $list = Db::name('category')->field('id,cate_code,cate_name')->cacheAlways(TRUE, 0, 'allcategory')->order('id asc')->select()->toArray();
    return $list;
}
/**
 * 生成平台商品编码
 */
function get_platform_goods_code()
{
    $where[] = ['add_time', '>', getcurrdate()];
    $count = Db::name('goods')->where($where)->count(); //获取当天新增商品数量
    if ($count > 0) {
        $count = $count + 1;
    } else {
        $count = 1;
    }
    $code = 'P' . substr(date('Ymd'), 2) * 10000 + $count;
    return $code;
}
/**
 * 生成刊登单号
 */
function get_publish_order_code()
{
    $where[] = ['add_time', '>', getcurrdate()];
    $count = Db::name('publish_order')->where($where)->count(); //获取当天新增商品数量
    if ($count > 0) {
        $count = $count + 1;
    } else {
        $count = 1;
    }
    $code = 'KD' . substr(date('Ymd'), 2) * 10000 + $count;
    return $code;
}
/**
 * 生成随机数
 * @return int
 */
function create_random()
{
    $appDebug = env('app_debug');
    return $appDebug ? rand(1000, 9999) : 1;
}
//无限极分类转为带有 children的树形list表格结构
if (!function_exists('_generateListTree')) {
    function _generateListTree($data, $pid = 0, $config = [])
    {
        $tree = [];
        if ($data && is_array($data)) {
            foreach ($data as $v) {
                if ($v[$config[1]] == $pid) {
                    $tree[] = array_merge($v, ['children' => _generateListTree($data, $v[$config[0]], $config)]);
                }
            }
        }
        return $tree;
    }
}
function isValidChineseMobile($phoneNumber)
{
    // 中国手机号码的正则表达式
    $pattern = '/^1(3|4|5|6|7|8|9)\d{9}$/';
    // 使用preg_match函数进行匹配
    if (preg_match($pattern, $phoneNumber)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
function getNextTimestamp($timestamp, $years = 0, $months = 0, $days = 0)
{
    // 将时间戳转换为DateTime对象
    $dateTime = new DateTime('@' . $timestamp);
    // 创建DateInterval对象
    // 注意:由于PHP的DateInterval没有直接支持年和月的同时增加,我们需要分别处理
    // 但为了示例的简洁性,这里我们假设用户会正确设置参数(即不会同时增加月和年导致复杂情况)
    $interval = new DateInterval("P{$years}Y{$months}M{$days}D");
    // 给DateTime对象加上时间间隔
    $dateTime->add($interval);
    // 将修改后的DateTime对象转换回时间戳
    return $dateTime->getTimestamp();
}
/**
 * 截取中文字符串
 *
 * @param string $str 需要截取的字符串
 * @param int $start 起始位置(从0开始)
 * @param int $length 需要截取的长度,如果为null或未设置,则截取到字符串末尾
 * @param string $encoding 字符串编码,默认为'UTF-8'
 * @return string 截取后的字符串
 */
function mb_substr_chinese($str, $start = 0, $length = NULL, $encoding = 'UTF-8', $suffix = '')
{
    if (is_null($length)) {
        // 如果未指定长度,则截取到字符串末尾
        return mb_substr($str, $start, mb_strlen($str, $encoding), $encoding);
    }
    if (mb_strlen($str, $encoding) > $length) {
        return mb_substr($str, $start, $length, $encoding) . $suffix;
    } else {
        return mb_substr($str, $start, $length, $encoding);
    }
}
function formatDateTime($format, $timeStamp)
{
    return date($format, $timeStamp);
}
function getCosName($file)
{
    if ($file) {
        return ltrim($file, "/");
    } else {
        return '';
    }
}
//当前请求是否https
function isHttps()
{
    if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
        return TRUE;
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        return TRUE;
    } elseif (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
        return TRUE;
    }
    return FALSE;
}
function getfileurl($file, $iscos = 0)
{
    if ($iscos == '1') {
        $filepath = 'https://yifire-1328541130.cos.ap-chongqing.myqcloud.com' . $file;
        return $filepath;
    } else {
        return $file;
    }
}
/*
 * 去除html标签
 */
function deletehtml($str)
{
    $str = trim($str);
    $str = strip_tags($str, "");
    $str = preg_replace("/\t/", "", $str);
    $str = preg_replace("/\r\n/", "", $str);
    $str = preg_replace("/\r/", "", $str);
    $str = preg_replace("/\n/", "", $str);
    $str = preg_replace("/ /", " ", $str);
    return trim($str);
}
/*
 * 获取申请编号
 */
function get_apply_sn($prefix = 'CNLS')
{
    $rand = rand(1000, 9999);
    $order_sn = date('YmdHis') . formatId($rand);
    return $order_sn;
}
/**
 * 格式化ID
 * @param $id
 * @return string
 */
function formatId($id, $length = 6)
{
    return str_pad($id, $length, '0', STR_PAD_LEFT);
}
function convertISO8601ToBeijingTime($iso8601Date)
{
    // 创建一个 DateTime 对象
    $date = new DateTime($iso8601Date, new DateTimeZone('UTC'));
    // 将时区设置为北京时间(UTC+8)
    $date->setTimezone(new DateTimeZone('Asia/Shanghai'));
    // 格式化日期为所需格式,例如 'Y-m-d H:i:s'
    $formattedDate = $date->format('Y-m-d H:i:s');
    return $formattedDate;
}
function convertISO8601ToChineseBeijingTime($iso8601Date)
{
    $date = new DateTime($iso8601Date, new DateTimeZone('UTC'));
    $date->setTimezone(new DateTimeZone('Asia/Shanghai'));
    // 获取星期几(中文)
    $dayOfWeekMap = [
        'Sunday' => '周日',
        'Monday' => '周一',
        'Tuesday' => '周二',
        'Wednesday' => '周三',
        'Thursday' => '周四',
        'Friday' => '周五',
        'Saturday' => '周六'
    ];
    $chineseDayOfWeek = $dayOfWeekMap[$date->format('l')];
    // 获取格式化后的日期部分(不包括时间)
    $formattedDate = $date->format('Y年m月d日');
    // 确定时区缩写
    $timezoneAbbreviation = 'CST';
    // 手动拼接结果字符串
    $result = $formattedDate . ' ' . $chineseDayOfWeek . ' ' . $timezoneAbbreviation;
    return $result;
}
function isPDT($date)
{
    // 这是一个简化的示例,用于判断给定日期是否在PDT期间
    // 实际的PDT规则可能因年份而异,这里只是演示
    $year = $date->format('Y');
    $startPDT = new DateTime("$year-03-14 02:00:00", new DateTimeZone('UTC')); // PDT开始时间(UTC时间)
    $endPDT = new DateTime("$year-11-07 02:00:00", new DateTimeZone('UTC')); // PDT结束时间(UTC时间,注意这通常是夏令时结束前一晚的2点,即实际夏令时结束是在第二天的凌晨)
    $dateInUTC = clone $date; // 克隆日期对象以避免修改原始对象
    $dateInUTC->setTimezone(new DateTimeZone('UTC')); // 将日期转换为UTC时间
    // 检查日期是否在PDT范围内(基于UTC时间)
    return ($dateInUTC >= $startPDT && $dateInUTC < $endPDT);
}
function convertISO8601ToChineseFormatWithTimezone($iso8601Date)
{
    $date = new DateTime($iso8601Date, new DateTimeZone('UTC'));
    // 根据日期判断是PST还是PDT,并转换为北京时间
    $isPDT = isPDT($date);
    $pacificTimezone = $isPDT ? 'America/Los_Angeles' : 'PST8PDT'; // 太平洋时区(考虑夏令时)
    $date->setTimezone(new DateTimeZone($pacificTimezone)); // 先转换到太平洋时区(为了获取正确的星期几)
    // 但最终我们需要显示的是北京时间,所以再转换一次
    $beijingTimezone = new DateTimeZone('Asia/Shanghai'); // 北京时间
    $dateInBeijing = clone $date; // 克隆以避免修改原始日期对象
    $dateInBeijing->setTimezone($beijingTimezone);
    // 获取星期几(中文)
    $dayOfWeekMap = [
        'Sunday' => '周日',
        'Monday' => '周一',
        'Tuesday' => '周二',
        'Wednesday' => '周三',
        'Thursday' => '周四',
        'Friday' => '周五',
        'Saturday' => '周六'
    ];
    $chineseDayOfWeek = $dayOfWeekMap[$dateInBeijing->format('l')]; // 注意这里使用北京时间来确定星期几,但实际上与太平洋时间相同日期星期几是一样的
    // 获取格式化后的日期部分(北京时间,不包括时间)
    $formattedDate = $dateInBeijing->format('Y年m月d日 H:i');
    // 确定太平洋时间的时区缩写(用于显示)
    $timezoneAbbreviation = $isPDT ? 'PDT' : 'PST';
    // 手动拼接结果字符串
    $result = $formattedDate . ' ' . $chineseDayOfWeek . ' ' . $timezoneAbbreviation;
    return $result;
}
if (!function_exists('encryptUrlParam')) {
    function encryptUrlParam($param)
    {
        $key = Config::get('other.Crypt.Key');
        $iv = Config::get('other.Crypt.Iv');
        return base64_encode(openssl_encrypt($param, 'aes-256-cbc', $key, 0, $iv));
    }
}
if (!function_exists('decryptUrlParam')) {
    function decryptUrlParam($encryptedParam)
    {
        $key = Config::get('other.Crypt.Key');
        $iv = Config::get('other.Crypt.Iv');
        return openssl_decrypt(base64_decode($encryptedParam), 'aes-256-cbc', $key, 0, $iv);
    }
}
/*
 * 多语言替换
 */
function get_langs_data($langsStr, $lang)
{
    //多语言替换
    $langs = json_decode($langsStr, TRUE);
    if (!$langs) {
        return [];
    }
    // 使用array_filter筛选数组
    $data = array_filter($langs, function ($item) use ($lang) {
        return $item['lang'] === $lang;
    });
    $keys = array_keys($data);
    return $data[$keys[0]];
}
/**
 * response error
 * @param string $info
 * @param int $status
 * @return \think\response\Json
 */
function dhkMsg($info, $status = 0)
{
    return dhkResult([], $info, $status);
}
function dhkSuccess($data = [], $status = 200)
{
    return dhkResult($data, 'Successfully', $status);
}
function dhkResult($result = [], $msg = 'Successfully', $code = 200)
{
    if (preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $msg)) {
        $lang_info = \app\seller\model\LanguagePage::where('lang', 'zh-cn')->where('value', $msg)->find();
        if ($lang_info) {
            $msg = $lang_info['type'] . '.' . $lang_info['name'];
        }
    }
    $rsarr = [
        'code'       => $code,
        'message'    => $msg,
        'msg'        => $msg,
        'data'       => $result,
        'success'    => $code == 1 ? true : false,
        'time'      => time()
    ];
    return json($rsarr);
}
/*
 * 获取图片路径是用本地还是cos
 */
function get_img_url($img)
{
    if (Config::get('qcloud.isopencos') == 1) {
        return Config::get('qcloud.cos_domain') . $img;
    } else {
        return $img;
    }
}
Diff truncated after the above file
app/common/service/YouDaoTrans.php app/common/service/sms/SmsDriver.php app/common/service/sms/engine/TencentSms.php app/common/toole/Dhkhttp.php app/common/toole/ExportExcel.php app/event.php app/home/controller/Index.php app/home/controller/Testpay.php app/home/controller/Wftest.php app/home/view/common/element-plus.html app/home/view/common/header.html app/home/view/common/title.html app/home/view/index/index.html app/home/view/index/index_old.html app/home/view/index/talent.html app/middleware.php app/provider.php app/service.php composer.json config/app.php config/captcha.php config/console.php config/cookie.php config/filesystem.php config/lang.php config/log.php config/middleware.php config/other.php config/pay.php config/qcloud.php config/route.php config/session.php config/trace.php config/view.php config/youdao.php extend/common/QRcode.php extend/common/UploadFile.php extend/common/Uploadcos.php extend/common/cos-sdk-v5-7.phar extend/listen/SellerBillLog.php extend/listen/SupplierBillLog.php extend/pay/Alipay.php extend/pay/Weixin.php extend/services/CategoryService.php extend/services/DbService.php extend/services/DeliverRegionService.php extend/services/LogisticsProductService.php extend/services/PlatformLogisticsProductService.php index.html lang/ar.php lang/ar/seller.php lang/en-us.php lang/en-us/lang-group.php lang/en-us/lang-validate.php lang/en-us/seller.php lang/zh-cn.php lang/zh-cn/lang-group.php lang/zh-cn/lang-validate.php public/1.html public/1.php public/aws-tokens public/favicon.ico public/index.php public/info.php public/nginx.htaccess public/robots.txt public/router.php public/static/admin/css/admin.css public/static/admin/css/image_viewer.css public/static/admin/css/layui.css public/static/admin/font/iconfont.woff public/static/admin/js/administrators/index.js public/static/admin/js/adminmenu/index.js public/static/admin/js/bigv_info/index.js public/static/admin/js/cancel_publish_order/create.js public/static/admin/js/cancel_publish_order/index.js public/static/admin/js/category/index.js public/static/admin/js/country_code/index.js public/static/admin/js/currency/index.js public/static/admin/js/deliver_region/index.js public/static/admin/js/deliver_region_logistics/index.js public/static/admin/js/dis_platform/index.js public/static/admin/js/function.js public/static/admin/js/goods/create.js public/static/admin/js/goods/index.js public/static/admin/js/goods_brand/index.js public/static/admin/js/goods_freight_attr/index.js public/static/admin/js/goods_material/index.js public/static/admin/js/goods_purpose/index.js public/static/admin/js/goodskd/create.js public/static/admin/js/goodskd/index.js public/static/admin/js/index/index.js public/static/admin/js/jquery.config.js public/static/admin/js/language/index.js public/static/admin/js/language_pag/index.js public/static/admin/js/logistics_vas/index.js public/static/admin/js/menu/index.js public/static/admin/js/message/create.js public/static/admin/js/message/index.js public/static/admin/js/msg_category/index.js public/static/admin/js/notice/create.js public/static/admin/js/notice/index.js public/static/admin/js/partner_school/index.js public/static/admin/js/pay_bank/index.js public/static/admin/js/payment_tool/index.js public/static/admin/js/platform_logistics_product/index.js public/static/admin/js/platform_region/index.js public/static/admin/js/publish_order/create.js public/static/admin/js/publish_order/index.js public/static/admin/js/remit_record/index.js public/static/admin/js/return_exchange/index.js public/static/admin/js/return_exchange_type/index.js public/static/admin/js/sales_platform/index.js public/static/admin/js/seller/add.js public/static/admin/js/seller/index.js public/static/admin/js/seller_baseinfo/index.js public/static/admin/js/stock_country/index.js public/static/admin/js/supplier/add.js public/static/admin/js/supplier/index.js public/static/admin/js/third_party_logistics_product_temp/index.js public/static/admin/js/third_party_stock_temp/index.js public/static/admin/js/withdrawal_record/index.js public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.css public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.css public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap-grid.rtl.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.css public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.css public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap-reboot.rtl.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.css public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.css public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap-utilities.rtl.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap.css public/static/bootstrap-5.3.6-dist/css/bootstrap.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap.min.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.css public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.css.map public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.min.css public/static/bootstrap-5.3.6-dist/css/bootstrap.rtl.min.css.map public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.js public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.js.map public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.min.js public/static/bootstrap-5.3.6-dist/js/bootstrap.bundle.min.js.map public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.js public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.js.map public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.min.js public/static/bootstrap-5.3.6-dist/js/bootstrap.esm.min.js.map public/static/bootstrap-5.3.6-dist/js/bootstrap.js public/static/bootstrap-5.3.6-dist/js/bootstrap.js.map public/static/bootstrap-5.3.6-dist/js/bootstrap.min.js public/static/bootstrap-5.3.6-dist/js/bootstrap.min.js.map public/static/css/normalize.css public/static/css/success.css public/static/element/icons-vue.js public/static/element/index.css public/static/element/index.full.js public/static/element/index_other.css public/static/element/zh-cn.js public/static/home/css/index/index.css public/static/home/images/amzon.png public/static/home/images/bg1.jpg public/static/home/images/bg2.jpg public/static/home/images/bg3.jpg public/static/home/images/camel-1.jpg public/static/home/images/camel-2.png public/static/home/images/ebay.png public/static/home/images/img01.png public/static/home/images/lingcheng-1.jpg public/static/home/images/lingcheng-2.jpg public/static/home/images/logo-center.png public/static/home/images/shopify.png public/static/home/images/tools1.jpg public/static/home/images/tools2.jpg public/static/home/images/tools3.jpg public/static/home/images/tools4.jpg public/static/home/images/tools5.jpg public/static/home/images/tools6.jpg public/static/home/images/tools7.jpg public/static/home/images/tools8.jpg public/static/home/images/walmart.png public/static/home/images/wish.png public/static/home/js/index.js public/static/images/acion.png public/static/images/logo-no-bg.png public/static/images/logo.jpg public/static/images/logo.png public/static/jquery/jquery-3.7.1.min.js public/static/js/language/language.js public/static/js/success.js public/static/js/supplier/common.js public/static/js/supplier/function.js public/static/js/supplier/jquery.config.js public/static/lang/1/ar.json public/static/lang/1/en-us.json public/static/lang/1/zh-cn.json public/static/tinymce/CHANGELOG.md public/static/tinymce/js/tinymce/icons/default/icons.min.js public/static/tinymce/js/tinymce/langs/README.md public/static/tinymce/js/tinymce/langs/zh_CN.js public/static/tinymce/js/tinymce/license.md public/static/tinymce/js/tinymce/models/dom/model.min.js public/static/tinymce/js/tinymce/plugins/accordion/plugin.min.js public/static/tinymce/js/tinymce/plugins/advlist/plugin.min.js public/static/tinymce/js/tinymce/plugins/anchor/plugin.min.js public/static/tinymce/js/tinymce/plugins/autolink/plugin.min.js public/static/tinymce/js/tinymce/plugins/autoresize/plugin.min.js public/static/tinymce/js/tinymce/plugins/autosave/plugin.min.js public/static/tinymce/js/tinymce/plugins/charmap/plugin.min.js public/static/tinymce/js/tinymce/plugins/code/plugin.min.js public/static/tinymce/js/tinymce/plugins/codesample/plugin.min.js public/static/tinymce/js/tinymce/plugins/directionality/plugin.min.js public/static/tinymce/js/tinymce/plugins/emoticons/js/emojiimages.js public/static/tinymce/js/tinymce/plugins/emoticons/js/emojiimages.min.js public/static/tinymce/js/tinymce/plugins/emoticons/js/emojis.js public/static/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js public/static/tinymce/js/tinymce/plugins/emoticons/plugin.min.js public/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ar.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/bg_BG.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ca.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/cs.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/da.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/de.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/el.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/en.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/es.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/eu.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fa.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fi.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fr_FR.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/he_IL.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hi.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hr.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hu_HU.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/id.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/it.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ja.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/kk.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ko_KR.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ms.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/nb_NO.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/nl.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pl.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pt_BR.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pt_PT.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ro.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ru.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sk.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sl_SI.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sv_SE.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/th_TH.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/tr.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/uk.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/vi.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/zh_CN.js public/static/tinymce/js/tinymce/plugins/help/js/i18n/keynav/zh_TW.js public/static/tinymce/js/tinymce/plugins/help/plugin.min.js public/static/tinymce/js/tinymce/plugins/image/plugin.min.js public/static/tinymce/js/tinymce/plugins/importcss/plugin.min.js public/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js public/static/tinymce/js/tinymce/plugins/link/plugin.min.js public/static/tinymce/js/tinymce/plugins/lists/plugin.min.js public/static/tinymce/js/tinymce/plugins/media/plugin.min.js public/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js public/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js public/static/tinymce/js/tinymce/plugins/preview/plugin.min.js public/static/tinymce/js/tinymce/plugins/quickbars/plugin.min.js public/static/tinymce/js/tinymce/plugins/save/plugin.min.js public/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js public/static/tinymce/js/tinymce/plugins/table/plugin.min.js public/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js public/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js public/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js public/static/tinymce/js/tinymce/skins/content/dark/content.js public/static/tinymce/js/tinymce/skins/content/dark/content.min.css public/static/tinymce/js/tinymce/skins/content/default/content.js public/static/tinymce/js/tinymce/skins/content/default/content.min.css public/static/tinymce/js/tinymce/skins/content/document/content.js public/static/tinymce/js/tinymce/skins/content/document/content.min.css public/static/tinymce/js/tinymce/skins/content/tinymce-5-dark/content.js public/static/tinymce/js/tinymce/skins/content/tinymce-5-dark/content.min.css public/static/tinymce/js/tinymce/skins/content/tinymce-5/content.js public/static/tinymce/js/tinymce/skins/content/tinymce-5/content.min.css public/static/tinymce/js/tinymce/skins/content/writer/content.js public/static/tinymce/js/tinymce/skins/content/writer/content.min.css public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.js public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.js public/static/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.js public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.js public/static/tinymce/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css public/static/tinymce/js/tinymce/skins/ui/oxide/content.inline.js public/static/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css public/static/tinymce/js/tinymce/skins/ui/oxide/content.js public/static/tinymce/js/tinymce/skins/ui/oxide/content.min.css public/static/tinymce/js/tinymce/skins/ui/oxide/skin.js public/static/tinymce/js/tinymce/skins/ui/oxide/skin.min.css public/static/tinymce/js/tinymce/skins/ui/oxide/skin.shadowdom.js public/static/tinymce/js/tinymce/skins/ui/oxide/skin.shadowdom.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.inline.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.inline.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.inline.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5/content.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.min.css public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.js public/static/tinymce/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css public/static/tinymce/js/tinymce/themes/silver/theme.min.js public/static/tinymce/js/tinymce/tinymce.d.ts public/static/tinymce/js/tinymce/tinymce.min.js public/static/vue/axios.min.js public/static/vue/mixin.js public/static/vue/mixin_admin.js public/static/vue/mixinbuyer.js public/static/vue/mixins/uploader-mixin.js public/static/vue/mixins/video-player-mixin.js public/static/vue/mixinseller.js public/static/vue/moment.min.js public/static/vue/qs.min.js public/static/vue/request.js public/static/vue/vue.global.js public/static/vue/vue.global.prod.js route/app.php think vendor/.gitignore vendor/adbario/php-dot-notation/LICENSE.md vendor/adbario/php-dot-notation/composer.json vendor/adbario/php-dot-notation/src/Dot.php vendor/adbario/php-dot-notation/src/helpers.php vendor/alibabacloud/tea-fileform/.gitignore vendor/alibabacloud/tea-fileform/.php_cs.dist vendor/alibabacloud/tea-fileform/README-CN.md vendor/alibabacloud/tea-fileform/README.md vendor/alibabacloud/tea-fileform/composer.json vendor/alibabacloud/tea-fileform/phpunit.xml vendor/alibabacloud/tea-fileform/src/FileForm.php vendor/alibabacloud/tea-fileform/src/FileForm/FileField.php vendor/alibabacloud/tea-fileform/src/FileFormStream.php vendor/alibabacloud/tea-fileform/tests/FileFormTest.php vendor/alibabacloud/tea-fileform/tests/bootstrap.php vendor/alibabacloud/tea/.php_cs.dist vendor/alibabacloud/tea/CHANGELOG.md vendor/alibabacloud/tea/LICENSE.md vendor/alibabacloud/tea/README.md vendor/alibabacloud/tea/composer.json vendor/alibabacloud/tea/src/Exception/TeaError.php vendor/alibabacloud/tea/src/Exception/TeaRetryError.php vendor/alibabacloud/tea/src/Exception/TeaUnableRetryError.php vendor/alibabacloud/tea/src/Helper.php vendor/alibabacloud/tea/src/Model.php vendor/alibabacloud/tea/src/Parameter.php vendor/alibabacloud/tea/src/Request.php vendor/alibabacloud/tea/src/Response.php vendor/alibabacloud/tea/src/Tea.php vendor/alipaysdk/easysdk/.gitattributes vendor/alipaysdk/easysdk/.gitignore vendor/alipaysdk/easysdk/APIDoc.md vendor/alipaysdk/easysdk/CHANGELOG vendor/alipaysdk/easysdk/LICENSE vendor/alipaysdk/easysdk/README.md vendor/alipaysdk/easysdk/composer.json vendor/alipaysdk/easysdk/csharp/AlipayEasySDK.sln vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/AlipayEasySDK.csproj vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Models/AlipayOfflineMaterialImageUploadResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Models/AlipaySystemOauthTokenResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Models/AlipayOpenAppQrcodeCreateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Models/AlipayOfflineMaterialImageUploadResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Factory/Factory.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicLifeMsgRecallResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentCreateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentModifyResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageSingleSendResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageTotalSendResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicSettingCategoryQueryResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Article.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Context.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Keyword.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Template.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Text.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceAddResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceUpdateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateAddResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateUpdateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Models/AlipayOpenAppMiniTemplatemessageSendResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenCertifyResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenInitializeResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenQueryResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/IdentityParam.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/MerchantConfig.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Models/AlipayTradeAppPayResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayDataDataserviceBillDownloadurlQueryResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCancelResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCloseResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCreateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeFastpayRefundQueryResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeQueryResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeRefundResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/PresetPayToolInfo.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/RefundRoyaltyResult.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeFundBill.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleDetail.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleInfo.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePayResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePrecreateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/TradeFundBill.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/VoucherDetail.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/AlipayTradeCreateResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/HuabeiConfig.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Models/AlipayTradePagePayResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Models/AlipayTradeWapPayResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Models/AlipaySecurityRiskContentDetectResponse.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/AES/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Client.cs vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Models/AlipayOpenApiGenericResponse.cs vendor/alipaysdk/easysdk/csharp/README.md vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Image/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Base/OAuth/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Qrcode/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Video/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Factory/FactoryTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayCertPublicKey_RSA2.crt vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayRootCert.crt vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/appCertPublicKey_2019051064521003.crt vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/privateKey.json vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/sample.mp4 vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/sample.png vendor/alipaysdk/easysdk/csharp/UnitTest/Marketing/OpenLife/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Marketing/Pass/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Marketing/TemplateMessage/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Member/Identification/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/App/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Common/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/FaceToFace/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Huabei/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Page/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Payment/Wap/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Security/TextRisk/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/TestAccount.cs vendor/alipaysdk/easysdk/csharp/UnitTest/UnitTest.csproj vendor/alipaysdk/easysdk/csharp/UnitTest/Util/AES/ClientTest.cs vendor/alipaysdk/easysdk/csharp/UnitTest/Util/Generic/ClientTest.cs vendor/alipaysdk/easysdk/java/README.md vendor/alipaysdk/easysdk/java/pom.xml vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/image/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/image/models/AlipayOfflineMaterialImageUploadResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/oauth/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/oauth/models/AlipaySystemOauthTokenResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/qrcode/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/qrcode/models/AlipayOpenAppQrcodeCreateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/video/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/base/video/models/AlipayOfflineMaterialImageUploadResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/factory/Factory.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/factory/MultipleFactory.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunKMSClient.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunKMSConfig.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunKMSSigner.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/AliyunRpcClient.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/AccessKeyCredentials.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/BasicSessionCredentials.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/EcsRamRoleCredentials.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/ICredentials.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/exceptions/CredentialException.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/CompatibleUrlConnClient.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/CompositeX509TrustManager.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/FormatType.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/HttpMessage.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/HttpRequest.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/HttpResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/MethodType.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/http/TrueHostnameVerifier.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/CredentialsProviderFactory.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/ECSMetadataServiceCredentialsFetcher.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/EcsRamRoleCredentialsProvider.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/ICredentialsProvider.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/RamRoleArnCredentialsProvider.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/provider/StaticCredentialsProvider.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/AcsURLEncoder.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/Base64Utils.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/CredentialType.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/HmacSHA1Signer.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/ParameterUtils.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/credentials/utils/StringUtils.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/AsymmetricSignRequest.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/AsymmetricSignResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/GetPublicKeyRequest.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/GetPublicKeyResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/kms/aliyun/models/RuntimeOptions.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicLifeMsgRecallResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageContentCreateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageContentModifyResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageSingleSendResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicMessageTotalSendResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicSettingCategoryQueryResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Article.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Context.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Keyword.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Template.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/openlife/models/Text.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassInstanceAddResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassInstanceUpdateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassTemplateAddResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/pass/models/AlipayPassTemplateUpdateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/templatemessage/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/marketing/templatemessage/models/AlipayOpenAppMiniTemplatemessageSendResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/AlipayUserCertifyOpenCertifyResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/AlipayUserCertifyOpenInitializeResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/AlipayUserCertifyOpenQueryResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/IdentityParam.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/member/identification/models/MerchantConfig.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/app/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/app/models/AlipayTradeAppPayResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayDataDataserviceBillDownloadurlQueryResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeCancelResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeCloseResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeCreateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeFastpayRefundQueryResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeQueryResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/AlipayTradeRefundResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/PresetPayToolInfo.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/RefundRoyaltyResult.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/TradeFundBill.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/TradeSettleDetail.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/common/models/TradeSettleInfo.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/AlipayTradePayResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/AlipayTradePrecreateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/TradeFundBill.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/facetoface/models/VoucherDetail.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/huabei/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/huabei/models/AlipayTradeCreateResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/huabei/models/HuabeiConfig.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/page/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/page/models/AlipayTradePagePayResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/wap/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/payment/wap/models/AlipayTradeWapPayResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/security/textrisk/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/security/textrisk/models/AlipaySecurityRiskContentDetectResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/aes/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/generic/Client.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/generic/models/AlipayOpenApiGenericResponse.java vendor/alipaysdk/easysdk/java/src/main/java/com/alipay/easysdk/util/generic/models/AlipayOpenApiGenericSDKResponse.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/TestAccount.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/image/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/oauth/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/qrcode/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/base/video/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/marketing/openlife/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/marketing/pass/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/marketing/templatemessage/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/member/identification/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/multipleFactory/MultipleFactoryTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/app/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/common/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/facetoface/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/huabei/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/page/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/payment/wap/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/security/textrisk/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/util/aes/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/java/com/alipay/easysdk/util/generic/ClientTest.java vendor/alipaysdk/easysdk/java/src/test/resources/fixture/alipayCertPublicKey_RSA2.crt vendor/alipaysdk/easysdk/java/src/test/resources/fixture/alipayRootCert.crt vendor/alipaysdk/easysdk/java/src/test/resources/fixture/aliyunAccessKey.json vendor/alipaysdk/easysdk/java/src/test/resources/fixture/appCertPublicKey_2021002177673029.crt vendor/alipaysdk/easysdk/java/src/test/resources/fixture/privateKey.json vendor/alipaysdk/easysdk/java/src/test/resources/fixture/sample.mp4 vendor/alipaysdk/easysdk/java/src/test/resources/fixture/sample.png vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel.sln vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/EasySDKKernel.csproj vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/AlipayConstants.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/CertEnvironment.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Client.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Config.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Context.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/AES.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/AntCertificationUtil.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/ArgumentValidator.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/DictionaryUtil.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/JsonUtil.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/MultipartUtil.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/PageUtil.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/ResponseChecker.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/SignContentExtractor.cs vendor/alipaysdk/easysdk/kernel/csharp/EasySDKKernel/Kernel/Util/Signer.cs vendor/alipaysdk/easysdk/kernel/java/pom.xml vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/AlipayConstants.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/CertEnvironment.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/Client.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/Config.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/Context.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/AES.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/AntCertificationUtil.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/JsonUtil.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/MultipartUtil.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/PageUtil.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/ResponseChecker.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/SignContentExtractor.java vendor/alipaysdk/easysdk/kernel/java/src/main/java/com/alipay/easysdk/kernel/util/Signer.java vendor/alipaysdk/easysdk/php/README.md vendor/alipaysdk/easysdk/php/src/Base/Image/Client.php vendor/alipaysdk/easysdk/php/src/Base/Image/Models/AlipayOfflineMaterialImageUploadResponse.php vendor/alipaysdk/easysdk/php/src/Base/OAuth/Client.php vendor/alipaysdk/easysdk/php/src/Base/OAuth/Models/AlipaySystemOauthTokenResponse.php vendor/alipaysdk/easysdk/php/src/Base/Qrcode/Client.php vendor/alipaysdk/easysdk/php/src/Base/Qrcode/Models/AlipayOpenAppQrcodeCreateResponse.php vendor/alipaysdk/easysdk/php/src/Base/Video/Client.php vendor/alipaysdk/easysdk/php/src/Base/Video/Models/AlipayOfflineMaterialImageUploadResponse.php vendor/alipaysdk/easysdk/php/src/Kernel/AlipayConstants.php vendor/alipaysdk/easysdk/php/src/Kernel/CertEnvironment.php vendor/alipaysdk/easysdk/php/src/Kernel/Config.php vendor/alipaysdk/easysdk/php/src/Kernel/EasySDKKernel.php vendor/alipaysdk/easysdk/php/src/Kernel/Exceptions/RuntimeException.php vendor/alipaysdk/easysdk/php/src/Kernel/Factory.php vendor/alipaysdk/easysdk/php/src/Kernel/MultipleFactory.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/AES.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/AlipayEncrypt.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/AntCertificationUtil.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/JsonUtil.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/PageUtil.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/ResponseChecker.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/SignContentExtractor.php vendor/alipaysdk/easysdk/php/src/Kernel/Util/Signer.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Client.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicLifeMsgRecallResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentCreateResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentModifyResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageSingleSendResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicMessageTotalSendResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicSettingCategoryQueryResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Article.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Context.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Keyword.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Template.php vendor/alipaysdk/easysdk/php/src/Marketing/OpenLife/Models/Text.php vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Client.php vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassInstanceAddResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassInstanceUpdateResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassTemplateAddResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/Pass/Models/AlipayPassTemplateUpdateResponse.php vendor/alipaysdk/easysdk/php/src/Marketing/TemplateMessage/Client.php vendor/alipaysdk/easysdk/php/src/Marketing/TemplateMessage/Models/AlipayOpenAppMiniTemplatemessageSendResponse.php vendor/alipaysdk/easysdk/php/src/Member/Identification/Client.php vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/AlipayUserCertifyOpenCertifyResponse.php vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/AlipayUserCertifyOpenInitializeResponse.php vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/AlipayUserCertifyOpenQueryResponse.php vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/IdentityParam.php vendor/alipaysdk/easysdk/php/src/Member/Identification/Models/MerchantConfig.php vendor/alipaysdk/easysdk/php/src/Payment/App/Client.php vendor/alipaysdk/easysdk/php/src/Payment/App/Models/AlipayTradeAppPayResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Client.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayDataDataserviceBillDownloadurlQueryResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeCancelResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeCloseResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeCreateResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeFastpayRefundQueryResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeQueryResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/AlipayTradeRefundResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/PresetPayToolInfo.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/RefundRoyaltyResult.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/TradeFundBill.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/TradeSettleDetail.php vendor/alipaysdk/easysdk/php/src/Payment/Common/Models/TradeSettleInfo.php vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Client.php vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/AlipayTradePayResponse.php vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/AlipayTradePrecreateResponse.php vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/TradeFundBill.php vendor/alipaysdk/easysdk/php/src/Payment/FaceToFace/Models/VoucherDetail.php vendor/alipaysdk/easysdk/php/src/Payment/Huabei/Client.php vendor/alipaysdk/easysdk/php/src/Payment/Huabei/Models/AlipayTradeCreateResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Huabei/Models/HuabeiConfig.php vendor/alipaysdk/easysdk/php/src/Payment/Page/Client.php vendor/alipaysdk/easysdk/php/src/Payment/Page/Models/AlipayTradePagePayResponse.php vendor/alipaysdk/easysdk/php/src/Payment/Wap/Client.php vendor/alipaysdk/easysdk/php/src/Payment/Wap/Models/AlipayTradeWapPayResponse.php vendor/alipaysdk/easysdk/php/src/Security/TextRisk/Client.php vendor/alipaysdk/easysdk/php/src/Security/TextRisk/Models/AlipaySecurityRiskContentDetectResponse.php vendor/alipaysdk/easysdk/php/src/Util/AES/Client.php vendor/alipaysdk/easysdk/php/src/Util/Generic/Client.php vendor/alipaysdk/easysdk/php/src/Util/Generic/Models/AlipayOpenApiGenericResponse.php vendor/alipaysdk/easysdk/php/src/Util/Generic/Models/AlipayOpenApiGenericSDKResponse.php vendor/alipaysdk/easysdk/php/test/TestAccount.php vendor/alipaysdk/easysdk/php/test/base/image/ClientTest.php vendor/alipaysdk/easysdk/php/test/base/oauth/ClientTest.php vendor/alipaysdk/easysdk/php/test/base/qrcode/ClientTest.php vendor/alipaysdk/easysdk/php/test/base/video/ClientTest.php vendor/alipaysdk/easysdk/php/test/marketing/openlife/ClientTest.php vendor/alipaysdk/easysdk/php/test/marketing/pass/ClientTest.php vendor/alipaysdk/easysdk/php/test/marketing/templatemessage/ClientTest.php vendor/alipaysdk/easysdk/php/test/member/identification/ClientTest.php vendor/alipaysdk/easysdk/php/test/multipleFactory/ClientTest.php vendor/alipaysdk/easysdk/php/test/payment/app/ClientTest.php vendor/alipaysdk/easysdk/php/test/payment/common/ClientTest.php vendor/alipaysdk/easysdk/php/test/payment/facetoface/ClientTest.php vendor/alipaysdk/easysdk/php/test/payment/huabei/ClientTest.php vendor/alipaysdk/easysdk/php/test/payment/page/ClientTest.php vendor/alipaysdk/easysdk/php/test/payment/wap/ClientTest.php vendor/alipaysdk/easysdk/php/test/resources/fixture/alipayCertPublicKey_RSA2.crt vendor/alipaysdk/easysdk/php/test/resources/fixture/alipayRootCert.crt vendor/alipaysdk/easysdk/php/test/resources/fixture/appCertPublicKey_2019051064521003.crt vendor/alipaysdk/easysdk/php/test/resources/fixture/privateKey.json vendor/alipaysdk/easysdk/php/test/resources/fixture/sample.mp4 vendor/alipaysdk/easysdk/php/test/resources/fixture/sample.png vendor/alipaysdk/easysdk/php/test/security/textrisk/ClientTest.php vendor/alipaysdk/easysdk/php/test/util/aes/ClientTest.php vendor/alipaysdk/easysdk/php/test/util/generic/ClientTest.php vendor/alipaysdk/easysdk/tea/base/image/Teafile vendor/alipaysdk/easysdk/tea/base/image/main.tea vendor/alipaysdk/easysdk/tea/base/oauth/Teafile vendor/alipaysdk/easysdk/tea/base/oauth/main.tea vendor/alipaysdk/easysdk/tea/base/qrcode/Teafile vendor/alipaysdk/easysdk/tea/base/qrcode/main.tea vendor/alipaysdk/easysdk/tea/base/video/Teafile vendor/alipaysdk/easysdk/tea/base/video/main.tea vendor/alipaysdk/easysdk/tea/kernel/Teafile vendor/alipaysdk/easysdk/tea/kernel/main.tea vendor/alipaysdk/easysdk/tea/marketing/openlife/Teafile vendor/alipaysdk/easysdk/tea/marketing/openlife/main.tea vendor/alipaysdk/easysdk/tea/marketing/pass/Teafile vendor/alipaysdk/easysdk/tea/marketing/pass/main.tea vendor/alipaysdk/easysdk/tea/marketing/templateMessage/Teafile vendor/alipaysdk/easysdk/tea/marketing/templateMessage/main.tea vendor/alipaysdk/easysdk/tea/member/identification/Teafile vendor/alipaysdk/easysdk/tea/member/identification/main.tea vendor/alipaysdk/easysdk/tea/payment/app/Teafile vendor/alipaysdk/easysdk/tea/payment/app/main.tea vendor/alipaysdk/easysdk/tea/payment/common/Teafile vendor/alipaysdk/easysdk/tea/payment/common/main.tea vendor/alipaysdk/easysdk/tea/payment/faceToFace/Teafile vendor/alipaysdk/easysdk/tea/payment/faceToFace/main.tea vendor/alipaysdk/easysdk/tea/payment/huabei/Teafile vendor/alipaysdk/easysdk/tea/payment/huabei/main.tea vendor/alipaysdk/easysdk/tea/payment/page/Teafile vendor/alipaysdk/easysdk/tea/payment/page/main.tea vendor/alipaysdk/easysdk/tea/payment/wap/Teafile vendor/alipaysdk/easysdk/tea/payment/wap/main.tea vendor/alipaysdk/easysdk/tea/security/textRisk/Teafile vendor/alipaysdk/easysdk/tea/security/textRisk/main.tea vendor/alipaysdk/easysdk/tea/trans/Teafile vendor/alipaysdk/easysdk/tea/trans/main.tea vendor/alipaysdk/easysdk/tea/util/aes/Teafile vendor/alipaysdk/easysdk/tea/util/aes/main.tea vendor/alipaysdk/easysdk/tea/util/generic/Teafile vendor/alipaysdk/easysdk/tea/util/generic/main.tea vendor/autoload.php vendor/bin/CertificateDownloader.php vendor/bin/CertificateDownloader.php.bat vendor/bin/var-dump-server vendor/bin/var-dump-server.bat vendor/composer/ClassLoader.php vendor/composer/InstalledVersions.php vendor/composer/LICENSE vendor/composer/autoload_classmap.php vendor/composer/autoload_files.php vendor/composer/autoload_namespaces.php vendor/composer/autoload_psr4.php vendor/composer/autoload_real.php vendor/composer/autoload_static.php vendor/composer/installed.json vendor/composer/installed.php vendor/composer/pcre/LICENSE vendor/composer/pcre/README.md vendor/composer/pcre/composer.json vendor/composer/pcre/extension.neon vendor/composer/pcre/src/MatchAllResult.php vendor/composer/pcre/src/MatchAllStrictGroupsResult.php vendor/composer/pcre/src/MatchAllWithOffsetsResult.php vendor/composer/pcre/src/MatchResult.php vendor/composer/pcre/src/MatchStrictGroupsResult.php vendor/composer/pcre/src/MatchWithOffsetsResult.php vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php vendor/composer/pcre/src/PHPStan/PregMatchFlags.php vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php vendor/composer/pcre/src/PcreException.php vendor/composer/pcre/src/Preg.php vendor/composer/pcre/src/Regex.php vendor/composer/pcre/src/ReplaceResult.php vendor/composer/pcre/src/UnexpectedNullMatchException.php vendor/composer/platform_check.php vendor/double-break/spapi-php/.gitignore vendor/double-break/spapi-php/LICENSE vendor/double-break/spapi-php/README.md vendor/double-break/spapi-php/composer.json vendor/double-break/spapi-php/generator.php vendor/double-break/spapi-php/src/ASECryptoStream.php vendor/double-break/spapi-php/src/Api/AplusContent.php vendor/double-break/spapi-php/src/Api/Authorization.php vendor/double-break/spapi-php/src/Api/CatalogItems.php vendor/double-break/spapi-php/src/Api/Easy.php vendor/double-break/spapi-php/src/Api/FbaInboundEligibility.php vendor/double-break/spapi-php/src/Api/FbaInventory.php vendor/double-break/spapi-php/src/Api/FbaSmallAndLight.php vendor/double-break/spapi-php/src/Api/Feeds.php vendor/double-break/spapi-php/src/Api/Finances.php vendor/double-break/spapi-php/src/Api/FulfillmentInbound.php vendor/double-break/spapi-php/src/Api/FulfillmentOutbound.php vendor/double-break/spapi-php/src/Api/ListingsItems.php vendor/double-break/spapi-php/src/Api/ListingsRestrictions.php vendor/double-break/spapi-php/src/Api/MerchantFulfillment.php vendor/double-break/spapi-php/src/Api/Messaging.php vendor/double-break/spapi-php/src/Api/Notifications.php vendor/double-break/spapi-php/src/Api/Orders.php vendor/double-break/spapi-php/src/Api/ProductFees.php vendor/double-break/spapi-php/src/Api/ProductPricing.php vendor/double-break/spapi-php/src/Api/ProductTypeDefinitions.php vendor/double-break/spapi-php/src/Api/Reports.php vendor/double-break/spapi-php/src/Api/Sales.php vendor/double-break/spapi-php/src/Api/Sellers.php vendor/double-break/spapi-php/src/Api/Services.php vendor/double-break/spapi-php/src/Api/ShipmentInvoicing.php vendor/double-break/spapi-php/src/Api/Shipping.php vendor/double-break/spapi-php/src/Api/Solicitations.php vendor/double-break/spapi-php/src/Api/Tokens.php vendor/double-break/spapi-php/src/Api/Uploads.php vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentInventory.php vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentOrders.php vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentPayments.php vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentSandboxTestData.php vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentShipping.php vendor/double-break/spapi-php/src/Api/VendorDirectFulfillmentTransactions.php vendor/double-break/spapi-php/src/Api/VendorInvoices.php vendor/double-break/spapi-php/src/Api/VendorOrders.php vendor/double-break/spapi-php/src/Api/VendorShipments.php vendor/double-break/spapi-php/src/Api/VendorTransactionStatus.php vendor/double-break/spapi-php/src/Client.php vendor/double-break/spapi-php/src/Credentials.php vendor/double-break/spapi-php/src/Helper/Feeder.php vendor/double-break/spapi-php/src/HttpClientFactoryTrait.php vendor/double-break/spapi-php/src/IncorrectResponseException.php vendor/double-break/spapi-php/src/Signer.php vendor/double-break/spapi-php/src/SignerException.php vendor/double-break/spapi-php/src/SimpleTokenStorage.php vendor/double-break/spapi-php/src/TokenStorageInterface.php vendor/guzzlehttp/guzzle/.php_cs vendor/guzzlehttp/guzzle/CHANGELOG.md vendor/guzzlehttp/guzzle/Dockerfile vendor/guzzlehttp/guzzle/LICENSE vendor/guzzlehttp/guzzle/README.md vendor/guzzlehttp/guzzle/UPGRADING.md vendor/guzzlehttp/guzzle/composer.json vendor/guzzlehttp/guzzle/src/Client.php vendor/guzzlehttp/guzzle/src/ClientInterface.php vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php vendor/guzzlehttp/guzzle/src/Exception/ClientException.php vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php vendor/guzzlehttp/guzzle/src/Exception/RequestException.php vendor/guzzlehttp/guzzle/src/Exception/SeekException.php vendor/guzzlehttp/guzzle/src/Exception/ServerException.php vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php vendor/guzzlehttp/guzzle/src/Exception/TransferException.php vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php vendor/guzzlehttp/guzzle/src/Handler/Proxy.php vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php vendor/guzzlehttp/guzzle/src/HandlerStack.php vendor/guzzlehttp/guzzle/src/MessageFormatter.php vendor/guzzlehttp/guzzle/src/Middleware.php vendor/guzzlehttp/guzzle/src/Pool.php vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php vendor/guzzlehttp/guzzle/src/RequestOptions.php vendor/guzzlehttp/guzzle/src/RetryMiddleware.php vendor/guzzlehttp/guzzle/src/TransferStats.php vendor/guzzlehttp/guzzle/src/UriTemplate.php vendor/guzzlehttp/guzzle/src/Utils.php vendor/guzzlehttp/guzzle/src/functions.php vendor/guzzlehttp/guzzle/src/functions_include.php vendor/guzzlehttp/promises/CHANGELOG.md vendor/guzzlehttp/promises/LICENSE vendor/guzzlehttp/promises/README.md vendor/guzzlehttp/promises/composer.json vendor/guzzlehttp/promises/src/AggregateException.php vendor/guzzlehttp/promises/src/CancellationException.php vendor/guzzlehttp/promises/src/Coroutine.php vendor/guzzlehttp/promises/src/Create.php vendor/guzzlehttp/promises/src/Each.php vendor/guzzlehttp/promises/src/EachPromise.php vendor/guzzlehttp/promises/src/FulfilledPromise.php vendor/guzzlehttp/promises/src/Is.php vendor/guzzlehttp/promises/src/Promise.php vendor/guzzlehttp/promises/src/PromiseInterface.php vendor/guzzlehttp/promises/src/PromisorInterface.php vendor/guzzlehttp/promises/src/RejectedPromise.php vendor/guzzlehttp/promises/src/RejectionException.php vendor/guzzlehttp/promises/src/TaskQueue.php vendor/guzzlehttp/promises/src/TaskQueueInterface.php vendor/guzzlehttp/promises/src/Utils.php vendor/guzzlehttp/promises/src/functions.php vendor/guzzlehttp/promises/src/functions_include.php vendor/guzzlehttp/psr7/.github/FUNDING.yml vendor/guzzlehttp/psr7/.github/stale.yml vendor/guzzlehttp/psr7/.github/workflows/ci.yml vendor/guzzlehttp/psr7/.github/workflows/integration.yml vendor/guzzlehttp/psr7/.github/workflows/static.yml vendor/guzzlehttp/psr7/.php_cs.dist vendor/guzzlehttp/psr7/CHANGELOG.md vendor/guzzlehttp/psr7/LICENSE vendor/guzzlehttp/psr7/README.md vendor/guzzlehttp/psr7/composer.json vendor/guzzlehttp/psr7/src/AppendStream.php vendor/guzzlehttp/psr7/src/BufferStream.php vendor/guzzlehttp/psr7/src/CachingStream.php vendor/guzzlehttp/psr7/src/DroppingStream.php vendor/guzzlehttp/psr7/src/FnStream.php vendor/guzzlehttp/psr7/src/Header.php vendor/guzzlehttp/psr7/src/InflateStream.php vendor/guzzlehttp/psr7/src/LazyOpenStream.php vendor/guzzlehttp/psr7/src/LimitStream.php vendor/guzzlehttp/psr7/src/Message.php vendor/guzzlehttp/psr7/src/MessageTrait.php vendor/guzzlehttp/psr7/src/MimeType.php vendor/guzzlehttp/psr7/src/MultipartStream.php vendor/guzzlehttp/psr7/src/NoSeekStream.php vendor/guzzlehttp/psr7/src/PumpStream.php vendor/guzzlehttp/psr7/src/Query.php vendor/guzzlehttp/psr7/src/Request.php vendor/guzzlehttp/psr7/src/Response.php vendor/guzzlehttp/psr7/src/Rfc7230.php vendor/guzzlehttp/psr7/src/ServerRequest.php vendor/guzzlehttp/psr7/src/Stream.php vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php vendor/guzzlehttp/psr7/src/StreamWrapper.php vendor/guzzlehttp/psr7/src/UploadedFile.php vendor/guzzlehttp/psr7/src/Uri.php vendor/guzzlehttp/psr7/src/UriComparator.php vendor/guzzlehttp/psr7/src/UriNormalizer.php vendor/guzzlehttp/psr7/src/UriResolver.php vendor/guzzlehttp/psr7/src/Utils.php vendor/guzzlehttp/psr7/src/functions.php vendor/guzzlehttp/psr7/src/functions_include.php vendor/guzzlehttp/uri-template/CHANGELOG.md vendor/guzzlehttp/uri-template/LICENSE vendor/guzzlehttp/uri-template/README.md vendor/guzzlehttp/uri-template/composer.json vendor/guzzlehttp/uri-template/src/UriTemplate.php vendor/league/flysystem-cached-adapter/.editorconfig vendor/league/flysystem-cached-adapter/.gitignore vendor/league/flysystem-cached-adapter/.php_cs vendor/league/flysystem-cached-adapter/.scrutinizer.yml vendor/league/flysystem-cached-adapter/.travis.yml vendor/league/flysystem-cached-adapter/LICENSE vendor/league/flysystem-cached-adapter/clover/.gitignore vendor/league/flysystem-cached-adapter/composer.json vendor/league/flysystem-cached-adapter/phpspec.yml vendor/league/flysystem-cached-adapter/phpunit.php vendor/league/flysystem-cached-adapter/phpunit.xml vendor/league/flysystem-cached-adapter/readme.md vendor/league/flysystem-cached-adapter/spec/CachedAdapterSpec.php vendor/league/flysystem-cached-adapter/src/CacheInterface.php vendor/league/flysystem-cached-adapter/src/CachedAdapter.php vendor/league/flysystem-cached-adapter/src/Storage/AbstractCache.php vendor/league/flysystem-cached-adapter/src/Storage/Adapter.php vendor/league/flysystem-cached-adapter/src/Storage/Memcached.php vendor/league/flysystem-cached-adapter/src/Storage/Memory.php vendor/league/flysystem-cached-adapter/src/Storage/Noop.php vendor/league/flysystem-cached-adapter/src/Storage/PhpRedis.php vendor/league/flysystem-cached-adapter/src/Storage/Predis.php vendor/league/flysystem-cached-adapter/src/Storage/Psr6Cache.php vendor/league/flysystem-cached-adapter/src/Storage/Stash.php vendor/league/flysystem-cached-adapter/tests/AdapterCacheTests.php vendor/league/flysystem-cached-adapter/tests/InspectionTests.php vendor/league/flysystem-cached-adapter/tests/MemcachedTests.php vendor/league/flysystem-cached-adapter/tests/MemoryCacheTests.php vendor/league/flysystem-cached-adapter/tests/NoopCacheTests.php vendor/league/flysystem-cached-adapter/tests/PhpRedisTests.php vendor/league/flysystem-cached-adapter/tests/PredisTests.php vendor/league/flysystem-cached-adapter/tests/Psr6CacheTest.php vendor/league/flysystem-cached-adapter/tests/StashTest.php vendor/league/flysystem/CODE_OF_CONDUCT.md vendor/league/flysystem/LICENSE vendor/league/flysystem/SECURITY.md vendor/league/flysystem/composer.json vendor/league/flysystem/deprecations.md vendor/league/flysystem/src/Adapter/AbstractAdapter.php vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php vendor/league/flysystem/src/Adapter/Ftp.php vendor/league/flysystem/src/Adapter/Ftpd.php vendor/league/flysystem/src/Adapter/Local.php vendor/league/flysystem/src/Adapter/NullAdapter.php vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php vendor/league/flysystem/src/Adapter/Polyfill/StreamedCopyTrait.php vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php vendor/league/flysystem/src/Adapter/Polyfill/StreamedWritingTrait.php vendor/league/flysystem/src/Adapter/SynologyFtp.php vendor/league/flysystem/src/AdapterInterface.php vendor/league/flysystem/src/Config.php vendor/league/flysystem/src/ConfigAwareTrait.php vendor/league/flysystem/src/ConnectionErrorException.php vendor/league/flysystem/src/ConnectionRuntimeException.php vendor/league/flysystem/src/CorruptedPathDetected.php vendor/league/flysystem/src/Directory.php vendor/league/flysystem/src/Exception.php vendor/league/flysystem/src/File.php vendor/league/flysystem/src/FileExistsException.php vendor/league/flysystem/src/FileNotFoundException.php vendor/league/flysystem/src/Filesystem.php vendor/league/flysystem/src/FilesystemException.php vendor/league/flysystem/src/FilesystemInterface.php vendor/league/flysystem/src/FilesystemNotFoundException.php vendor/league/flysystem/src/Handler.php vendor/league/flysystem/src/InvalidRootException.php vendor/league/flysystem/src/MountManager.php vendor/league/flysystem/src/NotSupportedException.php vendor/league/flysystem/src/Plugin/AbstractPlugin.php vendor/league/flysystem/src/Plugin/EmptyDir.php vendor/league/flysystem/src/Plugin/ForcedCopy.php vendor/league/flysystem/src/Plugin/ForcedRename.php vendor/league/flysystem/src/Plugin/GetWithMetadata.php vendor/league/flysystem/src/Plugin/ListFiles.php vendor/league/flysystem/src/Plugin/ListPaths.php vendor/league/flysystem/src/Plugin/ListWith.php vendor/league/flysystem/src/Plugin/PluggableTrait.php vendor/league/flysystem/src/Plugin/PluginNotFoundException.php vendor/league/flysystem/src/PluginInterface.php vendor/league/flysystem/src/ReadInterface.php vendor/league/flysystem/src/RootViolationException.php vendor/league/flysystem/src/SafeStorage.php vendor/league/flysystem/src/UnreadableFileException.php vendor/league/flysystem/src/Util.php vendor/league/flysystem/src/Util/ContentListingFormatter.php vendor/league/flysystem/src/Util/MimeType.php vendor/league/flysystem/src/Util/StreamHasher.php vendor/league/mime-type-detection/CHANGELOG.md vendor/league/mime-type-detection/LICENSE vendor/league/mime-type-detection/composer.json vendor/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php vendor/league/mime-type-detection/src/ExtensionLookup.php vendor/league/mime-type-detection/src/ExtensionMimeTypeDetector.php vendor/league/mime-type-detection/src/ExtensionToMimeTypeMap.php vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php vendor/league/mime-type-detection/src/MimeTypeDetector.php vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php vendor/maennchen/zipstream-php/.editorconfig vendor/maennchen/zipstream-php/.phive/phars.xml vendor/maennchen/zipstream-php/.php-cs-fixer.dist.php vendor/maennchen/zipstream-php/.phpdoc/template/base.html.twig vendor/maennchen/zipstream-php/.tool-versions vendor/maennchen/zipstream-php/LICENSE vendor/maennchen/zipstream-php/README.md vendor/maennchen/zipstream-php/composer.json vendor/maennchen/zipstream-php/guides/ContentLength.rst vendor/maennchen/zipstream-php/guides/FlySystem.rst vendor/maennchen/zipstream-php/guides/Nginx.rst vendor/maennchen/zipstream-php/guides/Options.rst vendor/maennchen/zipstream-php/guides/PSR7Streams.rst vendor/maennchen/zipstream-php/guides/StreamOutput.rst vendor/maennchen/zipstream-php/guides/Symfony.rst vendor/maennchen/zipstream-php/guides/Varnish.rst vendor/maennchen/zipstream-php/guides/index.rst vendor/maennchen/zipstream-php/phpdoc.dist.xml vendor/maennchen/zipstream-php/phpunit.xml.dist vendor/maennchen/zipstream-php/psalm.xml vendor/maennchen/zipstream-php/src/Bigint.php vendor/maennchen/zipstream-php/src/DeflateStream.php vendor/maennchen/zipstream-php/src/Exception.php vendor/maennchen/zipstream-php/src/Exception/EncodingException.php vendor/maennchen/zipstream-php/src/Exception/FileNotFoundException.php vendor/maennchen/zipstream-php/src/Exception/FileNotReadableException.php vendor/maennchen/zipstream-php/src/Exception/IncompatibleOptionsException.php vendor/maennchen/zipstream-php/src/Exception/OverflowException.php vendor/maennchen/zipstream-php/src/Exception/StreamNotReadableException.php vendor/maennchen/zipstream-php/src/File.php vendor/maennchen/zipstream-php/src/Option/Archive.php vendor/maennchen/zipstream-php/src/Option/File.php vendor/maennchen/zipstream-php/src/Option/Method.php vendor/maennchen/zipstream-php/src/Option/Version.php vendor/maennchen/zipstream-php/src/Stream.php vendor/maennchen/zipstream-php/src/ZipStream.php vendor/maennchen/zipstream-php/test/BigintTest.php vendor/maennchen/zipstream-php/test/ZipStreamTest.php vendor/maennchen/zipstream-php/test/bootstrap.php vendor/maennchen/zipstream-php/test/bug/BugHonorFileTimeTest.php vendor/markbaker/complex/.github/workflows/main.yml vendor/markbaker/complex/README.md vendor/markbaker/complex/classes/src/Complex.php vendor/markbaker/complex/classes/src/Exception.php vendor/markbaker/complex/classes/src/Functions.php vendor/markbaker/complex/classes/src/Operations.php vendor/markbaker/complex/composer.json vendor/markbaker/complex/examples/complexTest.php vendor/markbaker/complex/examples/testFunctions.php vendor/markbaker/complex/examples/testOperations.php vendor/markbaker/complex/license.md vendor/markbaker/matrix/.github/workflows/main.yaml vendor/markbaker/matrix/README.md vendor/markbaker/matrix/buildPhar.php vendor/markbaker/matrix/classes/src/Builder.php vendor/markbaker/matrix/classes/src/Decomposition/Decomposition.php vendor/markbaker/matrix/classes/src/Decomposition/LU.php vendor/markbaker/matrix/classes/src/Decomposition/QR.php vendor/markbaker/matrix/classes/src/Div0Exception.php vendor/markbaker/matrix/classes/src/Exception.php vendor/markbaker/matrix/classes/src/Functions.php vendor/markbaker/matrix/classes/src/Matrix.php vendor/markbaker/matrix/classes/src/Operations.php vendor/markbaker/matrix/classes/src/Operators/Addition.php vendor/markbaker/matrix/classes/src/Operators/DirectSum.php vendor/markbaker/matrix/classes/src/Operators/Division.php vendor/markbaker/matrix/classes/src/Operators/Multiplication.php vendor/markbaker/matrix/classes/src/Operators/Operator.php vendor/markbaker/matrix/classes/src/Operators/Subtraction.php vendor/markbaker/matrix/composer.json vendor/markbaker/matrix/examples/test.php vendor/markbaker/matrix/infection.json.dist vendor/markbaker/matrix/license.md vendor/markbaker/matrix/phpstan.neon vendor/myclabs/php-enum/LICENSE vendor/myclabs/php-enum/README.md vendor/myclabs/php-enum/SECURITY.md vendor/myclabs/php-enum/composer.json vendor/myclabs/php-enum/src/Enum.php vendor/myclabs/php-enum/src/PHPUnit/Comparator.php vendor/myclabs/php-enum/stubs/Stringable.php vendor/phpoffice/phpspreadsheet/CHANGELOG.md vendor/phpoffice/phpspreadsheet/CONTRIBUTING.md vendor/phpoffice/phpspreadsheet/LICENSE vendor/phpoffice/phpspreadsheet/README.md vendor/phpoffice/phpspreadsheet/composer.json vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ArrayEnabled.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/BinaryComparison.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Category.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DAverage.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCount.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCountA.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DGet.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMax.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMin.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DProduct.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDev.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDevP.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DSum.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVar.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVarP.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DatabaseAbstract.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Constants.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Current.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Date.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateParts.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days360.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Difference.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Helpers.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/NetworkDays.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Time.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeParts.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Week.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/WorkDay.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/YearFrac.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentProcessor.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/BranchPruner.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/CyclicReferenceStack.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/FormattedNumber.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Logger.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/Operand.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselI.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselJ.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselK.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselY.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BitWise.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Compare.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Complex.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexFunctions.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexOperations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Constants.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBinary.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertDecimal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertHex.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertOctal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertUOM.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/EngineeringValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Erf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ErfC.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Exception.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ExceptionHandler.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Amortization.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/CashFlowValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Cumulative.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Interest.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/InterestAndPrincipal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Payments.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Single.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/NonPeriodic.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/Periodic.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Constants.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Coupons.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Depreciation.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Dollar.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/FinancialValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Helpers.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/InterestRate.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/SecurityValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/TreasuryBill.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaParser.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaToken.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ErrorValue.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ExcelError.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/Value.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/MakeMatrix.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Boolean.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Conditional.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Operations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Address.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/ExcelMatch.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Filter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Formula.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/HLookup.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Helpers.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Hyperlink.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Indirect.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Lookup.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupRefValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Matrix.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Offset.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/RowColumnInformation.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Selection.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Sort.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Unique.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/VLookup.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Absolute.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Angle.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Arabic.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Base.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Ceiling.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Combinations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Exp.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Factorial.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Floor.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Gcd.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Helpers.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/IntClass.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Lcm.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Logarithms.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Operations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Random.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Roman.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Round.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SeriesSum.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sign.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sqrt.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Subtotal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sum.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SumSquares.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosecant.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosine.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cotangent.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Secant.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Sine.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Tangent.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trunc.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/AggregateBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages/Mean.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Conditional.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Confidence.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Counts.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Deviations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Beta.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Binomial.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/ChiSquared.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/DistributionValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Exponential.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/F.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Fisher.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Gamma.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/GammaBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/HyperGeometric.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/LogNormal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/NewtonRaphson.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Normal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Poisson.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StandardNormal.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StudentT.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Weibull.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/MaxMinBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Maximum.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Minimum.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Percentiles.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Permutations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Size.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StandardDeviations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Standardize.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StatisticalValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Trends.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/VarianceBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Variances.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CaseConvert.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CharacterConvert.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Concatenate.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Extract.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Format.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Helpers.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Replace.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Search.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Text.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Trim.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Web/Service.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/Translations.xlsx vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/bg/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/bg/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/cs/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/cs/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/da/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/da/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/de/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/de/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/en/uk/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/es/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/es/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fi/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fi/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fr/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/fr/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/hu/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/hu/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/it/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/it/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nb/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nb/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nl/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/nl/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pl/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pl/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/br/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/br/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/pt/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/ru/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/ru/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/sv/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/sv/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/tr/config vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/locale/tr/functions vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressRange.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AdvancedValueBinder.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellAddress.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellRange.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/ColumnRange.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataType.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidation.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IValueBinder.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IgnoredErrors.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/RowRange.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/StringValueBinder.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/CellReferenceHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Axis.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/AxisText.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Chart.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/ChartColor.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeriesValues.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Exception.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/GridLines.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Layout.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Legend.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/PlotArea.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Properties.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/IRenderer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraph.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraphRendererBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/MtJpGraphRenderer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/PHP Charting Libraries.txt vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Title.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/TrendLine.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/CellsFactory.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache1.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache3.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Comment.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DefinedName.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Exception.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Dimension.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Downloader.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Handler.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Sample.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Size.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/TextGrid.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IComparable.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedFormula.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedRange.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/BaseReader.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv/Delimiter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/DefaultReadFilter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Exception.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/PageSetup.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Properties.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Styles.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReader.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/AutoFilter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/BaseLoader.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/DefinedNames.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/PageSettings.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/Properties.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Security/XmlScanner.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Slk.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF5.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF8.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BuiltIn.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ConditionalFormatting.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/DataValidationHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ErrorCode.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Escher.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/MD5.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/RC4.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/Border.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellAlignment.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellFont.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/FillPattern.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/AutoFilter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/BaseParserClass.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Chart.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ColumnAndRowAttributes.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Hyperlinks.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Namespaces.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/PageSetup.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Properties.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SharedFormula.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViewOptions.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViews.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Styles.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/TableReader.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Theme.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/WorkbookView.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/DataValidations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/PageSettings.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Properties.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Alignment.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Border.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Fill.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Font.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/NumberFormat.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/StyleBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/ITextElement.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/RichText.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/Run.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/TextElement.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Settings.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/CodePage.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Drawing.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Font.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/IntOrFloat.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/ChainedBlockStream.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/File.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/Root.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLERead.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/PasswordHasher.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/StringHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/TimeZone.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/ExponentialBestFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LinearBestFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LogarithmicBestFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PowerBestFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/Trend.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/XMLWriter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Xls.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Alignment.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Border.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Borders.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Color.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Conditional.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellMatcher.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellStyleAssessor.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalColorScale.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/StyleMerger.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Blanks.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/CellValue.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/DateValue.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Duplicates.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Errors.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Expression.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/TextValue.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardAbstract.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardInterface.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Fill.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Font.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/BaseFormatter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/PercentageFormatter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Accounting.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Currency.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Date.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/DateTime.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/DateTimeWizard.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Duration.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Locale.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Number.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/NumberBase.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Percentage.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Scientific.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Time.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Wizard.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Protection.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/RgbTint.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Supervisor.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Theme.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column/Rule.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFit.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/CellIterator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Column.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnCellIterator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnDimension.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnIterator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Dimension.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing/Shadow.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooterDrawing.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Iterator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageBreak.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageMargins.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageSetup.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Pane.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ProtectedRange.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Protection.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Row.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowDimension.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowIterator.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/SheetView.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/Column.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/TableStyle.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Validations.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Csv.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Exception.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Html.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/IWriter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/AutoFilters.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Comment.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Style.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Content.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Formula.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Meta.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/MetaInf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Mimetype.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/NamedExpressions.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Settings.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Styles.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Thumbnails.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/WriterPart.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Tcpdf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/BIFFwriter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/CellDataValidation.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ConditionalHelper.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ErrorCode.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Escher.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Font.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Parser.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellAlignment.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellBorder.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellFill.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/ColorMap.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Workbook.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Xf.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/AutoFilter.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Chart.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Comments.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DefinedNames.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DocProps.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/FunctionPrefix.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsRibbon.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsVBA.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/StringTable.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Style.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Table.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Theme.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/WriterPart.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream0.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream2.php vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream3.php vendor/psr/cache/CHANGELOG.md vendor/psr/cache/LICENSE.txt vendor/psr/cache/README.md vendor/psr/cache/composer.json vendor/psr/cache/src/CacheException.php vendor/psr/cache/src/CacheItemInterface.php vendor/psr/cache/src/CacheItemPoolInterface.php vendor/psr/cache/src/InvalidArgumentException.php vendor/psr/container/.gitignore vendor/psr/container/LICENSE vendor/psr/container/README.md vendor/psr/container/composer.json vendor/psr/container/src/ContainerExceptionInterface.php vendor/psr/container/src/ContainerInterface.php vendor/psr/container/src/NotFoundExceptionInterface.php vendor/psr/http-client/CHANGELOG.md vendor/psr/http-client/LICENSE vendor/psr/http-client/README.md vendor/psr/http-client/composer.json vendor/psr/http-client/src/ClientExceptionInterface.php vendor/psr/http-client/src/ClientInterface.php vendor/psr/http-client/src/NetworkExceptionInterface.php vendor/psr/http-client/src/RequestExceptionInterface.php vendor/psr/http-factory/LICENSE vendor/psr/http-factory/README.md vendor/psr/http-factory/composer.json vendor/psr/http-factory/src/RequestFactoryInterface.php vendor/psr/http-factory/src/ResponseFactoryInterface.php vendor/psr/http-factory/src/ServerRequestFactoryInterface.php vendor/psr/http-factory/src/StreamFactoryInterface.php vendor/psr/http-factory/src/UploadedFileFactoryInterface.php vendor/psr/http-factory/src/UriFactoryInterface.php vendor/psr/http-message/CHANGELOG.md vendor/psr/http-message/LICENSE vendor/psr/http-message/README.md vendor/psr/http-message/composer.json vendor/psr/http-message/docs/PSR7-Interfaces.md vendor/psr/http-message/docs/PSR7-Usage.md vendor/psr/http-message/src/MessageInterface.php vendor/psr/http-message/src/RequestInterface.php vendor/psr/http-message/src/ResponseInterface.php vendor/psr/http-message/src/ServerRequestInterface.php vendor/psr/http-message/src/StreamInterface.php vendor/psr/http-message/src/UploadedFileInterface.php vendor/psr/http-message/src/UriInterface.php vendor/psr/log/LICENSE vendor/psr/log/README.md vendor/psr/log/composer.json vendor/psr/log/src/AbstractLogger.php vendor/psr/log/src/InvalidArgumentException.php vendor/psr/log/src/LogLevel.php vendor/psr/log/src/LoggerAwareInterface.php vendor/psr/log/src/LoggerAwareTrait.php vendor/psr/log/src/LoggerInterface.php vendor/psr/log/src/LoggerTrait.php vendor/psr/log/src/NullLogger.php vendor/psr/simple-cache/.editorconfig vendor/psr/simple-cache/LICENSE.md vendor/psr/simple-cache/README.md vendor/psr/simple-cache/composer.json vendor/psr/simple-cache/src/CacheException.php vendor/psr/simple-cache/src/CacheInterface.php vendor/psr/simple-cache/src/InvalidArgumentException.php vendor/ralouphie/getallheaders/LICENSE vendor/ralouphie/getallheaders/README.md vendor/ralouphie/getallheaders/composer.json vendor/ralouphie/getallheaders/src/getallheaders.php vendor/services.php vendor/symfony/polyfill-intl-idn/Idn.php vendor/symfony/polyfill-intl-idn/Info.php vendor/symfony/polyfill-intl-idn/LICENSE vendor/symfony/polyfill-intl-idn/README.md vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php vendor/symfony/polyfill-intl-idn/bootstrap.php vendor/symfony/polyfill-intl-idn/bootstrap80.php vendor/symfony/polyfill-intl-idn/composer.json vendor/symfony/polyfill-intl-normalizer/LICENSE vendor/symfony/polyfill-intl-normalizer/Normalizer.php vendor/symfony/polyfill-intl-normalizer/README.md vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php vendor/symfony/polyfill-intl-normalizer/bootstrap.php vendor/symfony/polyfill-intl-normalizer/bootstrap80.php vendor/symfony/polyfill-intl-normalizer/composer.json vendor/symfony/polyfill-mbstring/LICENSE vendor/symfony/polyfill-mbstring/Mbstring.php vendor/symfony/polyfill-mbstring/README.md vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php vendor/symfony/polyfill-mbstring/bootstrap.php vendor/symfony/polyfill-mbstring/bootstrap80.php vendor/symfony/polyfill-mbstring/composer.json vendor/symfony/polyfill-php80/LICENSE vendor/symfony/polyfill-php80/Php80.php vendor/symfony/polyfill-php80/PhpToken.php vendor/symfony/polyfill-php80/README.md vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php vendor/symfony/polyfill-php80/bootstrap.php vendor/symfony/polyfill-php80/composer.json vendor/symfony/var-dumper/CHANGELOG.md vendor/symfony/var-dumper/Caster/AmqpCaster.php vendor/symfony/var-dumper/Caster/ArgsStub.php vendor/symfony/var-dumper/Caster/Caster.php vendor/symfony/var-dumper/Caster/ClassStub.php vendor/symfony/var-dumper/Caster/ConstStub.php vendor/symfony/var-dumper/Caster/CutArrayStub.php vendor/symfony/var-dumper/Caster/CutStub.php vendor/symfony/var-dumper/Caster/DOMCaster.php vendor/symfony/var-dumper/Caster/DateCaster.php vendor/symfony/var-dumper/Caster/DoctrineCaster.php vendor/symfony/var-dumper/Caster/DsCaster.php vendor/symfony/var-dumper/Caster/DsPairStub.php vendor/symfony/var-dumper/Caster/EnumStub.php vendor/symfony/var-dumper/Caster/ExceptionCaster.php vendor/symfony/var-dumper/Caster/FiberCaster.php vendor/symfony/var-dumper/Caster/FrameStub.php vendor/symfony/var-dumper/Caster/GmpCaster.php vendor/symfony/var-dumper/Caster/ImagineCaster.php vendor/symfony/var-dumper/Caster/ImgStub.php vendor/symfony/var-dumper/Caster/IntlCaster.php vendor/symfony/var-dumper/Caster/LinkStub.php vendor/symfony/var-dumper/Caster/MemcachedCaster.php vendor/symfony/var-dumper/Caster/MysqliCaster.php vendor/symfony/var-dumper/Caster/PdoCaster.php vendor/symfony/var-dumper/Caster/PgSqlCaster.php vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php vendor/symfony/var-dumper/Caster/RdKafkaCaster.php vendor/symfony/var-dumper/Caster/RedisCaster.php vendor/symfony/var-dumper/Caster/ReflectionCaster.php vendor/symfony/var-dumper/Caster/ResourceCaster.php vendor/symfony/var-dumper/Caster/SplCaster.php vendor/symfony/var-dumper/Caster/StubCaster.php vendor/symfony/var-dumper/Caster/SymfonyCaster.php vendor/symfony/var-dumper/Caster/TraceStub.php vendor/symfony/var-dumper/Caster/UuidCaster.php vendor/symfony/var-dumper/Caster/XmlReaderCaster.php vendor/symfony/var-dumper/Caster/XmlResourceCaster.php vendor/symfony/var-dumper/Cloner/AbstractCloner.php vendor/symfony/var-dumper/Cloner/ClonerInterface.php vendor/symfony/var-dumper/Cloner/Cursor.php vendor/symfony/var-dumper/Cloner/Data.php vendor/symfony/var-dumper/Cloner/DumperInterface.php vendor/symfony/var-dumper/Cloner/Stub.php vendor/symfony/var-dumper/Cloner/VarCloner.php vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php vendor/symfony/var-dumper/Command/ServerDumpCommand.php vendor/symfony/var-dumper/Dumper/AbstractDumper.php vendor/symfony/var-dumper/Dumper/CliDumper.php vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php vendor/symfony/var-dumper/Dumper/DataDumperInterface.php vendor/symfony/var-dumper/Dumper/HtmlDumper.php vendor/symfony/var-dumper/Dumper/ServerDumper.php vendor/symfony/var-dumper/Exception/ThrowingCasterException.php vendor/symfony/var-dumper/LICENSE vendor/symfony/var-dumper/README.md vendor/symfony/var-dumper/Resources/bin/var-dump-server vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css vendor/symfony/var-dumper/Resources/functions/dump.php vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js vendor/symfony/var-dumper/Server/Connection.php vendor/symfony/var-dumper/Server/DumpServer.php vendor/symfony/var-dumper/Test/VarDumperTestTrait.php vendor/symfony/var-dumper/VarDumper.php vendor/symfony/var-dumper/composer.json vendor/tencentcloud/common/LICENSE vendor/tencentcloud/common/README.MD vendor/tencentcloud/common/composer.json vendor/tencentcloud/common/src/TencentCloud/Common/AbstractClient.php vendor/tencentcloud/common/src/TencentCloud/Common/AbstractModel.php vendor/tencentcloud/common/src/TencentCloud/Common/CircuitBreaker.php vendor/tencentcloud/common/src/TencentCloud/Common/CommonClient.php vendor/tencentcloud/common/src/TencentCloud/Common/Credential.php vendor/tencentcloud/common/src/TencentCloud/Common/Exception/TencentCloudSDKException.php vendor/tencentcloud/common/src/TencentCloud/Common/Http/HttpConnection.php vendor/tencentcloud/common/src/TencentCloud/Common/Profile/ClientProfile.php vendor/tencentcloud/common/src/TencentCloud/Common/Profile/HttpProfile.php vendor/tencentcloud/common/src/TencentCloud/Common/Sign.php vendor/tencentcloud/sms/LICENSE vendor/tencentcloud/sms/README.MD vendor/tencentcloud/sms/composer.json vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSignStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsSignRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsSignResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsTemplateRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsTemplateResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddTemplateStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatistics.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatisticsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatisticsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSignStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsSignRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsSignResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsTemplateRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsTemplateResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteTemplateStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSignListStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsSignListRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsSignListResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsTemplateListRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsTemplateListResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeTemplateListStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySignStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsSignRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsSignResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsTemplateRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsTemplateResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifyTemplateStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusByPhoneNumberRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusByPhoneNumberResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusByPhoneNumberRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusByPhoneNumberResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendSmsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendSmsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatistics.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatisticsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatisticsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatistics.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatisticsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatisticsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/SmsClient.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSignStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsSignRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsSignResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsTemplateRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsTemplateResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddTemplateStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatistics.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatisticsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatisticsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSignStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsSignRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsSignResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsTemplateRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsTemplateResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteTemplateStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribePhoneNumberInfoRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribePhoneNumberInfoResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSignListStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsSignListRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsSignListResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsTemplateListRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsTemplateListResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeTemplateListStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySignStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsSignRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsSignResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsTemplateRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsTemplateResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifyTemplateStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PhoneNumberInfo.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusByPhoneNumberRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusByPhoneNumberResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusByPhoneNumberRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusByPhoneNumberResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendSmsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendSmsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatus.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatistics.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatisticsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatisticsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatistics.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatisticsRequest.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatisticsResponse.php vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/SmsClient.php vendor/topthink/framework/.github/ISSUE_TEMPLATE/1-bug-report.yml vendor/topthink/framework/.github/ISSUE_TEMPLATE/2-feature_request.md vendor/topthink/framework/.github/ISSUE_TEMPLATE/3-custom.md vendor/topthink/framework/.github/ISSUE_TEMPLATE/config.yml vendor/topthink/framework/.github/workflows/build.yml vendor/topthink/framework/.github/workflows/php-cs-fixer.yml vendor/topthink/framework/.gitignore vendor/topthink/framework/CONTRIBUTING.md vendor/topthink/framework/LICENSE.txt vendor/topthink/framework/README.md vendor/topthink/framework/composer.json vendor/topthink/framework/logo.png vendor/topthink/framework/phpunit.xml.dist vendor/topthink/framework/src/helper.php vendor/topthink/framework/src/lang/zh-cn.php vendor/topthink/framework/src/think/App.php vendor/topthink/framework/src/think/Cache.php vendor/topthink/framework/src/think/Config.php vendor/topthink/framework/src/think/Console.php vendor/topthink/framework/src/think/Container.php vendor/topthink/framework/src/think/Cookie.php vendor/topthink/framework/src/think/Db.php vendor/topthink/framework/src/think/Env.php vendor/topthink/framework/src/think/Event.php vendor/topthink/framework/src/think/Exception.php vendor/topthink/framework/src/think/Facade.php vendor/topthink/framework/src/think/File.php vendor/topthink/framework/src/think/Http.php vendor/topthink/framework/src/think/Lang.php vendor/topthink/framework/src/think/Log.php vendor/topthink/framework/src/think/Manager.php vendor/topthink/framework/src/think/Middleware.php vendor/topthink/framework/src/think/Pipeline.php vendor/topthink/framework/src/think/Request.php vendor/topthink/framework/src/think/Response.php vendor/topthink/framework/src/think/Route.php vendor/topthink/framework/src/think/Service.php vendor/topthink/framework/src/think/Session.php vendor/topthink/framework/src/think/Validate.php vendor/topthink/framework/src/think/View.php vendor/topthink/framework/src/think/cache/Driver.php vendor/topthink/framework/src/think/cache/TagSet.php vendor/topthink/framework/src/think/cache/driver/File.php vendor/topthink/framework/src/think/cache/driver/Memcache.php vendor/topthink/framework/src/think/cache/driver/Memcached.php vendor/topthink/framework/src/think/cache/driver/Redis.php vendor/topthink/framework/src/think/cache/driver/Wincache.php vendor/topthink/framework/src/think/console/Command.php vendor/topthink/framework/src/think/console/Input.php vendor/topthink/framework/src/think/console/LICENSE vendor/topthink/framework/src/think/console/Output.php vendor/topthink/framework/src/think/console/Table.php vendor/topthink/framework/src/think/console/bin/README.md vendor/topthink/framework/src/think/console/bin/hiddeninput.exe vendor/topthink/framework/src/think/console/command/Clear.php vendor/topthink/framework/src/think/console/command/Help.php vendor/topthink/framework/src/think/console/command/Lists.php vendor/topthink/framework/src/think/console/command/Make.php vendor/topthink/framework/src/think/console/command/RouteList.php vendor/topthink/framework/src/think/console/command/RunServer.php vendor/topthink/framework/src/think/console/command/ServiceDiscover.php vendor/topthink/framework/src/think/console/command/VendorPublish.php vendor/topthink/framework/src/think/console/command/Version.php vendor/topthink/framework/src/think/console/command/make/Command.php vendor/topthink/framework/src/think/console/command/make/Controller.php vendor/topthink/framework/src/think/console/command/make/Event.php vendor/topthink/framework/src/think/console/command/make/Listener.php vendor/topthink/framework/src/think/console/command/make/Middleware.php vendor/topthink/framework/src/think/console/command/make/Model.php vendor/topthink/framework/src/think/console/command/make/Service.php vendor/topthink/framework/src/think/console/command/make/Subscribe.php vendor/topthink/framework/src/think/console/command/make/Validate.php vendor/topthink/framework/src/think/console/command/make/stubs/command.stub vendor/topthink/framework/src/think/console/command/make/stubs/controller.api.stub vendor/topthink/framework/src/think/console/command/make/stubs/controller.plain.stub vendor/topthink/framework/src/think/console/command/make/stubs/controller.stub vendor/topthink/framework/src/think/console/command/make/stubs/event.stub vendor/topthink/framework/src/think/console/command/make/stubs/listener.stub vendor/topthink/framework/src/think/console/command/make/stubs/middleware.stub vendor/topthink/framework/src/think/console/command/make/stubs/model.stub vendor/topthink/framework/src/think/console/command/make/stubs/service.stub vendor/topthink/framework/src/think/console/command/make/stubs/subscribe.stub vendor/topthink/framework/src/think/console/command/make/stubs/validate.stub vendor/topthink/framework/src/think/console/command/optimize/Route.php vendor/topthink/framework/src/think/console/command/optimize/Schema.php vendor/topthink/framework/src/think/console/input/Argument.php vendor/topthink/framework/src/think/console/input/Definition.php vendor/topthink/framework/src/think/console/input/Option.php vendor/topthink/framework/src/think/console/output/Ask.php vendor/topthink/framework/src/think/console/output/Descriptor.php vendor/topthink/framework/src/think/console/output/Formatter.php vendor/topthink/framework/src/think/console/output/Question.php vendor/topthink/framework/src/think/console/output/descriptor/Console.php vendor/topthink/framework/src/think/console/output/driver/Buffer.php vendor/topthink/framework/src/think/console/output/driver/Console.php vendor/topthink/framework/src/think/console/output/driver/Nothing.php vendor/topthink/framework/src/think/console/output/formatter/Stack.php vendor/topthink/framework/src/think/console/output/formatter/Style.php vendor/topthink/framework/src/think/console/output/question/Choice.php vendor/topthink/framework/src/think/console/output/question/Confirmation.php vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php vendor/topthink/framework/src/think/contract/LogHandlerInterface.php vendor/topthink/framework/src/think/contract/ModelRelationInterface.php vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php vendor/topthink/framework/src/think/event/AppInit.php vendor/topthink/framework/src/think/event/HttpEnd.php vendor/topthink/framework/src/think/event/HttpRun.php vendor/topthink/framework/src/think/event/LogRecord.php vendor/topthink/framework/src/think/event/LogWrite.php vendor/topthink/framework/src/think/event/RouteLoaded.php vendor/topthink/framework/src/think/exception/AlwaysErrorMsg.php vendor/topthink/framework/src/think/exception/ClassNotFoundException.php vendor/topthink/framework/src/think/exception/ErrorException.php vendor/topthink/framework/src/think/exception/FileException.php vendor/topthink/framework/src/think/exception/FuncNotFoundException.php vendor/topthink/framework/src/think/exception/Handle.php vendor/topthink/framework/src/think/exception/HttpException.php vendor/topthink/framework/src/think/exception/HttpResponseException.php vendor/topthink/framework/src/think/exception/InvalidArgumentException.php vendor/topthink/framework/src/think/exception/InvalidCacheException.php vendor/topthink/framework/src/think/exception/RouteNotFoundException.php vendor/topthink/framework/src/think/exception/ValidateException.php vendor/topthink/framework/src/think/facade/App.php vendor/topthink/framework/src/think/facade/Cache.php vendor/topthink/framework/src/think/facade/Config.php vendor/topthink/framework/src/think/facade/Console.php vendor/topthink/framework/src/think/facade/Cookie.php vendor/topthink/framework/src/think/facade/Env.php vendor/topthink/framework/src/think/facade/Event.php vendor/topthink/framework/src/think/facade/Lang.php vendor/topthink/framework/src/think/facade/Log.php vendor/topthink/framework/src/think/facade/Middleware.php vendor/topthink/framework/src/think/facade/Request.php vendor/topthink/framework/src/think/facade/Route.php vendor/topthink/framework/src/think/facade/Session.php vendor/topthink/framework/src/think/facade/Validate.php vendor/topthink/framework/src/think/facade/View.php vendor/topthink/framework/src/think/file/UploadedFile.php vendor/topthink/framework/src/think/initializer/BootService.php vendor/topthink/framework/src/think/initializer/Error.php vendor/topthink/framework/src/think/initializer/RegisterService.php vendor/topthink/framework/src/think/log/Channel.php vendor/topthink/framework/src/think/log/ChannelSet.php vendor/topthink/framework/src/think/log/driver/File.php vendor/topthink/framework/src/think/log/driver/Socket.php vendor/topthink/framework/src/think/middleware/AllowCrossDomain.php vendor/topthink/framework/src/think/middleware/CheckRequestCache.php vendor/topthink/framework/src/think/middleware/FormTokenCheck.php vendor/topthink/framework/src/think/middleware/LoadLangPack.php vendor/topthink/framework/src/think/middleware/SessionInit.php vendor/topthink/framework/src/think/response/File.php vendor/topthink/framework/src/think/response/Html.php vendor/topthink/framework/src/think/response/Json.php vendor/topthink/framework/src/think/response/Jsonp.php vendor/topthink/framework/src/think/response/Redirect.php vendor/topthink/framework/src/think/response/View.php vendor/topthink/framework/src/think/response/Xml.php vendor/topthink/framework/src/think/route/Dispatch.php vendor/topthink/framework/src/think/route/Domain.php vendor/topthink/framework/src/think/route/Resource.php vendor/topthink/framework/src/think/route/ResourceRegister.php vendor/topthink/framework/src/think/route/Rule.php vendor/topthink/framework/src/think/route/RuleGroup.php vendor/topthink/framework/src/think/route/RuleItem.php vendor/topthink/framework/src/think/route/RuleName.php vendor/topthink/framework/src/think/route/Url.php vendor/topthink/framework/src/think/route/dispatch/Callback.php vendor/topthink/framework/src/think/route/dispatch/Controller.php vendor/topthink/framework/src/think/route/dispatch/Url.php vendor/topthink/framework/src/think/service/ModelService.php vendor/topthink/framework/src/think/service/PaginatorService.php vendor/topthink/framework/src/think/service/ValidateService.php vendor/topthink/framework/src/think/session/Store.php vendor/topthink/framework/src/think/session/driver/Cache.php vendor/topthink/framework/src/think/session/driver/File.php vendor/topthink/framework/src/think/validate/ValidateRule.php vendor/topthink/framework/src/think/view/driver/Php.php vendor/topthink/framework/src/tpl/think_exception.tpl vendor/topthink/framework/tests/AppTest.php vendor/topthink/framework/tests/CacheTest.php vendor/topthink/framework/tests/ConfigTest.php vendor/topthink/framework/tests/ContainerTest.php vendor/topthink/framework/tests/DbTest.php vendor/topthink/framework/tests/DispatchTest.php vendor/topthink/framework/tests/EnvTest.php vendor/topthink/framework/tests/EventTest.php vendor/topthink/framework/tests/HttpTest.php vendor/topthink/framework/tests/InteractsWithApp.php vendor/topthink/framework/tests/LogTest.php vendor/topthink/framework/tests/MiddlewareTest.php vendor/topthink/framework/tests/RouteTest.php vendor/topthink/framework/tests/SessionTest.php vendor/topthink/framework/tests/UrlRouteTest.php vendor/topthink/framework/tests/ViewTest.php vendor/topthink/framework/tests/bootstrap.php vendor/topthink/think-captcha/.gitignore vendor/topthink/think-captcha/LICENSE vendor/topthink/think-captcha/README.md vendor/topthink/think-captcha/assets/bgs/1.jpg vendor/topthink/think-captcha/assets/bgs/2.jpg vendor/topthink/think-captcha/assets/bgs/3.jpg vendor/topthink/think-captcha/assets/bgs/4.jpg vendor/topthink/think-captcha/assets/bgs/5.jpg vendor/topthink/think-captcha/assets/bgs/6.jpg vendor/topthink/think-captcha/assets/bgs/7.jpg vendor/topthink/think-captcha/assets/bgs/8.jpg vendor/topthink/think-captcha/assets/ttfs/1.ttf vendor/topthink/think-captcha/assets/ttfs/2.ttf vendor/topthink/think-captcha/assets/ttfs/3.ttf vendor/topthink/think-captcha/assets/ttfs/4.ttf vendor/topthink/think-captcha/assets/ttfs/5.ttf vendor/topthink/think-captcha/assets/ttfs/6.ttf vendor/topthink/think-captcha/assets/zhttfs/1.otf vendor/topthink/think-captcha/composer.json vendor/topthink/think-captcha/src/Captcha.php vendor/topthink/think-captcha/src/CaptchaController.php vendor/topthink/think-captcha/src/CaptchaService.php vendor/topthink/think-captcha/src/config.php vendor/topthink/think-captcha/src/facade/Captcha.php vendor/topthink/think-captcha/src/helper.php vendor/topthink/think-container/.gitignore vendor/topthink/think-container/.travis.yml vendor/topthink/think-container/LICENSE vendor/topthink/think-container/README.md vendor/topthink/think-container/composer.json vendor/topthink/think-container/phpunit.xml.dist vendor/topthink/think-container/src/Container.php vendor/topthink/think-container/src/Facade.php vendor/topthink/think-container/src/exception/ClassNotFoundException.php vendor/topthink/think-container/src/exception/FuncNotFoundException.php vendor/topthink/think-container/tests/ContainerTest.php vendor/topthink/think-container/tests/bootstrap.php vendor/topthink/think-filesystem/.gitignore vendor/topthink/think-filesystem/README.md vendor/topthink/think-filesystem/composer.json vendor/topthink/think-filesystem/phpunit.xml.dist vendor/topthink/think-filesystem/src/Filesystem.php vendor/topthink/think-filesystem/src/facade/Filesystem.php vendor/topthink/think-filesystem/src/filesystem/CacheStore.php vendor/topthink/think-filesystem/src/filesystem/Driver.php vendor/topthink/think-filesystem/src/filesystem/driver/Local.php vendor/topthink/think-filesystem/tests/FilesystemTest.php vendor/topthink/think-filesystem/tests/bootstrap.php vendor/topthink/think-helper/.github/workflows/ci.yml vendor/topthink/think-helper/.github/workflows/php.yml vendor/topthink/think-helper/.gitignore vendor/topthink/think-helper/LICENSE vendor/topthink/think-helper/README.md vendor/topthink/think-helper/composer.json vendor/topthink/think-helper/phpunit.xml.dist vendor/topthink/think-helper/src/Collection.php vendor/topthink/think-helper/src/contract/Arrayable.php vendor/topthink/think-helper/src/contract/Jsonable.php vendor/topthink/think-helper/src/helper.php vendor/topthink/think-helper/src/helper/Arr.php vendor/topthink/think-helper/src/helper/Macroable.php vendor/topthink/think-helper/src/helper/Str.php vendor/topthink/think-helper/tests/ArrTest.php vendor/topthink/think-helper/tests/CollectionTest.php vendor/topthink/think-helper/tests/IsAssocTest.php vendor/topthink/think-helper/tests/MergeDeepTest.php vendor/topthink/think-helper/tests/StrTest.php vendor/topthink/think-helper/tests/TestCase.php vendor/topthink/think-image/.gitignore vendor/topthink/think-image/.travis.yml vendor/topthink/think-image/LICENSE vendor/topthink/think-image/README.md vendor/topthink/think-image/composer.json vendor/topthink/think-image/phpunit.xml vendor/topthink/think-image/src/Image.php vendor/topthink/think-image/src/image/Exception.php vendor/topthink/think-image/src/image/gif/Decoder.php vendor/topthink/think-image/src/image/gif/Encoder.php vendor/topthink/think-image/src/image/gif/Gif.php vendor/topthink/think-image/tests/CropTest.php vendor/topthink/think-image/tests/FlipTest.php vendor/topthink/think-image/tests/InfoTest.php vendor/topthink/think-image/tests/RotateTest.php vendor/topthink/think-image/tests/TestCase.php vendor/topthink/think-image/tests/TextTest.php vendor/topthink/think-image/tests/ThumbTest.php vendor/topthink/think-image/tests/WaterTest.php vendor/topthink/think-image/tests/autoload.php vendor/topthink/think-image/tests/images/test.bmp vendor/topthink/think-image/tests/images/test.gif vendor/topthink/think-image/tests/images/test.jpg vendor/topthink/think-image/tests/images/test.png vendor/topthink/think-image/tests/images/test.ttf vendor/topthink/think-image/tests/tmp/.gitignore vendor/topthink/think-multi-app/LICENSE vendor/topthink/think-multi-app/README.md vendor/topthink/think-multi-app/composer.json vendor/topthink/think-multi-app/src/MultiApp.php vendor/topthink/think-multi-app/src/Service.php vendor/topthink/think-multi-app/src/Url.php vendor/topthink/think-multi-app/src/command/Build.php vendor/topthink/think-multi-app/src/command/Clear.php vendor/topthink/think-multi-app/src/command/stubs/controller.stub vendor/topthink/think-orm/.gitattributes vendor/topthink/think-orm/.gitignore vendor/topthink/think-orm/LICENSE vendor/topthink/think-orm/README.md vendor/topthink/think-orm/composer.json vendor/topthink/think-orm/src/DbManager.php vendor/topthink/think-orm/src/Model.php vendor/topthink/think-orm/src/Paginator.php vendor/topthink/think-orm/src/db/BaseBuilder.php vendor/topthink/think-orm/src/db/BaseQuery.php vendor/topthink/think-orm/src/db/Builder.php vendor/topthink/think-orm/src/db/CacheItem.php vendor/topthink/think-orm/src/db/Connection.php vendor/topthink/think-orm/src/db/ConnectionInterface.php vendor/topthink/think-orm/src/db/Fetch.php vendor/topthink/think-orm/src/db/Mongo.php vendor/topthink/think-orm/src/db/PDOConnection.php vendor/topthink/think-orm/src/db/Query.php vendor/topthink/think-orm/src/db/Raw.php vendor/topthink/think-orm/src/db/Where.php vendor/topthink/think-orm/src/db/builder/Mongo.php vendor/topthink/think-orm/src/db/builder/Mysql.php vendor/topthink/think-orm/src/db/builder/Oracle.php vendor/topthink/think-orm/src/db/builder/Pgsql.php vendor/topthink/think-orm/src/db/builder/Sqlite.php vendor/topthink/think-orm/src/db/builder/Sqlsrv.php vendor/topthink/think-orm/src/db/concern/AggregateQuery.php vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php vendor/topthink/think-orm/src/db/concern/ParamsBind.php vendor/topthink/think-orm/src/db/concern/ResultOperation.php vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php vendor/topthink/think-orm/src/db/concern/Transaction.php vendor/topthink/think-orm/src/db/concern/WhereQuery.php vendor/topthink/think-orm/src/db/connector/Mongo.php vendor/topthink/think-orm/src/db/connector/Mysql.php vendor/topthink/think-orm/src/db/connector/Oracle.php vendor/topthink/think-orm/src/db/connector/Pgsql.php vendor/topthink/think-orm/src/db/connector/Sqlite.php vendor/topthink/think-orm/src/db/connector/Sqlsrv.php vendor/topthink/think-orm/src/db/connector/pgsql.sql vendor/topthink/think-orm/src/db/connector/pgsql12.sql vendor/topthink/think-orm/src/db/exception/BindParamException.php vendor/topthink/think-orm/src/db/exception/DataNotFoundException.php vendor/topthink/think-orm/src/db/exception/DbEventException.php vendor/topthink/think-orm/src/db/exception/DbException.php vendor/topthink/think-orm/src/db/exception/InvalidArgumentException.php vendor/topthink/think-orm/src/db/exception/ModelEventException.php vendor/topthink/think-orm/src/db/exception/ModelNotFoundException.php vendor/topthink/think-orm/src/db/exception/PDOException.php vendor/topthink/think-orm/src/facade/Db.php vendor/topthink/think-orm/src/model/Collection.php vendor/topthink/think-orm/src/model/Pivot.php vendor/topthink/think-orm/src/model/Relation.php vendor/topthink/think-orm/src/model/concern/Attribute.php vendor/topthink/think-orm/src/model/concern/AutoWriteId.php vendor/topthink/think-orm/src/model/concern/Conversion.php vendor/topthink/think-orm/src/model/concern/ModelEvent.php vendor/topthink/think-orm/src/model/concern/OptimLock.php vendor/topthink/think-orm/src/model/concern/RelationShip.php vendor/topthink/think-orm/src/model/concern/SoftDelete.php vendor/topthink/think-orm/src/model/concern/TimeStamp.php vendor/topthink/think-orm/src/model/concern/Virtual.php vendor/topthink/think-orm/src/model/contract/EnumTransform.php vendor/topthink/think-orm/src/model/contract/FieldTypeTransform.php vendor/topthink/think-orm/src/model/relation/BelongsTo.php vendor/topthink/think-orm/src/model/relation/BelongsToMany.php vendor/topthink/think-orm/src/model/relation/HasMany.php vendor/topthink/think-orm/src/model/relation/HasManyThrough.php vendor/topthink/think-orm/src/model/relation/HasOne.php vendor/topthink/think-orm/src/model/relation/HasOneThrough.php vendor/topthink/think-orm/src/model/relation/MorphMany.php vendor/topthink/think-orm/src/model/relation/MorphOne.php vendor/topthink/think-orm/src/model/relation/MorphTo.php vendor/topthink/think-orm/src/model/relation/MorphToMany.php vendor/topthink/think-orm/src/model/relation/OneToOne.php vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php vendor/topthink/think-orm/stubs/Exception.php vendor/topthink/think-orm/stubs/Facade.php vendor/topthink/think-orm/stubs/load_stubs.php vendor/topthink/think-template/.gitignore vendor/topthink/think-template/LICENSE vendor/topthink/think-template/README.md vendor/topthink/think-template/composer.json vendor/topthink/think-template/phpunit.xml vendor/topthink/think-template/src/Template.php vendor/topthink/think-template/src/facade/Template.php vendor/topthink/think-template/src/template/TagLib.php vendor/topthink/think-template/src/template/contract/DriverInterface.php vendor/topthink/think-template/src/template/driver/File.php vendor/topthink/think-template/src/template/exception/TemplateNotFoundException.php vendor/topthink/think-template/src/template/taglib/Cx.php vendor/topthink/think-template/tests/bootstrap.php vendor/topthink/think-template/tests/tag/Demo.php vendor/topthink/think-template/tests/template/extend.html vendor/topthink/think-template/tests/template/fetch.html vendor/topthink/think-template/tests/template/include.html vendor/topthink/think-template/tests/template/layout.html vendor/topthink/think-template/tests/think/TemplateTest.php vendor/topthink/think-trace/.gitignore vendor/topthink/think-trace/LICENSE vendor/topthink/think-trace/README.md vendor/topthink/think-trace/composer.json vendor/topthink/think-trace/src/Console.php vendor/topthink/think-trace/src/Html.php vendor/topthink/think-trace/src/Service.php vendor/topthink/think-trace/src/TraceDebug.php vendor/topthink/think-trace/src/config.php vendor/topthink/think-trace/src/tpl/page_trace.tpl vendor/topthink/think-validate/.gitignore vendor/topthink/think-validate/LICENSE vendor/topthink/think-validate/README.md vendor/topthink/think-validate/composer.json vendor/topthink/think-validate/src/Validate.php vendor/topthink/think-validate/src/contract/Enumable.php vendor/topthink/think-validate/src/exception/ValidateException.php vendor/topthink/think-validate/src/facade/Validate.php vendor/topthink/think-validate/src/helper.php vendor/topthink/think-validate/src/validate/ValidateRule.php vendor/topthink/think-validate/src/validate/ValidateRuleSet.php vendor/topthink/think-view/.gitignore vendor/topthink/think-view/LICENSE vendor/topthink/think-view/README.md vendor/topthink/think-view/composer.json vendor/topthink/think-view/src/Think.php vendor/wechatpay/wechatpay/CHANGELOG.md vendor/wechatpay/wechatpay/LICENSE vendor/wechatpay/wechatpay/README.md vendor/wechatpay/wechatpay/README_APIv2.md vendor/wechatpay/wechatpay/SECURITY.md vendor/wechatpay/wechatpay/UPGRADING.md vendor/wechatpay/wechatpay/bin/CertificateDownloader.php vendor/wechatpay/wechatpay/bin/README.md vendor/wechatpay/wechatpay/composer.json vendor/wechatpay/wechatpay/phpstan.v8.4.neon vendor/wechatpay/wechatpay/src/Builder.php vendor/wechatpay/wechatpay/src/BuilderChainable.php vendor/wechatpay/wechatpay/src/BuilderTrait.php vendor/wechatpay/wechatpay/src/ClientDecorator.php vendor/wechatpay/wechatpay/src/ClientDecoratorInterface.php vendor/wechatpay/wechatpay/src/ClientJsonTrait.php vendor/wechatpay/wechatpay/src/ClientXmlTrait.php vendor/wechatpay/wechatpay/src/Crypto/AesEcb.php vendor/wechatpay/wechatpay/src/Crypto/AesGcm.php vendor/wechatpay/wechatpay/src/Crypto/AesInterface.php vendor/wechatpay/wechatpay/src/Crypto/Hash.php vendor/wechatpay/wechatpay/src/Crypto/Rsa.php vendor/wechatpay/wechatpay/src/Exception/InvalidArgumentException.php vendor/wechatpay/wechatpay/src/Exception/WeChatPayException.php vendor/wechatpay/wechatpay/src/Formatter.php vendor/wechatpay/wechatpay/src/Transformer.php vendor/wechatpay/wechatpay/src/Util/MediaUtil.php vendor/wechatpay/wechatpay/src/Util/PemUtil.php