fix: 更新商品代號驗證規則為 2-8 碼
1. ProductImport.php: 匯入規則調整 2. ProductController.php: 新增/編輯 API 規則調整 3. UI: 匯入與編輯視窗提示更新
This commit is contained in:
@@ -114,7 +114,7 @@ class ProductController extends Controller
|
|||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
'code' => 'required|string|min:1|max:5|unique:products,code',
|
'code' => 'required|string|min:2|max:8|unique:products,code',
|
||||||
'barcode' => 'required|string|unique:products,barcode',
|
'barcode' => 'required|string|unique:products,barcode',
|
||||||
'name' => 'required|string|max:255',
|
'name' => 'required|string|max:255',
|
||||||
'category_id' => 'required|exists:categories,id',
|
'category_id' => 'required|exists:categories,id',
|
||||||
@@ -127,8 +127,8 @@ class ProductController extends Controller
|
|||||||
'purchase_unit_id' => 'nullable|exists:units,id',
|
'purchase_unit_id' => 'nullable|exists:units,id',
|
||||||
], [
|
], [
|
||||||
'code.required' => '商品代號為必填',
|
'code.required' => '商品代號為必填',
|
||||||
'code.max' => '商品代號最多 5 碼',
|
'code.max' => '商品代號最多 8 碼',
|
||||||
'code.min' => '商品代號最少 1 碼',
|
'code.min' => '商品代號最少 2 碼',
|
||||||
'code.unique' => '商品代號已存在',
|
'code.unique' => '商品代號已存在',
|
||||||
'barcode.required' => '條碼編號為必填',
|
'barcode.required' => '條碼編號為必填',
|
||||||
'barcode.unique' => '條碼編號已存在',
|
'barcode.unique' => '條碼編號已存在',
|
||||||
@@ -153,7 +153,7 @@ class ProductController extends Controller
|
|||||||
public function update(Request $request, Product $product)
|
public function update(Request $request, Product $product)
|
||||||
{
|
{
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
'code' => 'required|string|min:1|max:5|unique:products,code,' . $product->id,
|
'code' => 'required|string|min:2|max:8|unique:products,code,' . $product->id,
|
||||||
'barcode' => 'required|string|unique:products,barcode,' . $product->id,
|
'barcode' => 'required|string|unique:products,barcode,' . $product->id,
|
||||||
'name' => 'required|string|max:255',
|
'name' => 'required|string|max:255',
|
||||||
'category_id' => 'required|exists:categories,id',
|
'category_id' => 'required|exists:categories,id',
|
||||||
@@ -165,8 +165,8 @@ class ProductController extends Controller
|
|||||||
'purchase_unit_id' => 'nullable|exists:units,id',
|
'purchase_unit_id' => 'nullable|exists:units,id',
|
||||||
], [
|
], [
|
||||||
'code.required' => '商品代號為必填',
|
'code.required' => '商品代號為必填',
|
||||||
'code.max' => '商品代號最多 5 碼',
|
'code.max' => '商品代號最多 8 碼',
|
||||||
'code.min' => '商品代號最少 1 碼',
|
'code.min' => '商品代號最少 2 碼',
|
||||||
'code.unique' => '商品代號已存在',
|
'code.unique' => '商品代號已存在',
|
||||||
'barcode.required' => '條碼編號為必填',
|
'barcode.required' => '條碼編號為必填',
|
||||||
'barcode.unique' => '條碼編號已存在',
|
'barcode.unique' => '條碼編號已存在',
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class ProductImport implements ToModel, WithHeadingRow, WithValidation, WithMapp
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'商品代號' => ['required', 'string', 'min:1', 'max:5', 'unique:products,code'],
|
'商品代號' => ['required', 'string', 'min:2', 'max:8', 'unique:products,code'],
|
||||||
'條碼' => ['required', 'string', 'unique:products,barcode'],
|
'條碼' => ['required', 'string', 'unique:products,barcode'],
|
||||||
'商品名稱' => ['required', 'string'],
|
'商品名稱' => ['required', 'string'],
|
||||||
'類別名稱' => ['required', function($attribute, $value, $fail) {
|
'類別名稱' => ['required', function($attribute, $value, $fail) {
|
||||||
|
|||||||
@@ -160,8 +160,8 @@ export default function ProductDialog({
|
|||||||
id="code"
|
id="code"
|
||||||
value={data.code}
|
value={data.code}
|
||||||
onChange={(e) => setData("code", e.target.value)}
|
onChange={(e) => setData("code", e.target.value)}
|
||||||
placeholder="例:A1 (最多2碼)"
|
placeholder="例:A1 (2-8碼)"
|
||||||
maxLength={2}
|
maxLength={8}
|
||||||
className={errors.code ? "border-red-500" : ""}
|
className={errors.code ? "border-red-500" : ""}
|
||||||
/>
|
/>
|
||||||
{errors.code && <p className="text-sm text-red-500">{errors.code}</p>}
|
{errors.code && <p className="text-sm text-red-500">{errors.code}</p>}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ export default function ProductImportDialog({ open, onOpenChange }: ProductImpor
|
|||||||
<AccordionContent>
|
<AccordionContent>
|
||||||
<div className="text-sm text-gray-600 space-y-2 pb-2 pl-6">
|
<div className="text-sm text-gray-600 space-y-2 pb-2 pl-6">
|
||||||
<ul className="list-disc space-y-1">
|
<ul className="list-disc space-y-1">
|
||||||
<li><span className="font-medium text-gray-700">必填欄位</span>:商品代號 (1-5 碼)、條碼、商品名稱、類別名稱、基本單位。</li>
|
<li><span className="font-medium text-gray-700">必填欄位</span>:商品代號 (2-8 碼)、條碼、商品名稱、類別名稱、基本單位。</li>
|
||||||
<li><span className="font-medium text-gray-700">唯一性</span>:商品代號與條碼不可與現有資料重複。</li>
|
<li><span className="font-medium text-gray-700">唯一性</span>:商品代號與條碼不可與現有資料重複。</li>
|
||||||
<li><span className="font-medium text-gray-700">自動關聯</span>:類別與單位請填寫系統當前存在的「名稱」(如:飲品、瓶)。</li>
|
<li><span className="font-medium text-gray-700">自動關聯</span>:類別與單位請填寫系統當前存在的「名稱」(如:飲品、瓶)。</li>
|
||||||
<li><span className="font-medium text-gray-700">大單位</span>:若填寫大單位,則「換算率」為必填(需大於 0)。</li>
|
<li><span className="font-medium text-gray-700">大單位</span>:若填寫大單位,則「換算率」為必填(需大於 0)。</li>
|
||||||
|
|||||||
Reference in New Issue
Block a user