Commit 49f3297e by 杨树贤

Merge branch 'master' of http://119.23.72.7/semour/semour_admin

parents 02e4a26b 27290efd
<?php
namespace App\Admin\Actions\User;
use App\Models\Order as OrderModel;
use App\Models\User;
use Dcat\Admin\Grid\BatchAction;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Illuminate\Http\Request;
use Dcat\Admin\Grid\RowAction;
class UserAssignAction extends BatchAction
{
protected $action;
// 注意action的构造方法参数一定要给默认值
public function __construct($title = null, $action = 1)
{
$this->title = $title;
$this->action = $action;
}
// 确认弹窗信息
public function confirm()
{
return '您确定要发布已选中的文章吗?';
}
public function html()
{
$class = $this->getElementClass();
$this->setHtmlAttribute([
"class" => "{$class} btn btn-primary btn-sm btn-mini",
]);
return parent::html(); // TODO: Change the autogenerated stub
}
// 处理请求
public function handle(Request $request)
{
// 获取选中的文章ID数组
$keys = $this->getKey();
// 获取请求参数
$action = $request->get('action');
foreach (Post::find($keys) as $post) {
$post->released = $action;
$post->save();
}
$message = $action ? '文章发布成功' : '文章下线成功';
return $this->response()->success($message)->refresh();
}
// 设置请求参数
public function parameters()
{
return [
'action' => $this->action,
];
}
}
<?php
namespace App\Admin\Actions\User;
use App\Admin\Service\UserService;
use App\Models\Order as OrderModel;
use App\Models\User;
use Dcat\Admin\Grid\BatchAction;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Illuminate\Http\Request;
use Dcat\Admin\Grid\RowAction;
class UserStatusAction extends RowAction
{
/**
* 按钮样式定义,默认 btn btn-white waves-effect
*
* @var string
*/
protected $style = 'btn btn-white waves-effect';
/**
* 按钮文本
*
* @return string|void
*/
public function title()
{
$buttonName = "启用";
if ($this->row->status == User::STATUS_NORMAL) {
$buttonName = "禁用";
}
return $buttonName;
}
public function html()
{
$class = $this->getElementClass();
$color = "btn btn-primary btn-sm btn-mini";
if ($this->row->status == User::STATUS_NORMAL) {
$color = "btn btn-danger btn-sm btn-mini";
}
// 获取当前行数据ID
$id = $this->getKey();
$this->setHtmlAttribute([
'data-id' => $id,
"class" => "{$class} {$color}",
]);
return parent::html();
}
/**
* 确认弹窗,如果不需要则返回空即可
*
* @return array|string|void
*/
public function confirm()
{
$buttonName = "启用";
if ($this->row->status == User::STATUS_NORMAL) {
$buttonName = "禁用";
}
return ["是否确认 {$buttonName} ?"];
}
/**
* 处理请求
* 如果你的类中包含了此方法,则点击按钮后会自动向后端发起ajax请求,并且会通过此方法处理请求逻辑
*
* @param Request $request
*/
public function handle(Request $request)
{
// 你的代码逻辑
$id = $this->getKey();
// 获取 parameters 方法传递的参数
$rowData = $request->get('rowData');
try {
UserService::updateUserStatus($id,
$rowData['status'] == User::STATUS_NORMAL ? User::STATUS_DISABLE : User::STATUS_NORMAL);
} catch (\Throwable $e) {
return $this->response()->error($e->getMessage());
}
return $this->response()->success('操作成功')->refresh();
}
/**
* 设置请求参数
*
* @return array|void
*/
public function parameters()
{
return [
'rowData' => $this->row,
];
}
}
<?php
namespace App\Admin\Actions\User;
use App\Models\Order as OrderModel;
use App\Models\User;
use Dcat\Admin\Grid\BatchAction;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Illuminate\Http\Request;
use Dcat\Admin\Grid\RowAction;
class UserTransferAction extends BatchAction
{
protected $action;
// 注意action的构造方法参数一定要给默认值
public function __construct($title = null, $action = 1)
{
$this->title = $title;
$this->action = $action;
}
// 确认弹窗信息
public function confirm()
{
return '您确定要发布已选中的文章吗?';
}
public function html()
{
$class = $this->getElementClass();
$this->setHtmlAttribute([
"class" => "{$class} btn btn-primary btn-sm btn-mini",
]);
return parent::html(); // TODO: Change the autogenerated stub
}
// 处理请求
public function handle(Request $request)
{
// 获取选中的文章ID数组
$keys = $this->getKey();
// 获取请求参数
$action = $request->get('action');
foreach (Post::find($keys) as $post) {
$post->released = $action;
$post->save();
}
$message = $action ? '文章发布成功' : '文章下线成功';
return $this->response()->success($message)->refresh();
}
// 设置请求参数
public function parameters()
{
return [
'action' => $this->action,
];
}
}
...@@ -10,15 +10,29 @@ use Maatwebsite\Excel\Facades\Excel; ...@@ -10,15 +10,29 @@ use Maatwebsite\Excel\Facades\Excel;
class OrderApiController extends Controller class OrderApiController extends Controller
{ {
public function orderDownloadShow(){ public function orderDownloadShow(Request $request){
$this->view(); $params = $request->all();
$type = arrayGet($params, "type");
if($type == "1"){
//PI
return view('export.order_contract_PI');
}elseif($type == "2"){
//CI
return view('export.order_contract_CI');
}else{
//PL
return view('export.order_contract_PL');
}
} }
public function orderDownload(Request $request){ public function orderDownload(Request $request){
$params = $request->all(); $params = $request->all();
// dd($params);
return Excel::download(new \App\Exports\ContractExport(),'PI.xlsx'); return Excel::download(new \App\Exports\ContractExport(),'PI.xlsx');
} }
} }
...@@ -20,12 +20,14 @@ class UserController extends AdminController ...@@ -20,12 +20,14 @@ class UserController extends AdminController
{ {
return Grid::make(new User(), function (Grid $grid) { return Grid::make(new User(), function (Grid $grid) {
$grid->showFilter(); $grid->showFilter();
$grid->disableActions();
$grid->disableFilterButton(); $grid->disableFilterButton();
$grid->disableRefreshButton(); $grid->disableRefreshButton();
$grid->disableCreateButton(); $grid->disableBatchDelete();
UserService::userListFilter($grid); // $grid->disableCreateButton();
UserService::userListListField($grid); UserService::userListListField($grid);
UserService::userListTool($grid);
UserService::userListActions($grid);
UserService::userListFilter($grid);
}); });
} }
......
<?php
namespace App\Exceptions;
use App\Http\ApiHelper\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
/*
*无效请求异常
*/
class InvalidRequestException extends \Exception
{
public function __construct($message = "", $code = 200)
{
parent::__construct($message, $code);
}
public function render(Request $request)
{
$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
$path_info = parse_url($request_uri);
$err_info = [
'domain' => isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '',
'interface' => isset($path_info) ? $path_info['path'] : '',
'user_agent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '',
'ip' => request()->getClientIp(),
'time' => time(),
'other' => '',
'request_params' => $_REQUEST,
'msg' => $this->getMessage(),
"code" => $this->getCode(),
];
Log::error(json_encode($err_info, JSON_UNESCAPED_UNICODE));
return response()->json(json_decode(Response::setError($this->message), true));
}
}
<?php
namespace App\Admin\Service;
use App\Models\Cms\CmsUser;
use App\Models\Order;
use Dcat\Admin\Grid;
class OrderService
{
public static function getOrderList($orderId=0){
}
}
...@@ -2,13 +2,19 @@ ...@@ -2,13 +2,19 @@
namespace App\Admin\Service; namespace App\Admin\Service;
use App\Admin\Actions\OrderAuditAction;
use App\Admin\Actions\OrderReverseAuditAction;
use App\Admin\Actions\User\UserAssignAction;
use App\Admin\Actions\User\UserStatusAction;
use App\Admin\Actions\User\UserTransferAction;
use App\Models\Cms\CmsUser; use App\Models\Cms\CmsUser;
use App\Models\User;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
class UserService class UserService
{ {
public static function userListFilter(Grid $grid){ public static function userListFilter(Grid $grid)
{
$grid->filter(function ($filter) { $grid->filter(function ($filter) {
$filter->expand(true); $filter->expand(true);
$filter->whereBetween('create_time', function ($q) { $filter->whereBetween('create_time', function ($q) {
...@@ -21,27 +27,60 @@ class UserService ...@@ -21,27 +27,60 @@ class UserService
$filter->startWith('user_sn')->width(2); $filter->startWith('user_sn')->width(2);
$filter->startWith('name')->width(2); $filter->startWith('name')->width(2);
$filter->equal('status')->select(admin_trans('user.options.status'))->width(2); $filter->equal('status')->select(admin_trans('user.options.status'))->width(2);
$filter->equal('sales_id',trans('inquiry.fields.sales_name'))->select(CmsUser::pluck('name', 'userId')->toArray())->width(3); $filter->equal('sale_id', trans('user.fields.sale_name'))->select(CmsUser::pluck('name', 'userId')
$filter->equal('status')->select(admin_trans('user.options.status'))->width(2); ->toArray())->width(3);
$filter->equal('reg_source')->select(admin_trans('user.options.reg_source'))->width(2);
}); });
} }
public static function userListListField(Grid $grid){ public static function userListListField(Grid $grid)
{
$grid->column('company_name'); $grid->column('company_name');
$grid->column('user_sn'); $grid->column('user_sn')->link(function ($user_sn) {
return admin_url('smc_user/' . $user_sn);
});
$grid->column('name'); $grid->column('name');
$grid->column('phone'); $grid->column('phone');
$grid->column('email'); $grid->column('email');
$grid->column('remark');
$grid->column('sale_name'); $grid->column('sale_name');
$grid->column('status')->using(admin_trans('user.options.status'));
$grid->column('created_time')->display(function ($time) { $grid->column('created_time')->display(function ($time) {
return $time ? date('Y-m-d H:i:s', $time) : ''; return $time ? date('Y-m-d H:i:s', $time) : '';
})->sortable();; })->sortable();;
$grid->column('update_time')->display(function ($time) { $grid->column('status')->using(admin_trans('user.options.status'));
return $time ? date('Y-m-d H:i:s', $time) : ''; }
})->sortable();;
public static function userListTool(Grid $grid)
{
$grid->tools([
new UserAssignAction("分配销售"),
new UserTransferAction("转移销售"),
]);
} }
public static function userListActions(Grid $grid)
{
$grid->setActionClass(Grid\Displayers\Actions::class);
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableDelete();
$actions->disableEdit();
$actions->disableQuickEdit();
$actions->disableView();
// 当前行的数据数组
$rowArray = $actions->row->toArray();
// 获取当前行主键值
$id = $actions->getKey();
//状态按钮
$actions->append(new UserStatusAction());
});
}
public static function updateUserStatus($id, $status)
{
$update = [
"status" => $status
];
User::updateById($id, $update);
}
} }
...@@ -23,6 +23,7 @@ Route::group([ ...@@ -23,6 +23,7 @@ Route::group([
$router->resource('country', 'CountryController'); $router->resource('country', 'CountryController');
//下载pdf //下载pdf
Route::get('/api/order_download', '\App\Admin\Controllers\Api\OrderApiController@orderDownload'); Route::get('/api/order_download', '\App\Admin\Controllers\Api\OrderApiController@orderDownload');
Route::get('/api/orderDownloadShow', '\App\Admin\Controllers\Api\OrderApiController@orderDownloadShow');
}); });
......
...@@ -13,6 +13,8 @@ use Illuminate\Database\Eloquent\Model; ...@@ -13,6 +13,8 @@ use Illuminate\Database\Eloquent\Model;
* @property $email_verified_at 邮箱校验时间 * @property $email_verified_at 邮箱校验时间
* @property $password 密码 * @property $password 密码
* @property $phone 手机号码 * @property $phone 手机号码
* @property $remark 备注
* @property $reg_source 注册来源 1网站 2人工新增
* @property $remember_token 记住登陆token * @property $remember_token 记住登陆token
* @property $account_properties 账号属性,1是个人,2是企业 * @property $account_properties 账号属性,1是个人,2是企业
* @property $status 状态,1是正常,-1是禁用 * @property $status 状态,1是正常,-1是禁用
...@@ -28,4 +30,39 @@ class User extends Model ...@@ -28,4 +30,39 @@ class User extends Model
{ {
use HasDateTimeFormatter; use HasDateTimeFormatter;
protected $table = 'users'; protected $table = 'users';
public $timestamps = false;
const STATUS_NORMAL = 1;
const STATUS_DISABLE = -1;
public static function insertData($data)
{
return self::insertGetId($data);
}
public static function updateById($id, $update)
{
return self::where("id", $id)->update($update);
}
public static function getInfoByUserId($userId)
{
$res = self::where('user_id', $userId)->first();
return ($res) ? $res->toArray() : [];
}
// 批量获取用户信息
public static function getInfoByUserIds($userId)
{
return self::whereIn('user_id', $userId)->get()->keyBy('user_id')->toArray();
}
public static function getListByIdArr($userIdArr)
{
$res = self::wherein('user_id', $userIdArr)->get();
return ($res) ? $res->toArray() : [];
}
} }
...@@ -2,6 +2,10 @@ ...@@ -2,6 +2,10 @@
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
define("DIGITS_TWO",2);
define("DIGITS_FOUR",4);
define("DIGITS_SIX",6);
if (! function_exists('user_admin_config')) { if (! function_exists('user_admin_config')) {
function user_admin_config($key = null, $value = null) function user_admin_config($key = null, $value = null)
{ {
...@@ -76,3 +80,341 @@ function curl($url, $params = false, $ispost = 0, $https = 0, $cookie = '', $tim ...@@ -76,3 +80,341 @@ function curl($url, $params = false, $ispost = 0, $https = 0, $cookie = '', $tim
curl_close($ch); curl_close($ch);
return $response; return $response;
} }
/**
* 通用格式化字符串为数字金额
* @$amount 需要格式化的数字或者字符串 1.2345
* @$digits 保留小数位数 1.23
* @$currency 币别 ¥12003.4567
* @$thousandsSymbol 千分位字符串隔开 1,200,3.4567
*
* define("DIGITS_TWO",2);
define("DIGITS_FOUR",4);
define("DIGITS_SIX",6);
*/
if (!function_exists('decimal_number_format')) {
function decimal_number_format($amount,$digits=DIGITS_TWO,$currency="",$thousandsSymbol=""){
$amount = floatval(strval($amount));
//格式化币别
if($currency){
$minus = $amount < 0 ? '-' : '';
$numerical = number_format(abs($amount),$digits,".",$thousandsSymbol);
$sign = \Arr::get(config("field.currency_sign"),intval($currency),"");
if (!empty($sign)) {
$numerical = $sign . $numerical;
}
return $minus ? $minus.$numerical : $numerical;
}else{
$numerical = number_format($amount,$digits,".","");
return $numerical;
}
}
}
if (!function_exists('printJson')) {
function printJson($data)
{
print_r(is_array($data) ? json_encode($data) : $data);
die;
}
}
if (!function_exists('drawLetter')) {
/*
* 格式化型号, echo DrawLetter("LMGAGA 质量 &&*****") 输出:LMGAGA
* @param $g string 关键词
*/
function drawLetter($g){
$g = preg_replace('/[\x{4e00}-\x{9fff}]+/u', '', $g);
$g = preg_replace('/[^A-Za-z0-9]+/', '', $g);
return strtoupper($g);
}
}
if (!function_exists('buildQuery')) {
function buildQuery($query, $where)
{
foreach ($where as $subWhere) {
if (count($subWhere) == 2) {
$fiels = $exp = $subWhere[0] ?? "";
$value = $subWhere[1] ?? null;
if (empty($fiels) || $value === null) {
continue;
}
if ($exp == "or") {
$query->orWhere(function ($q) use ($value) {
buildQuery($q, $value);
});
} else {
$query->where($subWhere[0], $subWhere[1]);
}
} else if (count($subWhere) == 3) {
$fiels = $subWhere[0] ?? "";
$exp = $subWhere[1] ?? null;
$value = $subWhere[2] ?? null;
if (empty($fiels) || $exp === null || $value === null) {
continue;
}
if ($exp == "in" && is_array($value) && !empty($value)) {
$query->whereIn($fiels, $value);
} else {
$query->where($fiels, $exp, $value);
}
}
}
return $query;
}
}
if (!function_exists('echoToSql')) {
function echoToSql($query){
$tmp = str_replace('?', '"'.'%s'.'"', $query->toSql());
$tmp = vsprintf($tmp, $query->getBindings());
dd($tmp);
}
}
/**
* Notes:提取数组中某个字段$searchkey作为键值,然后从数组中检索给定的键的所有值
* User: sl
* Date: 2022/5/25 15:39
* @param $arr
* @param $key
* @param $val
* @return array
*/
function flipArrayPluck($arr,$newKey,$seachKey){
$newArr = [];
foreach($arr as $v){
$newArr[$v[$newKey]][] = $v[$seachKey];
}
return $newArr;
}
if (!function_exists('checkArrayValuesNotEmpty')) {
function checkArrayValuesNotEmpty($arr=[]){
$result = true;
if(is_array($arr)){
foreach($arr as $val){
if(empty($val)){
$result = false;
break;
}
}
}else{
$result = false;
}
return $result;
}
}
/*
* 遍历数组中某个字段的值 作为 键 返回新数组
*/
function arrayChangeKeyByField($list, $searchKey)
{
$arr = [];
if (!$searchKey) {
return $list;
}
foreach ($list as $k => $v) {
if (isset($v[$searchKey])) {
$arr[$v[$searchKey]] = $v;
}
}
return $arr ? $arr : $list;
}
/*
* 把数组中null的字符串转为空
*/
function conversionArray($arr)
{
if (empty($arr)) {
return $arr;
}
foreach ($arr as $k => $v) {
if (is_array($v)) {
$arr[$k] = conversionArray($v);
} else {
if ($v === null) {
$arr[$k] = "";
}
}
}
return $arr;
}
function dateDefault($time)
{
$time = intval($time);
if ($time) {
return date("Y-m-d H:i:s", $time);
}
return "";
}
function arraySort($list, $keys, $sort = "asc")
{
if ($sort == "asc") {
$sort = SORT_ASC;
} else {
$sort = SORT_DESC;
}
array_multisort(array_column($list, $keys), $sort, $list);
return $list;
}
/*
* 去重数组
* 过滤数组
*/
function array_filter_unique($arr)
{
return array_unique(array_filter($arr));
}
/*
* 截取字符串
*/
//如果字符串长度超过10,则截取并以省略号结尾
function truncStr($str, $len = 100, $endStr = "")
{
$str = (string)$str;
if (mb_strlen($str, 'utf-8') > $len) {
return mb_substr($str, 0, $len, 'utf-8') . $endStr;
} else {
return $str;
}
}
/*
* 获取登录者的信息
*/
function getAdminUser()
{
$admin = request()->get("user");
if (!$admin) {
throw new \App\Exceptions\InvalidRequestException("没找到登录相关信息,请先登录~_~");
}
$arr = [];
$arr["userId"] = $admin->userId;
$arr["name"] = $admin->name;
$arr["email"] = $admin->email;
$arr["engName"] = $admin->engName;
return $arr;
}
/*
* 获取登录者用户id
*/
function getAdminUserId()
{
$admin = request()->get("user");
if (!$admin) {
throw new \App\Exceptions\InvalidRequestException("没找到登录相关信息,请先登录~_~");
}
return $admin->userId;
}
/*
* 获取登录者的名字
*/
function getAdminUserName()
{
$admin = request()->get("user");
if (!$admin) {
throw new \App\Exceptions\InvalidRequestException("没找到登录相关信息,请先登录~_~");
}
return $admin->name;
}
/**
* 是否为多维数组
* @param array $arr
* @return bool
*/
function isMultipleArray(array &$arr): bool
{
if (count($arr) <= 0) {
return false;
}
if (count($arr) == count($arr, COUNT_RECURSIVE)) {
foreach ($arr as $tempArr) {
if (is_array($tempArr)) {
return true;
}
}
return false;
}
return true;
}
//判断是否有对应的权限
//request()->perms是Permission中间件过来的
function checkPerm($perm): bool
{
$perms = request()->perms ?: [];
return in_array($perm, $perms);
}
/**
* 价格格式化
* @param [type] $price [description]
* @param integer $sign [description]
* @param integer $num [description]
* @return [type] [description]
*/
function price_format($price, $sign = 0, $num = 2, $sep = '')
{
$minus = $price < 0 ? '-' : '';
$price = floatval(strval($price));
$price = number_format(abs($price), $num, '.', $sep);
$sign = \Arr::get(config("field.currency_sign"),intval($sign),"");
if (!empty($sign)) {
$price = $sign . $price;
}
if($minus){
return $minus.$price;
}
return $price;
}
function arrayGet($arr, $key, $default = "", $func = "")
{
if (isset($arr[$key])) {
if ($func && is_callable($func)) {
try {
return $func($arr[$key]);
} catch (\Throwable $e) {
return $arr[$key];
}
} else {
return $arr[$key];
}
} else {
return $default;
}
}
/*
* 构建时间查询
*/
function buildQueryTimeRange($time = "")
{
$time = explode("~", $time);
$buildTimeQueryData["begin_time"] = isset($time[0]) ? $time[0] : "";
$buildTimeQueryData["end_time"] = isset($time[1]) ? $time[1] : "";
return $buildTimeQueryData;
}
\ No newline at end of file
...@@ -44,6 +44,9 @@ ...@@ -44,6 +44,9 @@
"classmap": [ "classmap": [
"database/seeds", "database/seeds",
"database/factories" "database/factories"
],
"files":[
"app/helpers.php"
] ]
}, },
"autoload-dev": { "autoload-dev": {
......
...@@ -162,6 +162,7 @@ return [ ...@@ -162,6 +162,7 @@ return [
'database' => env('REDIS_CACHE_DB', '1'), 'database' => env('REDIS_CACHE_DB', '1'),
], ],
], ],
]; ];
...@@ -10,6 +10,7 @@ return [ ...@@ -10,6 +10,7 @@ return [
'email' => '邮箱', 'email' => '邮箱',
'email_verified_at' => '邮箱校验时间', 'email_verified_at' => '邮箱校验时间',
'password' => '密码', 'password' => '密码',
'remark' => '备注',
'phone' => '手机号码', 'phone' => '手机号码',
'remember_token' => '记住登陆token', 'remember_token' => '记住登陆token',
'account_properties' => '账号属性', 'account_properties' => '账号属性',
...@@ -21,11 +22,16 @@ return [ ...@@ -21,11 +22,16 @@ return [
'last_name' => '姓氏', 'last_name' => '姓氏',
'created_time' => '创建时间', 'created_time' => '创建时间',
'update_time' => '更新时间', 'update_time' => '更新时间',
'reg_source' => '注册来源',
], ],
'options' => [ 'options' => [
"status"=>[ "status"=>[
"1"=>"正常", "1"=>"正常",
"-1"=>"禁用" "-1"=>"禁用"
] ],
"reg_source"=>[
"1"=>"网站",
"2"=>"人工新增"
],
], ],
]; ];
...@@ -10,6 +10,7 @@ return [ ...@@ -10,6 +10,7 @@ return [
'email' => '邮箱', 'email' => '邮箱',
'email_verified_at' => '邮箱校验时间', 'email_verified_at' => '邮箱校验时间',
'password' => '密码', 'password' => '密码',
'remark' => '备注',
'phone' => '手机号码', 'phone' => '手机号码',
'remember_token' => '记住登陆token', 'remember_token' => '记住登陆token',
'account_properties' => '账号属性', 'account_properties' => '账号属性',
......
我是Pi文件
<table>
<thead>
<tr height="12">
<td rowspan="2" colspan="4" style="font-size: 16px;"><b>深貿電子有限公司</b></td>
<td colspan="4">香港九龙观塘成业街27号日昇中心12楼1210室</td>
</tr>
<tr height="12">
<td colspan="4">Flat Rm1210, 10/F Sunbeam Centre #27, Shing Yip Street, Kwun </td>
</tr>
<tr height="12">
<td colspan="4" style="font-size: 12px;"><b>SEMOUR ELECTRONICS CO., LIMITED</b></td>
<td colspan="4">Tong, Kowloon Hong Kong</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="8" style="text-align: center; font-size: 16px;"><b>PROFORMA INVOICE</b></td>
</tr>
<tr>
<td colspan="4">
Bill To: xxxxxxxxxxxx
</td>
<td colspan="4">
Invoice No.: xxxxxxxxxxxx
</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="4">Date: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Ship To: xxxxxxxxxxxx</td>
<td colspan="4">Payment Term: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="4">Delivery terms: EXW HK </td>
</tr>
<tr>
<td colspan="4">Add:</td>
<td colspan="4">SELLER /CONTACT: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Tel: </td>
<td colspan="4">Email: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Attn:</td>
<td colspan="4">Mob: xxxxxxxxxxxx</td>
</tr>
<tr>
<th style="text-align: center; border: 1px solid #ccc;"><b>C/N No.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Description / Part No.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Mfr.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Quantity</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Unit Price</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Date code</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Lead Time</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>AMOUNT</b></th>
</tr>
<tr height="25">
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc;"> xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;"> xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
</tr>
<tr>
<td style="text-align: center; border: 1px solid #ccc;"><b>Total:</b></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;">xxxxxxxxxxxx</td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;">xxxxxxxxxxxx</td>
</tr>
<tr height="25">
<td colspan="8" style="word-wrap: break-word; word-break: break-all;">
Remark:  1.Once received the goods, please sign on the invoice and packing list and send back the scan copy for record, if we didn't receive any feedback with in 3 days we will not entertain any claim regarding this shipment.
</td>
</tr>
<tr>
<td colspan="8">
2.All bank fees are the responsibility of the customer.
</td>
</tr>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #ccc;">Bank Information</td>
<td colspan="7"></td>
</tr>
<tr>
<td>Bank Name</td>
<td colspan="7">HSBC Hong Kong</td>
</tr>
<tr>
<td>Bank address</td>
<td colspan="7">1 Queen's Road Central, Hong Kong</td>
</tr>
<tr>
<td>Swift Code</td>
<td colspan="7">HSBCHKHHHKH</td>
</tr>
<tr>
<td>Company Name</td>
<td colspan="7">SEMOUR ELECTRONICS CO., LIMITED</td>
</tr>
<tr>
<td>Account No</td>
<td colspan="7">819-847187-838</td>
</tr>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #ccc;">Terms &#38; Conditions</td>
<td colspan="7"></td>
</tr>
<tr>
<td colspan="8">
1.Your order is NCNR.
</td>
</tr>
<tr>
<td colspan="8">
2.All Claims of shortage or shipment errors or shipment damage must be made within 7 days of after delivery.
</td>
</tr>
<tr>
<td colspan="8">
3.Our liability shall be limited to the invoiced value of the materials or its replacement.
</td>
</tr>
<tr height="25">
<td colspan="8" style="word-wrap: break-word; word-break: break-all;">
4.Parts are warranty one month form, fit, and function guarantee. All returns must be authorized by our sales department within one month of receipts of shipment.
</td>
</tr>
<tr>
<td colspan="8">
5.VAT and Bank transfer charger is excluded in the invoice amount. Buyer will be responsible for TAX and Bank Charges if there is any.
</td>
</tr>
</tbody>
</table>
\ No newline at end of file
我是Pi文件
<table>
<thead>
<tr height="12">
<td rowspan="2" colspan="4" style="font-size: 16px;"><b>深貿電子有限公司</b></td>
<td colspan="4">香港九龙观塘成业街27号日昇中心12楼1210室</td>
</tr>
<tr height="12">
<td colspan="4">Flat Rm1210, 10/F Sunbeam Centre #27, Shing Yip Street, Kwun </td>
</tr>
<tr height="12">
<td colspan="4" style="font-size: 12px;"><b>SEMOUR ELECTRONICS CO., LIMITED</b></td>
<td colspan="4">Tong, Kowloon Hong Kong</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="8" style="text-align: center; font-size: 16px;"><b>PROFORMA INVOICE</b></td>
</tr>
<tr>
<td colspan="4">
Bill To: xxxxxxxxxxxx
</td>
<td colspan="4">
Invoice No.: xxxxxxxxxxxx
</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="4">Date: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Ship To: xxxxxxxxxxxx</td>
<td colspan="4">Payment Term: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="4">Delivery terms: EXW HK </td>
</tr>
<tr>
<td colspan="4">Add:</td>
<td colspan="4">SELLER /CONTACT: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Tel: </td>
<td colspan="4">Email: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Attn:</td>
<td colspan="4">Mob: xxxxxxxxxxxx</td>
</tr>
<tr>
<th style="text-align: center; border: 1px solid #ccc;"><b>C/N No.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Description / Part No.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Mfr.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Quantity</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Unit Price</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Date code</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Lead Time</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>AMOUNT</b></th>
</tr>
<tr height="25">
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc;"> xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;"> xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
</tr>
<tr>
<td style="text-align: center; border: 1px solid #ccc;"><b>Total:</b></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;">xxxxxxxxxxxx</td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;">xxxxxxxxxxxx</td>
</tr>
<tr height="25">
<td colspan="8" style="word-wrap: break-word; word-break: break-all;">
Remark:  1.Once received the goods, please sign on the invoice and packing list and send back the scan copy for record, if we didn't receive any feedback with in 3 days we will not entertain any claim regarding this shipment.
</td>
</tr>
<tr>
<td colspan="8">
2.All bank fees are the responsibility of the customer.
</td>
</tr>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #ccc;">Bank Information</td>
<td colspan="7"></td>
</tr>
<tr>
<td>Bank Name</td>
<td colspan="7">HSBC Hong Kong</td>
</tr>
<tr>
<td>Bank address</td>
<td colspan="7">1 Queen's Road Central, Hong Kong</td>
</tr>
<tr>
<td>Swift Code</td>
<td colspan="7">HSBCHKHHHKH</td>
</tr>
<tr>
<td>Company Name</td>
<td colspan="7">SEMOUR ELECTRONICS CO., LIMITED</td>
</tr>
<tr>
<td>Account No</td>
<td colspan="7">819-847187-838</td>
</tr>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #ccc;">Terms &#38; Conditions</td>
<td colspan="7"></td>
</tr>
<tr>
<td colspan="8">
1.Your order is NCNR.
</td>
</tr>
<tr>
<td colspan="8">
2.All Claims of shortage or shipment errors or shipment damage must be made within 7 days of after delivery.
</td>
</tr>
<tr>
<td colspan="8">
3.Our liability shall be limited to the invoiced value of the materials or its replacement.
</td>
</tr>
<tr height="25">
<td colspan="8" style="word-wrap: break-word; word-break: break-all;">
4.Parts are warranty one month form, fit, and function guarantee. All returns must be authorized by our sales department within one month of receipts of shipment.
</td>
</tr>
<tr>
<td colspan="8">
5.VAT and Bank transfer charger is excluded in the invoice amount. Buyer will be responsible for TAX and Bank Charges if there is any.
</td>
</tr>
</tbody>
</table>
\ No newline at end of file
我是Pi文件
<table>
<thead>
<tr height="12">
<td rowspan="2" colspan="4" style="font-size: 16px;"><b>深貿電子有限公司</b></td>
<td colspan="4">香港九龙观塘成业街27号日昇中心12楼1210室</td>
</tr>
<tr height="12">
<td colspan="4">Flat Rm1210, 10/F Sunbeam Centre #27, Shing Yip Street, Kwun </td>
</tr>
<tr height="12">
<td colspan="4" style="font-size: 12px;"><b>SEMOUR ELECTRONICS CO., LIMITED</b></td>
<td colspan="4">Tong, Kowloon Hong Kong</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="8" style="text-align: center; font-size: 16px;"><b>PROFORMA INVOICE</b></td>
</tr>
<tr>
<td colspan="4">
Bill To: xxxxxxxxxxxx
</td>
<td colspan="4">
Invoice No.: xxxxxxxxxxxx
</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="4">Date: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Ship To: xxxxxxxxxxxx</td>
<td colspan="4">Payment Term: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="4">Delivery terms: EXW HK </td>
</tr>
<tr>
<td colspan="4">Add:</td>
<td colspan="4">SELLER /CONTACT: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Tel: </td>
<td colspan="4">Email: xxxxxxxxxxxx</td>
</tr>
<tr>
<td colspan="4">Attn:</td>
<td colspan="4">Mob: xxxxxxxxxxxx</td>
</tr>
<tr>
<th style="text-align: center; border: 1px solid #ccc;"><b>C/N No.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Description / Part No.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Mfr.</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Quantity</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Unit Price</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Date code</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>Lead Time</b></th>
<th style="text-align: center; border: 1px solid #ccc;"><b>AMOUNT</b></th>
</tr>
<tr height="25">
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc;"> xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;"> xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
<td style="text-align: center; vertical-align: top; border: 1px solid #ccc; word-wrap: break-word; word-break: break-all;">xxxxxxxxxxxx</td>
</tr>
<tr>
<td style="text-align: center; border: 1px solid #ccc;"><b>Total:</b></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;">xxxxxxxxxxxx</td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;"></td>
<td style="text-align: center; border: 1px solid #ccc;">xxxxxxxxxxxx</td>
</tr>
<tr height="25">
<td colspan="8" style="word-wrap: break-word; word-break: break-all;">
Remark:  1.Once received the goods, please sign on the invoice and packing list and send back the scan copy for record, if we didn't receive any feedback with in 3 days we will not entertain any claim regarding this shipment.
</td>
</tr>
<tr>
<td colspan="8">
2.All bank fees are the responsibility of the customer.
</td>
</tr>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #ccc;">Bank Information</td>
<td colspan="7"></td>
</tr>
<tr>
<td>Bank Name</td>
<td colspan="7">HSBC Hong Kong</td>
</tr>
<tr>
<td>Bank address</td>
<td colspan="7">1 Queen's Road Central, Hong Kong</td>
</tr>
<tr>
<td>Swift Code</td>
<td colspan="7">HSBCHKHHHKH</td>
</tr>
<tr>
<td>Company Name</td>
<td colspan="7">SEMOUR ELECTRONICS CO., LIMITED</td>
</tr>
<tr>
<td>Account No</td>
<td colspan="7">819-847187-838</td>
</tr>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td style="border-bottom: 1px solid #ccc;">Terms &#38; Conditions</td>
<td colspan="7"></td>
</tr>
<tr>
<td colspan="8">
1.Your order is NCNR.
</td>
</tr>
<tr>
<td colspan="8">
2.All Claims of shortage or shipment errors or shipment damage must be made within 7 days of after delivery.
</td>
</tr>
<tr>
<td colspan="8">
3.Our liability shall be limited to the invoiced value of the materials or its replacement.
</td>
</tr>
<tr height="25">
<td colspan="8" style="word-wrap: break-word; word-break: break-all;">
4.Parts are warranty one month form, fit, and function guarantee. All returns must be authorized by our sales department within one month of receipts of shipment.
</td>
</tr>
<tr>
<td colspan="8">
5.VAT and Bank transfer charger is excluded in the invoice amount. Buyer will be responsible for TAX and Bank Charges if there is any.
</td>
</tr>
</tbody>
</table>
\ No newline at end of file
...@@ -35,4 +35,5 @@ return array( ...@@ -35,4 +35,5 @@ return array(
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
'044fc72df35e84c745ee0d4120dc15d2' => $vendorDir . '/dcat/laravel-admin/src/Support/helpers.php', '044fc72df35e84c745ee0d4120dc15d2' => $vendorDir . '/dcat/laravel-admin/src/Support/helpers.php',
'b670c7ffff63265cc064eb6fd1051ae1' => $vendorDir . '/mosiboom/dcat-iframe-tab/src/helpers.php', 'b670c7ffff63265cc064eb6fd1051ae1' => $vendorDir . '/mosiboom/dcat-iframe-tab/src/helpers.php',
'b4e3f29b106af37a2bb239f73cdf68c7' => $baseDir . '/app/helpers.php',
); );
...@@ -36,6 +36,7 @@ class ComposerStaticInit14b314507a533a1b9e8248f4361c62bf ...@@ -36,6 +36,7 @@ class ComposerStaticInit14b314507a533a1b9e8248f4361c62bf
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
'044fc72df35e84c745ee0d4120dc15d2' => __DIR__ . '/..' . '/dcat/laravel-admin/src/Support/helpers.php', '044fc72df35e84c745ee0d4120dc15d2' => __DIR__ . '/..' . '/dcat/laravel-admin/src/Support/helpers.php',
'b670c7ffff63265cc064eb6fd1051ae1' => __DIR__ . '/..' . '/mosiboom/dcat-iframe-tab/src/helpers.php', 'b670c7ffff63265cc064eb6fd1051ae1' => __DIR__ . '/..' . '/mosiboom/dcat-iframe-tab/src/helpers.php',
'b4e3f29b106af37a2bb239f73cdf68c7' => __DIR__ . '/../..' . '/app/helpers.php',
); );
public static $prefixLengthsPsr4 = array ( public static $prefixLengthsPsr4 = array (
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment