| New file |
| | |
| | | APP_DEBUG = true
APP_TRACE = true |
| New file |
| | |
| | | APP_DEBUG = true |
| | | APP_TRACE = true |
| New file |
| | |
| | | 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 |
| New file |
| | |
| | | *.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 |
| New file |
| | |
| | | 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 |
| New file |
| | |
| | | |
| | | 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. |
| New file |
| | |
| | | <?php |
| | | declare (strict_types = 1); |
| | | |
| | | namespace app; |
| | | |
| | | use think\Service; |
| | | |
| | | /** |
| | | * 应用服务类 |
| | | */ |
| | | class AppService extends Service |
| | | { |
| | | public function register() |
| | | { |
| | | // 服务注册 |
| | | } |
| | | |
| | | public function boot() |
| | | { |
| | | // 服务启动 |
| | | } |
| | | } |
| New file |
| | |
| | | <?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'); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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); |
| | | } |
| | | } |
| New file |
| | |
| | | <?php |
| | | namespace app; |
| | | |
| | | // 应用请求对象类 |
| | | class Request extends \think\Request |
| | | { |
| | | |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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()); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | // 中间件定义文件 |
| | | return [ |
| | | // 全局请求缓存 |
| | | // \think\middleware\CheckRequestCache::class, |
| | | // 多语言加载 |
| | | // \think\middleware\LoadLangPack::class, |
| | | // Session初始化 |
| | | // \think\middleware\SessionInit::class, |
| | | // \think\trace\TraceDebug::class, |
| | | // \app\company\middleware\Checklogin::class, |
| | | ]; |
| New file |
| | |
| | | <?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'; |
| | | |
| | | } |
| New file |
| | |
| | | <?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'); |
| | | } |
| | | } |
| New file |
| | |
| | | <?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']); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\model; |
| | | |
| | | use think\facade\Db; |
| | | use think\model; |
| | | |
| | | class MessageAttachment extends Model {} |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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(); |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写菜单索引', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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'],/////编辑情况下只验证密码的复杂程度//////// |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '分类编码已存在!', |
| | | ]; |
| | | |
| | | } |
| New file |
| | |
| | | <?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'], |
| | | ]; |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写货币名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写分销区域币别', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请输入分销区域物流名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class DisPlatform extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'platform_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'platform_name.require' => '请填写分销平台名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '平台编码已存在', |
| | | ]; |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写货运属性名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class GoodsMaterial extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'material_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'material_name.require' => '请填写材质名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class GoodsPurpose extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'purpose_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'purpose_name.require' => '请填写商品用途名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '语言标识已存在', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '值已存在', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写增值服务名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class Message extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'title' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'title.require' => '请输入消息标题', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class MsgCategory extends Validate { |
| | | |
| | | |
| | | protected $rule = [ |
| | | 'title' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'title.require' => '请填写分类名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class Notice extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'title' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'title.require' => '请输入公告标题', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class PartnerSchool extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'school_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'school_name.require' => '请填写合作学校名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class PaymentTool extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'payment_tool_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'payment_tool_name.require' => '请填写名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请输入平台物流产品英文名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class PlatformRegion extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'region_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'region_name.require' => '请填写区域名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请输入退换货类型名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请选择退换货类型分类', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | namespace app\admin\validate; |
| | | |
| | | use think\Validate; |
| | | |
| | | class SalesPlatform extends Validate { |
| | | |
| | | protected $rule = [ |
| | | 'platform_name' => 'require', |
| | | ]; |
| | | protected $message = [ |
| | | 'platform_name.require' => '请填写平台名称', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写联系人', |
| | | ]; |
| | | } |
| New file |
| | |
| | | <?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' => '请填写联系人', |
| | | ]; |
| | | } |
| New file |
| | |
| | | <?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' => '请填写国家编码', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写联系人', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写联系人', |
| | | ]; |
| | | |
| | | } |
| New file |
| | |
| | | <?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' => '请填写菜单索引', |
| | | ]; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <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> |
| New file |
| | |
| | | <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> --> |
| New file |
| | |
| | | <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> |
| | |   |
| | | <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> |
| | |    |
| | | <el-link href="https://element-plus.org" :underline="false"> |
| | | <el-icon size="20"> |
| | | <bell></bell> |
| | | </el-icon> |
| | | </el-link> |
| | |    |
| | | <el-link href="https://element-plus.org" :underline="false"> |
| | | <el-icon size="20"> |
| | | <message></message> |
| | | </el-icon> |
| | | </el-link> |
| | |    |
| | | <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> |
| New file |
| | |
| | | <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> |
| New file |
| | |
| | | <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"> --> |
| New file |
| | |
| | | <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}" /> |
| New file |
| | |
| | | <title>正和仓-总管理后台</title> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | </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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |  <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> |
| New file |
| | |
| | | <!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> |
| | |   |
| | | <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> |
| New file |
| | |
| | | <?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; |
| | | } |
| | | } |
| 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 |