snow hace 4 meses
padre
commit
f83297ba3e
Se han modificado 87 ficheros con 1918 adiciones y 208 borrados
  1. 0 0
      dist/assets/BaseForm.0695cc.js
  2. 0 0
      dist/assets/BaseForm.4fc96e.js
  3. 0 0
      dist/assets/BaseForm.b52127.js
  4. 0 0
      dist/assets/ChildGoodEditModal.266623.js
  5. 0 0
      dist/assets/ChildGoodEditModal.6d23b8.js
  6. 1 1
      dist/assets/InvoiceTitle.7eecae.js
  7. 1 1
      dist/assets/InvoiceTitle.9ee27f.js
  8. 0 1
      dist/assets/basic-descriptions.26eb799a.js
  9. 1 0
      dist/assets/basic-descriptions.e5f4d3ab.js
  10. 0 0
      dist/assets/calc.9fbeadc4.js
  11. 0 0
      dist/assets/detail.0d56b7.js
  12. 0 0
      dist/assets/detail.295245.js
  13. 0 0
      dist/assets/detail.344ce8.js
  14. 0 0
      dist/assets/detail.47635f.js
  15. 0 0
      dist/assets/detail.811938.js
  16. 1 1
      dist/assets/detail.c73fd2.js
  17. 1 1
      dist/assets/detail.f3b08e.js
  18. 0 0
      dist/assets/index.035675.js
  19. 0 0
      dist/assets/index.1219f2.js
  20. 0 0
      dist/assets/index.1ddafc.js
  21. 0 0
      dist/assets/index.29ade6.js
  22. 0 0
      dist/assets/index.303734.js
  23. 0 0
      dist/assets/index.4cf9ee.js
  24. 0 0
      dist/assets/index.52bb3f.js
  25. 0 0
      dist/assets/index.5ab722.js
  26. 0 0
      dist/assets/index.669119.js
  27. 0 0
      dist/assets/index.740cb1.js
  28. 0 0
      dist/assets/index.7a0f8c.js
  29. 0 0
      dist/assets/index.83e20c.js
  30. 0 0
      dist/assets/index.88cf8b.js
  31. 0 0
      dist/assets/index.91c8b9.js
  32. 1 1
      dist/assets/index.952d47b4.js
  33. 0 0
      dist/assets/index.9ce48d0a.js
  34. 0 0
      dist/assets/index.9fb413.js
  35. 0 0
      dist/assets/index.a9ff40.js
  36. 0 0
      dist/assets/index.ae5395.js
  37. 0 0
      dist/assets/index.bb93f8.js
  38. 0 0
      dist/assets/index.ccc514.js
  39. 0 0
      dist/assets/index.d63d18.js
  40. 0 0
      dist/assets/index.da6cf9.js
  41. 0 0
      dist/assets/index.js
  42. 0 0
      dist/assets/motion.2df3b996.js
  43. 0 0
      dist/assets/phone.9e1123.js
  44. 1 1
      dist/assets/qrCode.be32d8.js
  45. 0 0
      dist/assets/regist.bfca82.js
  46. 0 0
      dist/assets/rule.2ebb92c5.js
  47. 1 0
      dist/assets/shared.456185fd.js
  48. 0 1
      dist/assets/shared.4cc58c00.js
  49. 0 0
      dist/assets/update.2f876b.js
  50. 0 0
      dist/assets/useDetail.b1c1d9df.js
  51. 0 0
      dist/assets/verifyCode.d9a5005d.js
  52. 1 0
      src/components/BasicDescriptions/src/basic-descriptions.tsx
  53. 1 1
      src/components/BasicDescriptions/src/types.ts
  54. 2 3
      src/store/modules/user.ts
  55. 252 0
      src/views/invoiceInOut/adjustOrder/components/NotOrderImportModal/columns-config.ts
  56. 365 0
      src/views/invoiceInOut/adjustOrder/components/NotOrderImportModal/index.vue
  57. 236 0
      src/views/invoiceInOut/adjustOrder/components/OrderImportModal/columns-config.ts
  58. 354 0
      src/views/invoiceInOut/adjustOrder/components/OrderImportModal/index.vue
  59. 18 0
      src/views/invoiceInOut/adjustOrder/components/rules.ts
  60. 7 0
      src/views/invoiceInOut/adjustOrder/config/columns.ts
  61. 30 0
      src/views/invoiceInOut/adjustOrder/config/content.config.ts
  62. 0 0
      src/views/invoiceInOut/adjustOrder/config/modal.config.ts
  63. 33 0
      src/views/invoiceInOut/adjustOrder/config/search.config.ts
  64. 84 0
      src/views/invoiceInOut/adjustOrder/detail.vue
  65. 37 0
      src/views/invoiceInOut/adjustOrder/index.vue
  66. 0 0
      src/views/invoiceInOut/adjustOrder/调整单
  67. 3 1
      src/views/invoiceInOut/inOutManager/components/ChooseGoodModal/config/content.config.ts
  68. 1 2
      src/views/invoiceInOut/inOutManager/components/ChooseGoodModal/index.vue
  69. 0 2
      src/views/invoiceInOut/inOutManager/components/OrderImportModal/index.vue
  70. 1 1
      src/views/invoiceInOut/inOutManager/config/content.config.ts
  71. 0 40
      src/views/invoiceInOut/inOutManager/config/modal.config.ts
  72. 36 9
      src/views/invoiceInOut/inOutManager/detail.vue
  73. 11 1
      src/views/invoiceInOut/inOutManager/index.vue
  74. 34 37
      src/views/invoiceInOut/inventoryCheck/components/BaseForm.vue
  75. 43 0
      src/views/invoiceInOut/inventoryCheck/components/BatchCreateModal/columns-config.ts
  76. 243 0
      src/views/invoiceInOut/inventoryCheck/components/BatchCreateModal/index.vue
  77. 3 2
      src/views/invoiceInOut/inventoryCheck/components/ChooseGoodModal/config/content.config.ts
  78. 7 2
      src/views/invoiceInOut/inventoryCheck/components/ChooseGoodModal/index.vue
  79. 0 18
      src/views/invoiceInOut/inventoryCheck/components/rules.ts
  80. 13 23
      src/views/invoiceInOut/inventoryCheck/components/shared.ts
  81. 2 3
      src/views/invoiceInOut/inventoryCheck/config/columns.ts
  82. 19 1
      src/views/invoiceInOut/inventoryCheck/index.vue
  83. 1 1
      src/views/invoiceInOut/productManager/config/content.config.ts
  84. 0 40
      src/views/invoiceInOut/productManager/config/modal.config.ts
  85. 18 1
      src/views/invoiceInOut/provisionOut/config/columns.ts
  86. 3 4
      src/views/invoiceInOut/provisionOut/config/content.config.ts
  87. 52 8
      src/views/invoiceInOut/provisionOut/detail.vue

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/BaseForm.0695cc.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/BaseForm.4fc96e.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/BaseForm.b52127.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/ChildGoodEditModal.266623.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/ChildGoodEditModal.6d23b8.js


+ 1 - 1
dist/assets/InvoiceTitle.7eecae.js

@@ -1 +1 @@
-import{_ as o,d as s,o as i,G as n,l as t,a as r}from"./index.js";import{i as a}from"./shared.4cc58c00.js";import{B as c}from"./basic-descriptions.26eb799a.js";const l=s({__name:"InvoiceTitle",props:{detail:{type:Object,required:!0}},setup(p){return(e,m)=>Object.keys(e.detail).length!==0?(i(),n(t(c),{key:0,"px-8":"","pb-5":"",data:e.detail,columns:t(a),"col-number":1,"label-width":"130"},null,8,["data","columns"])):r("v-if",!0)}});var f=o(l,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/inventoryCheck/components/InvoiceTitle.vue"]]);export{f as default};
+import{_ as o,d as s,o as i,G as n,l as t,a as r}from"./index.js";import{i as a}from"./shared.456185fd.js";import{B as c}from"./basic-descriptions.e5f4d3ab.js";const l=s({__name:"InvoiceTitle",props:{detail:{type:Object,required:!0}},setup(p){return(e,m)=>Object.keys(e.detail).length!==0?(i(),n(t(c),{key:0,"px-8":"","pb-5":"",data:e.detail,columns:t(a),"col-number":1,"label-width":"130"},null,8,["data","columns"])):r("v-if",!0)}});var f=o(l,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/inventoryCheck/components/InvoiceTitle.vue"]]);export{f as default};

+ 1 - 1
dist/assets/InvoiceTitle.9ee27f.js

@@ -1 +1 @@
-import{_ as r,d as _,o as l,G as d,l as s,a as u}from"./index.js";import{B as p}from"./basic-descriptions.26eb799a.js";const y=o=>{const{company_address:e,mobile:i,company_license:n,bank_name:t,bankNo:c,company_name:a}=o;return{invoice_addr:e,invoice_mobile:i,invoice_code:n,invoice_bank:t,invoice_bankNo:c,invoice_title:a}},g=o=>{const{invoice_addr:e,invoice_mobile:i,invoice_code:n,invoice_bank:t,invoice_bankNo:c,invoice_title:a}=o;return{invoice_code:n,invoice_title:a,addrAndmobile:e+" "+i,bankAndBankNo:t+" "+c}},v=[{label:"\u62AC\u5934",span:24,field:"invoice_title"},{label:"\u7EB3\u7A0E\u4EBA\u8BC6\u522B\u53F7",span:24,field:"invoice_code"}],B=()=>({buyer_code:"",buyer_name:"",seller_code:"",seller_name:"",good_source:"",good_code:"",good_type:"",is_combind:"",inv_good_name:"",subunit_price:"",basic_status:"",unit_price:"",goodName:"",skuCode:"",cat_code:"",inv_type:"",cat_tax:"",spec:"",unit:"",unit_weight:"",spectral:"",childArr:[]}),m=_({__name:"InvoiceTitle",props:{detail:{type:Object,required:!0}},setup(o){return(e,i)=>Object.keys(e.detail).length!==0?(l(),d(s(p),{key:0,"px-8":"","pb-5":"",data:e.detail,columns:s(v),"col-number":1,"label-width":"130"},null,8,["data","columns"])):u("v-if",!0)}});var b=r(m,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/productManager/components/InvoiceTitle.vue"]]),I=Object.freeze(Object.defineProperty({__proto__:null,default:b},Symbol.toStringTag,{value:"Module"}));export{b as I,g as a,y as b,B as c,I as d};
+import{_ as r,d as _,o as l,G as d,l as s,a as u}from"./index.js";import{B as p}from"./basic-descriptions.e5f4d3ab.js";const y=o=>{const{company_address:e,mobile:i,company_license:n,bank_name:t,bankNo:c,company_name:a}=o;return{invoice_addr:e,invoice_mobile:i,invoice_code:n,invoice_bank:t,invoice_bankNo:c,invoice_title:a}},g=o=>{const{invoice_addr:e,invoice_mobile:i,invoice_code:n,invoice_bank:t,invoice_bankNo:c,invoice_title:a}=o;return{invoice_code:n,invoice_title:a,addrAndmobile:e+" "+i,bankAndBankNo:t+" "+c}},v=[{label:"\u62AC\u5934",span:24,field:"invoice_title"},{label:"\u7EB3\u7A0E\u4EBA\u8BC6\u522B\u53F7",span:24,field:"invoice_code"}],B=()=>({buyer_code:"",buyer_name:"",seller_code:"",seller_name:"",good_source:"",good_code:"",good_type:"",is_combind:"",inv_good_name:"",subunit_price:"",basic_status:"",unit_price:"",goodName:"",skuCode:"",cat_code:"",inv_type:"",cat_tax:"",spec:"",unit:"",unit_weight:"",spectral:"",childArr:[]}),m=_({__name:"InvoiceTitle",props:{detail:{type:Object,required:!0}},setup(o){return(e,i)=>Object.keys(e.detail).length!==0?(l(),d(s(p),{key:0,"px-8":"","pb-5":"",data:e.detail,columns:s(v),"col-number":1,"label-width":"130"},null,8,["data","columns"])):u("v-if",!0)}});var b=r(m,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/productManager/components/InvoiceTitle.vue"]]),I=Object.freeze(Object.defineProperty({__proto__:null,default:b},Symbol.toStringTag,{value:"Module"}));export{b as I,g as a,y as b,B as c,I as d};

+ 0 - 1
dist/assets/basic-descriptions.26eb799a.js

@@ -1 +0,0 @@
-import{d as p,j as t,az as c,M as n,aA as m,r as b,J as f}from"./index.js";const y={title:{type:String},colNumber:{type:Number,default:24},columns:{type:Array},data:{type:Object},labelWidth:{type:String},show:{type:Boolean,default:!0}};const h=p({name:"BasicDescriptions",props:y,setup(l,{slots:s}){return()=>{const{title:r,colNumber:i,columns:d,data:a,labelWidth:o,show:u}=l;return u?t(m,{title:r,border:!0,column:i,size:"small"},{default:()=>[d.map(e=>t(c,{label:e.label,key:e.field,span:e.span?e.span:6},{default:()=>[t("div",{class:"col-item"},[t("p",{class:"col-label",style:{width:o+"px"}},[e.label]),t("p",{class:"col-value"},[e.render?e.render(a[e.field],a):a[e.field],n(" "),e.append||""])])]})),s.custom&&s.custom(l.data)]}):t("div",{style:{display:"flex",width:"100%",justifyContent:"center",flexDirection:"column",alignItems:"center"}},[t(b("el-button"),{text:!0,size:"large",icon:f("warning-filled"),disabled:!0},null),t("span",null,[n("\u6682\u65E0\u6570\u636E")])])}}});export{h as B};

+ 1 - 0
dist/assets/basic-descriptions.e5f4d3ab.js

@@ -0,0 +1 @@
+import{d as p,j as t,aL as c,M as n,aM as m,r as b,J as f}from"./index.js";const y={title:{type:String},colNumber:{type:Number,default:24},columns:{type:Array},data:{type:Object},labelWidth:{type:String},show:{type:Boolean,default:!0}};const g=p({name:"BasicDescriptions",props:y,setup(l,{slots:s}){return()=>{const{title:r,colNumber:i,columns:o,data:a,labelWidth:d,show:u}=l;return u?t(m,{title:r,border:!0,column:i,size:"small"},{default:()=>[o.map(e=>t(c,{label:e.label,key:e.field,span:e.span?e.span:6,style:{marginBottom:"-1px"}},{default:()=>[t("div",{class:"col-item"},[t("p",{class:"col-label",style:{width:d+"px"}},[e.label]),t("p",{class:"col-value"},[e.render?e.render(a[e.field],a):a[e.field],n(" "),e.append||""])])]})),s.custom&&s.custom(l.data)]}):t("div",{style:{display:"flex",width:"100%",justifyContent:"center",flexDirection:"column",alignItems:"center"}},[t(b("el-button"),{text:!0,size:"large",icon:f("warning-filled"),disabled:!0},null),t("span",null,[n("\u6682\u65E0\u6570\u636E")])])}}});export{g as B};

+ 0 - 0
dist/assets/calc.c9b7caaa.js → dist/assets/calc.9fbeadc4.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/detail.0d56b7.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/detail.295245.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/detail.344ce8.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/detail.47635f.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/detail.811938.js


+ 1 - 1
dist/assets/detail.c73fd2.js

@@ -1 +1 @@
-import{_ as E,d as b,aK as g,r as t,aj as D,H as B,l as e,o as n,c as T,j as o,C as s,a6 as V,G as d,a as p}from"./index.js";import{B as h}from"./basic-descriptions.26eb799a.js";import{u as x}from"./useDetail.3f98fa01.js";import j from"./BaseForm.b52127.js";import{g as w,a as y}from"./ChildGoodEditModal.266623.js";import{a as I}from"./index.46d1f9c8.js";import"./status.915de772.js";import"./InvoiceTitle.9ee27f.js";import"./index.91c8b9.js";const N={class:"padding__container"},H=b({__name:"detail",setup(P){const a=g(),{title:i,isDetail:r,collapses:l,id:m}=x({baseName:"\u5546\u54C1",collapseLen:2});return m.value&&a.run(I({id:m.value})),(U,c)=>{const u=t("ElCollapseItem"),_=t("ElCollapse"),f=t("ElTabPane"),v=t("ElTabs"),C=D("loading");return B((n(),T("div",N,[o(v,null,{default:s(()=>[o(f,{label:e(i)},{default:s(()=>[o(_,{modelValue:e(l),"onUpdate:modelValue":c[0]||(c[0]=k=>V(l)?l.value=k:null)},{default:s(()=>[o(u,{title:e(i),name:"1"},{default:s(()=>[e(r)?p("v-if",!0):(n(),d(j,{key:0})),e(r)&&e(a).data?(n(),d(e(h),{key:1,columns:e(a).data.is_combind=="1"?e(w):e(y),data:e(a).data},null,8,["columns","data"])):p("v-if",!0)]),_:1},8,["title"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])),[[C,e(a).loading]])}}});var A=E(H,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/productManager/detail.vue"]]);export{A as default};
+import{_ as E,d as b,aV as g,r as t,aj as D,H as B,l as e,o as n,c as T,j as o,C as s,a6 as V,G as d,a as p}from"./index.js";import{B as h}from"./basic-descriptions.e5f4d3ab.js";import{u as x}from"./useDetail.b1c1d9df.js";import j from"./BaseForm.b52127.js";import{g as w,a as y}from"./ChildGoodEditModal.266623.js";import{a as I}from"./index.952d47b4.js";import"./status.915de772.js";import"./InvoiceTitle.9ee27f.js";import"./index.91c8b9.js";const N={class:"padding__container"},H=b({__name:"detail",setup(P){const a=g(),{title:i,isDetail:r,collapses:l,id:m}=x({baseName:"\u5546\u54C1",collapseLen:2});return m.value&&a.run(I({id:m.value})),(U,c)=>{const u=t("ElCollapseItem"),_=t("ElCollapse"),f=t("ElTabPane"),v=t("ElTabs"),C=D("loading");return B((n(),T("div",N,[o(v,null,{default:s(()=>[o(f,{label:e(i)},{default:s(()=>[o(_,{modelValue:e(l),"onUpdate:modelValue":c[0]||(c[0]=k=>V(l)?l.value=k:null)},{default:s(()=>[o(u,{title:e(i),name:"1"},{default:s(()=>[e(r)?p("v-if",!0):(n(),d(j,{key:0})),e(r)&&e(a).data?(n(),d(e(h),{key:1,columns:e(a).data.is_combind=="1"?e(w):e(y),data:e(a).data},null,8,["columns","data"])):p("v-if",!0)]),_:1},8,["title"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])),[[C,e(a).loading]])}}});var J=E(H,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/productManager/detail.vue"]]);export{J as default};

+ 1 - 1
dist/assets/detail.f3b08e.js

@@ -1 +1 @@
-import{_ as E,d as b,aK as D,r as t,aj as g,H as B,l as e,o as n,c as T,j as o,C as s,a6 as h,G as d,a as p}from"./index.js";import{g as V,a as x}from"./ChildGoodEditModal.6d23b8.js";import{B as y}from"./basic-descriptions.26eb799a.js";import{u as j}from"./useDetail.3f98fa01.js";import w from"./BaseForm.0695cc.js";import{a as I}from"./index.46d1f9c8.js";import"./status.915de772.js";import"./shared.4cc58c00.js";import"./index.035675.js";const N={class:"padding__container"},H=b({__name:"detail",setup(P){const a=D(),{title:i,isDetail:r,collapses:l,id:m}=j({baseName:"\u76D8\u70B9",collapseLen:2});return m.value&&a.run(I({id:m.value})),(U,c)=>{const u=t("ElCollapseItem"),_=t("ElCollapse"),f=t("ElTabPane"),v=t("ElTabs"),C=g("loading");return B((n(),T("div",N,[o(v,null,{default:s(()=>[o(f,{label:e(i)},{default:s(()=>[o(_,{modelValue:e(l),"onUpdate:modelValue":c[0]||(c[0]=k=>h(l)?l.value=k:null)},{default:s(()=>[o(u,{title:e(i),name:"1"},{default:s(()=>[e(r)?p("v-if",!0):(n(),d(w,{key:0})),e(r)&&e(a).data?(n(),d(e(y),{key:1,columns:e(a).data.is_combind=="1"?e(V):e(x),data:e(a).data},null,8,["columns","data"])):p("v-if",!0)]),_:1},8,["title"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])),[[C,e(a).loading]])}}});var J=E(H,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/inventoryCheck/detail.vue"]]);export{J as default};
+import{_ as E,d as b,aV as D,r as t,aj as g,H as B,l as e,o as n,c as T,j as o,C as s,a6 as V,G as d,a as p}from"./index.js";import{g as h,a as x}from"./ChildGoodEditModal.6d23b8.js";import{B as y}from"./basic-descriptions.e5f4d3ab.js";import{u as j}from"./useDetail.b1c1d9df.js";import w from"./BaseForm.4fc96e.js";import{a as I}from"./index.952d47b4.js";import"./status.915de772.js";import"./shared.456185fd.js";import"./index.bb93f8.js";const N={class:"padding__container"},H=b({__name:"detail",setup(P){const a=D(),{title:i,isDetail:r,collapses:l,id:m}=j({baseName:"\u76D8\u70B9",collapseLen:2});return m.value&&a.run(I({id:m.value})),(U,c)=>{const u=t("ElCollapseItem"),_=t("ElCollapse"),f=t("ElTabPane"),v=t("ElTabs"),C=g("loading");return B((n(),T("div",N,[o(v,null,{default:s(()=>[o(f,{label:e(i)},{default:s(()=>[o(_,{modelValue:e(l),"onUpdate:modelValue":c[0]||(c[0]=k=>V(l)?l.value=k:null)},{default:s(()=>[o(u,{title:e(i),name:"1"},{default:s(()=>[e(r)?p("v-if",!0):(n(),d(w,{key:0})),e(r)&&e(a).data?(n(),d(e(y),{key:1,columns:e(a).data.is_combind=="1"?e(h):e(x),data:e(a).data},null,8,["columns","data"])):p("v-if",!0)]),_:1},8,["title"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])),[[C,e(a).loading]])}}});var K=E(H,[["__file","C:/Users/89793/Desktop/projects/ticket-system/src/views/invoiceInOut/inventoryCheck/detail.vue"]]);export{K as default};

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.035675.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.1219f2.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.1ddafc.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.29ade6.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.303734.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.4cf9ee.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.52bb3f.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.5ab722.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.669119.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.740cb1.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.7a0f8c.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.83e20c.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.88cf8b.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.91c8b9.js


+ 1 - 1
dist/assets/index.46d1f9c8.js → dist/assets/index.952d47b4.js

@@ -1 +1 @@
-import{w as x,aE as A,ax as n,a0 as q}from"./index.js";const h=t=>t?A(t).format("YYYY-MM-DD"):"";function I(t,d,l,_){const c=x(null);function m(a){var f;const{result:i,deleteProps:r}=t?t(a):{result:{},deleteProps:[]},e={...a,...i};if(l){const{formItems:u}=l;u.forEach(g=>{const{field:s,type_field:p,otherOptions:v={},type:P}=g,{startProp:E,endProp:R}=v;(E||R)&&e[s]&&(e[E]=P==="date_picker"?h(e[s][0]):e[s][0],e[R]=P==="date_picker"?h(e[s][1]):e[s][1],delete e[s]),p&&(e[e[p]]=e[s],delete e[s],delete e[p])})}r.forEach(u=>delete e[u]),(f=c.value)==null||f.getPageData(e)}function D(a){var r;const{result:i}=t?t(a):{result:{}};(r=c.value)==null||r.getPageData(_?{}:i),d&&d()}return{pageContentRef:c,handleSearchClick:m,handleResetClick:D}}const{VITE_PROXY_DOMAIN_REAL:L,VITE_PROXY_USER_REAL:y,VITE_WORKORDER_REAL:O}=q(),Y=y+"/admin/",o=O,S=t=>n.request("post",`${o}/cxinv/FinancialProducts/create`,{data:t}),T=t=>n.request("post",`${o}/cxinv/FinancialProducts/list`,{data:t}),V=t=>n.request("post",`${o}/cxinv/FinancialProducts/info`,{data:t}),w=t=>n.request("post",`${o}/cxinv/FinancialProducts/status`,{data:t}),F=t=>n.request("post",`${o}/user/TaxCategory/list`,{data:t}),M=t=>n.request("post",`${Y}companylist`,{data:{noRela:!0,...t}});export{V as a,M as b,S as c,w as d,F as e,T as h,I as u};
+import{w as x,aN as A,ax as n,a0 as q}from"./index.js";const E=t=>t?A(t).format("YYYY-MM-DD"):"";function I(t,d,l,_){const c=x(null);function m(a){var f;const{result:i,deleteProps:r}=t?t(a):{result:{},deleteProps:[]},e={...a,...i};if(l){const{formItems:u}=l;u.forEach(g=>{const{field:s,type_field:p,otherOptions:v={},type:P}=g,{startProp:R,endProp:h}=v;(R||h)&&e[s]&&(e[R]=P==="date_picker"?E(e[s][0]):e[s][0],e[h]=P==="date_picker"?E(e[s][1]):e[s][1],delete e[s]),p&&(e[e[p]]=e[s],delete e[s],delete e[p])})}r.forEach(u=>delete e[u]),(f=c.value)==null||f.getPageData(e)}function D(a){var r;const{result:i}=t?t(a):{result:{}};(r=c.value)==null||r.getPageData(_?{}:i),d&&d()}return{pageContentRef:c,handleSearchClick:m,handleResetClick:D}}const{VITE_PROXY_DOMAIN_REAL:L,VITE_PROXY_USER_REAL:y,VITE_WORKORDER_REAL:O}=q(),Y=y+"/admin/",o=O,S=t=>n.request("post",`${o}/cxinv/FinancialProducts/create`,{data:t}),T=t=>n.request("post",`${o}/cxinv/FinancialProducts/list`,{data:t}),V=t=>n.request("post",`${o}/cxinv/FinancialProducts/info`,{data:t}),w=t=>n.request("post",`${o}/cxinv/FinancialProducts/status`,{data:t}),F=t=>n.request("post",`${o}/user/TaxCategory/list`,{data:t}),M=t=>n.request("post",`${Y}companylist`,{data:{noRela:!0,...t}});export{V as a,M as b,w as c,F as d,S as e,T as h,I as u};

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.9ce48d0a.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.9fb413.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.a9ff40.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.ae5395.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.bb93f8.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.ccc514.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.d63d18.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.da6cf9.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/index.js


+ 0 - 0
dist/assets/motion.80e6b129.js → dist/assets/motion.2df3b996.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/phone.9e1123.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
dist/assets/qrCode.be32d8.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/regist.bfca82.js


+ 0 - 0
dist/assets/rule.cf6a80fe.js → dist/assets/rule.2ebb92c5.js


+ 1 - 0
dist/assets/shared.456185fd.js

@@ -0,0 +1 @@
+const u=[{label:"\u62AC\u5934",span:24,field:"invoice_title"},{label:"\u7EB3\u7A0E\u4EBA\u8BC6\u522B\u53F7",span:24,field:"invoice_code"}],e=()=>({childArr:[],num:"",ykNum:"",result:"",month:""}),r={childArr:[{required:!0,message:"\u8BF7\u9009\u62E9\u5546\u54C1",trigger:"change"}],num:[{required:!0,message:"\u8BF7\u8F93\u5165\u76D8\u70B9\u6570\u91CF",trigger:"change"}],result:[{required:!0,message:"\u8BF7\u9009\u62E9\u7ED3\u679C\u7C7B\u578B",trigger:"change"}],month:[{required:!0,message:"\u8BF7\u9009\u62E9\u5165\u8D26\u6708\u4EFD",trigger:"change"}]};export{e as c,u as i,r};

+ 0 - 1
dist/assets/shared.4cc58c00.js

@@ -1 +0,0 @@
-const e=[{label:"\u62AC\u5934",span:24,field:"invoice_title"},{label:"\u7EB3\u7A0E\u4EBA\u8BC6\u522B\u53F7",span:24,field:"invoice_code"}],o=()=>({buyer_code:"",buyer_name:"",seller_code:"",seller_name:"",good_source:"",good_code:"",good_type:"",is_combind:"1",inv_good_name:"",subunit_price:"",basic_status:"",unit_price:"",goodName:"",skuCode:"",cat_code:"",inv_type:"",cat_tax:"",spec:"",unit:"",unit_weight:"",spectral:"",childArr:[]});export{o as c,e as i};

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/update.2f876b.js


+ 0 - 0
dist/assets/useDetail.3f98fa01.js → dist/assets/useDetail.b1c1d9df.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/assets/verifyCode.d9a5005d.js


+ 1 - 0
src/components/BasicDescriptions/src/basic-descriptions.tsx

@@ -19,6 +19,7 @@ const BasicDescriptions = defineComponent({
               label={col.label}
               key={col.field}
               span={col.span ? col.span : 6}
+              style={{ marginBottom: '-1px' }}
             >
               <div class="col-item">
                 <p class="col-label" style={{ width: labelWidth + 'px' }}>{col.label}</p>

+ 1 - 1
src/components/BasicDescriptions/src/types.ts

@@ -8,7 +8,7 @@ export const basicDescriptionsProps = {
     default: 24
   },
   columns: {
-    type: Array as PropType<Array<DescriptionColumn>>
+    type: Array as PropType<Array<any>>
   },
   data: {
     type: Object as PropType<any>

+ 2 - 3
src/store/modules/user.ts

@@ -158,9 +158,7 @@ export const useUserStore = defineStore({
       });
     },
     async updateUserVersion() {
-      const { code, data, message } = await httpUserInfo({
-        noRela: true
-      });
+      const { code, data } = await httpUserInfo({ noRela: true });
 
       this.info = data;
       if (Number(code) === 0) {
@@ -233,6 +231,7 @@ export const useUserStore = defineStore({
             createMenu('出入库管理', 'inOutManager', 'invoiceInOut/inOutManager'),
             createMenu('盘点', 'inventoryCheck', 'invoiceInOut/inventoryCheck'),
             createMenu('计提出库明细处理', 'provisionOut', 'invoiceInOut/provisionOut'),
+            createMenu('调整单', 'adjustOrder', 'invoiceInOut/adjustOrder'),
           ],
           message: '获取成功'
         }

+ 252 - 0
src/views/invoiceInOut/adjustOrder/components/NotOrderImportModal/columns-config.ts

@@ -0,0 +1,252 @@
+const initheaders = [
+  "买方公司编码",
+  "买方公司名称",
+  "卖方公司编码",
+  "卖方公司名称",
+  "对账编码",
+  "发票类型",
+  "发票代码",
+  "发票号码",
+  "发票税前金额",
+  "发票税后金额",
+  "开票日期",
+  "校验码"
+];
+
+export const mapProp = {
+  value0: "companyNo",
+  value1: "companyName",
+  value2: "supplierNo",
+  value3: "supplierName",
+  value4: "payNo",
+  value5: "invoiceType",
+  value6: "invoiceCode",
+  value7: "invoiceNumber",
+  value8: "inv_subtotal_amount",
+  value9: "inv_total",
+  value10: "open_time",
+  value11: "checkNumber"
+};
+
+export const requireHeaders = [];
+
+const columns = [
+  {
+    type: "index",
+    fixed: "left",
+    label: "序号",
+    width: "50"
+  },
+  {
+    label: '业务编号',
+    prop: 'TODO1',
+    minWidth: '100px'
+  },
+  {
+    label: '类型',
+    prop: 'TODO2',
+    minWidth: '100px'
+  },
+  {
+    label:'订单来源',
+    prop: 'TODO3',
+    minWidth: '100px'
+  },
+  {
+    label: '销售方公司纳税识别号',
+    prop: 'TODO4',
+    minWidth: '140px'
+  },
+  {
+    label: '销售方公司',
+    prop: 'TODO5',
+    minWidth: '100px'
+  },
+  {
+    label: '订单编号',
+    prop: 'TODO6',
+    minWidth: '120px'
+  },
+  {
+    label: '订单主单号',
+    prop: 'TODO7',
+    minWidth: '120px'
+  },
+  {
+    label: '商品编号',
+    prop: 'TODO8',
+    minWidth: '100px'
+  },
+  {
+    label: '商品名称',
+    prop: 'TODO9',
+    minWidth: '100px'
+  },
+  {
+    label: '单位',
+    prop: 'TODO10',
+    minWidth: '80px'
+  },
+  {
+    label: '商品数量',
+    prop: 'TODO11',
+    minWidth: '110px'
+  },
+  {
+    label: '商品数量',
+    prop: 'TODO11',
+    minWidth: '110px'
+  },
+  {
+    label:'商品单价',
+    prop: 'TODO12',
+    minWidth: '110px'
+  },
+  {
+    label: '订单总金额',
+    prop: 'TODO13',
+    minWidth: '110px'
+  },
+  {
+    label: '税目',
+    prop: 'TODO14',
+    minWidth: '80px'
+  },
+  {
+    label: '税目名称',
+    prop: 'TODO15',
+    minWidth: '100px'
+  },
+  {
+    label: '关联金额',
+    prop: 'TODO16',
+    minWidth: '100px'
+  },
+  {
+    label: '购买方公司名称',
+    prop: 'TODO17',
+    minWidth: '110px'
+  },
+  {
+    label: '购买方公司纳税识别号',
+    prop: 'TODO18',
+    minWidth: '140px'
+  },
+  {
+    label: '发票号码',
+    prop: 'TODO19',
+    minWidth: '100px'
+  },
+  {
+    label: '发票类型',
+    prop: 'TODO20',
+    minWidth: '100px'
+  },
+  {
+    label: '销售方公司名称',
+    prop: 'TODO21',
+    minWidth: '110px'
+  },
+  {
+    label: '销售方公司纳税号',
+    prop: 'TODO',
+    minWidth: '140px'
+  },
+  {
+    label: '发票明细ID',
+    prop: 'TODO',
+    minWidth: '110px'
+  },
+  {
+    label: '货物或应税劳务、服务名称',
+    prop: 'TODO',
+    minWidth: '200px'
+  },
+  {
+    label: '类目编号',
+    prop: 'TODO',
+    minWidth: '90px'
+  },
+  {
+    label: '规格型号',
+    prop: 'TODO',
+    minWidth: '110px'
+  },
+  {
+    label: '单位',
+    prop: 'TODO',
+    minWidth: '80px'
+  },
+  {
+    label: '数量',
+    prop: 'TODO',
+    minWidth: '80px'
+  },
+  {
+    label: '税前单价',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '税前总价',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '税率',
+    prop: 'TODO',
+    minWidth: '80px'
+  },
+  {
+    label: '税后单价',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '税后总额',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '类目编号状态',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '税率状态',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '备注',
+    prop: 'TODO',
+    minWidth: '80px'
+  },
+  {
+    label: '商品编号',
+    prop: 'TODO',
+    minWidth: '90px'
+  },
+  {
+    label: '操作数量',
+    prop: 'TODO',
+    minWidth: '90px'
+  },
+  {
+    label: '子商品编号',
+    prop: 'TODO',
+    minWidth: '100px'
+  },
+  {
+    label: '子商品操作数量',
+    prop: 'TODO',
+    minWidth: '110px'
+  }
+]
+
+
+const notOrderTemplate = [columns.slice(1).reduce((prev, current) => {
+  return {...prev, [current.label] : current.detaultData ? current.defaultData : ''}
+}, {})]
+
+export { initheaders, columns, notOrderTemplate };

+ 365 - 0
src/views/invoiceInOut/adjustOrder/components/NotOrderImportModal/index.vue

@@ -0,0 +1,365 @@
+<script setup lang="ts">
+import { ref, h } from "vue";
+import { ElButton, ElDialog, ElMessage,ElMessageBox } from "element-plus";
+import { execlUpload } from "/@/components/execlUpload";
+import { httpBatchAdd } from "/@/api/purchase/ticketReturn";
+import { useResponseHandle } from "/@/hooks";
+import { useCompany } from "/@/hooks/core/useCompany";
+import { cg_inv_type_list } from "/@/utils/status";
+import { useVModel } from "@vueuse/core";
+import dayjs from "dayjs"
+
+import {
+  initheaders,
+  columns,
+  mapProp,
+  requireHeaders
+} from "./columns-config";
+
+
+const loading = ref(false);
+const tableData = ref([]);
+
+const props = defineProps<{ visible: boolean }>()
+const emit = defineEmits(["onSuccess"]);
+
+const allTypes = cg_inv_type_list.map(({ label }) => label);
+const row = ref(1);
+
+const visible = useVModel(props, 'visible')
+
+const createInvErrorMessage = (row: string) =>
+  `导入数据第 ${row} 行 发票类型格式不正确,发票类型必须为${allTypes.join(",")}`;
+
+const { currentCompany } = useCompany();
+
+const responseHandle = useResponseHandle();
+
+const Uploadsuccess = ({ results, header }) => {
+  loading.value = true;
+  if (results.length === 0) {
+    ElMessage.error("表格无有效数据!");
+    loading.value = false;
+    return;
+  }
+
+  let headok = true;
+  if (header.length !== columns.length - 1) {
+    headok = false;
+  } else {
+    columns.slice(1).forEach((si, sii) => {
+      if (si.label !== header[sii]) {
+        headok = false;
+      }
+    });
+  }
+
+  if (!headok) {
+    ElMessage.error("表头与导入模板不匹配!");
+    loading.value = false;
+    return;
+  }
+
+  tableData.value = [];
+
+  for (const v1 of results) {
+    const b = Object.values(v1);
+    let model = {};
+    b.forEach((si, sii) => { model["value" + sii] = si + ""; });
+    tableData.value.push(model);
+    row.value = row.value + 1;
+  }
+
+    const data = [];
+   tableData.value.forEach((key, index) => {
+      const obj: Record<string, string> = {};
+
+      for (let i in key) {
+        const prop = mapProp[i];
+        const value = key[i];
+        obj[prop] = value;
+     }
+      
+      data.push(obj);
+    });
+
+
+    const typeErrors: string[] = [];
+    const checkErrors: string[] = [];
+    const codeErrors: string[] = [];
+    const numberErrors: string[] = [];
+    const priceErrors: string[] = [];
+    const fullyElectionicPriceErrors: string[] = [];
+
+    
+  const openDateErrors: string[] = [];
+  const now = dayjs(new Date()).format('YYYY-MM-DD');
+
+    data.forEach((row, index) => {
+      const source = row.invoiceType.trim();
+      const target = cg_inv_type_list.find(({ label }) => label === source);
+
+      if (!target) {
+        typeErrors.push(String(index + 1));
+      } else {
+        row.invoiceType = target.value;
+
+        if (
+          (target.value === "normal" || target.value === "electronic") &&
+          !row.checkNumber
+        ) {
+          checkErrors.push(String(index + 1));
+        }
+      }
+
+      const isFullyElectionic = row.invoiceType === 'fully_digitalized_special_electronic' || row.invoiceType === 'fully_digitalized_normal_electronic'
+
+      if(!row.open_time || (row.open_time && !dayjs(row.open_time).isSame(dayjs(now)) && !dayjs(row.open_time).isBefore(dayjs(now)))){
+        openDateErrors.push(String(index + 1))
+      }
+
+      const reg = /^\d+(\.\d+)?$/;
+
+      if (!reg.test(row.invoiceCode) && !isFullyElectionic) {
+        codeErrors.push(String(index + 1));
+      }
+
+      if (!reg.test(row.invoiceNumber)) {
+        numberErrors.push(String(index + 1));
+      }
+
+      if ((!reg.test(row.inv_subtotal_amount) || Number(row.inv_subtotal_amount) < 0) && !isFullyElectionic) {
+        priceErrors.push(String(index + 1));
+      }
+
+      if ((!reg.test(row.inv_total) || Number(row.inv_total) < 0) && isFullyElectionic) {
+        fullyElectionicPriceErrors.push(String(index + 1));
+      }
+    });
+
+    if (typeErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: createInvErrorMessage(typeErrors.join(","))
+      });
+      loading.value = false;
+      return;
+    }
+
+    if (checkErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${checkErrors.join(",")} 行,校验码不能为空。`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (codeErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${codeErrors.join(",")} 行,发票代码必须为数字。`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+
+    if (numberErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${numberErrors.join(",")} 行,发票号码必须为数字。`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (priceErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${priceErrors.join(",")} 行,发票税前金额必须为数字且不能是负数`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (fullyElectionicPriceErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${fullyElectionicPriceErrors.join(",")} 行,发票税后金额必须为数字且不能是负数`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (openDateErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${openDateErrors.join(",")} 行,开票日期不能为空且不能超过当前日期`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+  loading.value = false;
+};
+
+//提交
+const handleSubmit = async () => {
+  try {
+    if (loading.value) return;
+    loading.value = true;
+    const data = [];
+
+    tableData.value.forEach((key, index) => {
+      const obj: Record<string, string> = {};
+
+      for (let i in key) {
+        const prop = mapProp[i];
+        const value = key[i];
+        obj[prop] = value;
+      }
+      data.push(obj);
+    });
+
+    data.forEach((row, index) => {
+      const source = row.invoiceType.trim();
+      const target = cg_inv_type_list.find(({ label }) => label === source);
+      row.invoiceType = target.value;
+    });
+
+
+    const buyers = data.map(({ supplierNo }) => supplierNo);
+    const setBuyers = [...new Set(buyers)];
+
+    if (setBuyers.length > 1) {
+      ElMessage.error("卖方公司编码不一致");
+      loading.value = false;
+      return;
+    }
+
+    const companyNo = data[0].supplierNo;
+
+    if(companyNo != currentCompany.value.companyNo){
+      ElMessage.error("卖方公司编码与当前选中的公司不一致");
+      loading.value = false;
+      return;
+    }
+
+    data.forEach(item => {
+      const isFullyElectionic = item.invoiceType === 'fully_digitalized_special_electronic' || item.invoiceType === 'fully_digitalized_normal_electronic'
+      if(isFullyElectionic){ item.inv_subtotal_amount = item.inv_total }
+      
+      delete item['inv_total']
+      delete item["supplierNo"];
+      delete item["supplierName"];
+      delete item["companyName"];
+      delete item["companyNo"];
+    });
+    const { code, message,data: _d } = await httpBatchAdd({
+      list: data,
+      companyNo,
+      is_comon: '0'
+      // relaComNo: currentCompany.value.companyNo
+    });
+
+    loading.value = false;
+
+    responseHandle({
+      code,
+      message,
+      noMessage: false,
+      handler: () => {
+        ElMessage.success("数据导入成功!");
+        emit("onSuccess");
+        visible.value = false;
+      },
+       onError() {
+        if (Number(code) === 10004) {
+          ElMessageBox({
+            title: '以下对账单不符合要求',
+            message: h('div', null, [
+              h('p', null, '当前功能仅支持业务类型为采购订单的对账单,以下通用订单类型的对账单不支持该功能:'),
+              h('p', null, _d.join('、')),
+            ])
+          })
+         }else {
+          ElMessage.warning(message)
+         }
+      }
+    });
+  } catch (err) { 
+    console.log(err)
+  }
+};
+const cancel = () => {
+  tableData.value = [];
+};
+</script>
+
+<template>
+  <ElDialog
+    :close-on-click-modal="false"
+    v-model="visible"
+    title="非订单商品导入"
+    width="1040px"
+    top="8vh"
+    center
+  >
+    <execlUpload style="margin-bottom: 10px" @on-success="Uploadsuccess" v-if="tableData.length === 0" />
+
+    <el-table
+      :data="tableData"
+      stripe
+      border
+      max-height="500px"
+      size="small"
+      style="width: 100%"
+    >
+      <el-table-column
+        v-for="(si, sii) in columns"
+        :minWidth="si.minWidth"
+        show-overflow-tooltip
+        :fixed="si.fixed"
+        :prop="si.prop"
+        :type="si.type"
+        :key="sii"
+      >
+        <template #header>
+          <span v-if="!requireHeaders.includes(mapProp[si.prop]) || si.label === '序号' ">
+            {{ si.label }}
+          </span>
+          
+          <p v-else>
+            <span style="color: #f56c6c; font-size: 14px">* </span>
+            {{ si.label }}
+          </p>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div
+      flex
+      justify-end
+      gap-2
+      v-if="tableData.length !== 0"
+      style="padding: 10px 0 0 0"
+    >
+      <ElButton size="small" @click="cancel">取消</ElButton>
+      <el-button
+        size="small"
+        type="primary"
+        :loading="loading"
+        @click="handleSubmit"
+        >保存</el-button
+      >
+    </div>
+  </ElDialog>
+</template>
+
+<style lang="scss" scoped></style>

+ 236 - 0
src/views/invoiceInOut/adjustOrder/components/OrderImportModal/columns-config.ts

@@ -0,0 +1,236 @@
+const initheaders = [
+  "买方公司编码",
+  "买方公司名称",
+  "卖方公司编码",
+  "卖方公司名称",
+  "对账编码",
+  "发票类型",
+  "发票代码",
+  "发票号码",
+  "发票税前金额",
+  "发票税后金额",
+  "开票日期",
+  "校验码"
+];
+
+export const mapProp = {
+  value0: "companyNo",
+  value1: "companyName",
+  value2: "supplierNo",
+  value3: "supplierName",
+  value4: "payNo",
+  value5: "invoiceType",
+  value6: "invoiceCode",
+  value7: "invoiceNumber",
+  value8: "inv_subtotal_amount",
+  value9: "inv_total",
+  value10: "open_time",
+  value11: "checkNumber"
+};
+
+export const requireHeaders = [];
+
+const columns = [
+  {
+    type: "index",
+    fixed: "left",
+    label: "序号",
+    width: "50"
+  },
+  {
+    label: '业务编号',
+    prop: 'TODO1',
+    minWidth: '100px'
+  },
+  {
+    label: '类型',
+    prop: 'TODO2',
+    minWidth: '100px'
+  },
+  {
+    label:'订单来源',
+    prop: 'TODO3',
+    minWidth: '100px'
+  },
+  {
+    label: '销售方公司纳税识别号',
+    prop: 'TODO4',
+    minWidth: '140px'
+  },
+  {
+    label: '销售方公司',
+    prop: 'TODO5',
+    minWidth: '100px'
+  },
+  {
+    label: '订单编号',
+    prop: 'TODO6',
+    minWidth: '120px'
+  },
+  {
+    label: '订单主单号',
+    prop: 'TODO7',
+    minWidth: '120px'
+  },
+  {
+    label: '商品编号',
+    prop: 'TODO8',
+    minWidth: '100px'
+  },
+  {
+    label: '商品名称',
+    prop: 'TODO9',
+    minWidth: '100px'
+  },
+  {
+    label: '单位',
+    prop: 'TODO10',
+    minWidth: '80px'
+  },
+  {
+    label: '商品数量',
+    prop: 'TODO11',
+    minWidth: '110px'
+  },
+  {
+    label: '商品数量',
+    prop: 'TODO11',
+    minWidth: '110px'
+  },
+  {
+    label:'商品单价',
+    prop: 'TODO12',
+    minWidth: '110px'
+  },
+  {
+    label: '订单总金额',
+    prop: 'TODO13',
+    minWidth: '110px'
+  },
+  {
+    label: '税目',
+    prop: 'TODO14',
+    minWidth: '80px'
+  },
+  {
+    label: '税目名称',
+    prop: 'TODO15',
+    minWidth: '100px'
+  },
+  {
+    label: '关联金额',
+    prop: 'TODO16',
+    minWidth: '100px'
+  },
+  {
+    label: '购买方公司名称',
+    prop: 'TODO17',
+    minWidth: '110px'
+  },
+  {
+    label: '购买方公司纳税识别号',
+    prop: 'TODO18',
+    minWidth: '140px'
+  },
+  {
+    label: '发票号码',
+    prop: 'TODO19',
+    minWidth: '100px'
+  },
+  {
+    label: '发票类型',
+    prop: 'TODO20',
+    minWidth: '100px'
+  },
+  {
+    label: '销售方公司名称',
+    prop: 'TODO21',
+    minWidth: '110px'
+  },
+  {
+    label: '销售方公司纳税号',
+    prop: 'TODO22',
+    minWidth: '140px'
+  },
+  {
+    label: '发票明细ID',
+    prop: 'TODO23',
+    minWidth: '110px'
+  },
+  {
+    label: '货物或应税劳务、服务名称',
+    prop: 'TODO24',
+    minWidth: '200px'
+  },
+  {
+    label: '类目编号',
+    prop: 'TODO25',
+    minWidth: '90px'
+  },
+  {
+    label: '规格型号',
+    prop: 'TODO27',
+    minWidth: '110px'
+  },
+  {
+    label: '单位',
+    prop: 'TODO28',
+    minWidth: '80px'
+  },
+  {
+    label: '数量',
+    prop: 'TODO29',
+    minWidth: '80px'
+  },
+  {
+    label: '税前单价',
+    prop: 'TODO30',
+    minWidth: '100px'
+  },
+  {
+    label: '税前总价',
+    prop: 'TODO30',
+    minWidth: '100px'
+  },
+  {
+    label: '税率',
+    prop: 'TODO31',
+    minWidth: '80px'
+  },
+  {
+    label: '税后单价',
+    prop: 'TODO32',
+    minWidth: '100px'
+  },
+  {
+    label: '税后总额',
+    prop: 'TODO33',
+    minWidth: '100px'
+  },
+  {
+    label: '类目编号状态',
+    prop: 'TODO34',
+    minWidth: '100px'
+  },
+  {
+    label: '税率状态',
+    prop: 'TODO35',
+    minWidth: '100px'
+  },
+  {
+    label: '备注',
+    prop: 'TODO36',
+    minWidth: '80px'
+  },
+  {
+    label: '入账月份',
+    prop: 'TODO37',
+    minWidth: '80px'
+  }
+]
+
+const orderTemplate = [columns.slice(1).reduce((prev, current) => {
+  return { ...prev, [current.label]: current.detaultData ? current.defaultData : '' }
+}, {})]
+
+export { initheaders, columns, orderTemplate };

+ 354 - 0
src/views/invoiceInOut/adjustOrder/components/OrderImportModal/index.vue

@@ -0,0 +1,354 @@
+<script setup lang="ts">
+import { ref, h } from "vue";
+import { ElButton, ElDialog, ElMessage,ElMessageBox } from "element-plus";
+import { execlUpload } from "/@/components/execlUpload";
+import { httpBatchAdd } from "/@/api/purchase/ticketReturn";
+import { useCompany } from "/@/hooks/core/useCompany";
+import { cg_inv_type_list } from "/@/utils/status";
+import { useResponseHandle } from "/@/hooks";
+import { useVModel } from "@vueuse/core";
+import dayjs from "dayjs"
+
+import {
+  initheaders,
+  columns,
+  mapProp,
+  requireHeaders
+} from "./columns-config";
+
+
+const loading = ref(false);
+const tableData = ref([]);
+
+const props = defineProps<{ visible: boolean }>()
+const emit = defineEmits(["onSuccess"]);
+
+const row = ref(1);
+const allTypes = cg_inv_type_list.map(({ label }) => label);
+const visible = useVModel(props, 'visible')
+
+const createInvErrorMessage = (row: string) => `导入数据第 ${row} 行 发票类型格式不正确,发票类型必须为${allTypes.join(",")}`;
+
+const { currentCompany } = useCompany();
+
+const responseHandle = useResponseHandle();
+
+const Uploadsuccess = ({ results, header }) => {
+  loading.value = true;
+  if (results.length === 0) {
+    ElMessage.error("表格无有效数据!");
+    loading.value = false;
+    return;
+  }
+
+  let headok = true;
+  if (header.length !== columns.length - 1) {
+    console.log('joined', header, columns)
+    headok = false;
+  } else {
+    columns.slice(1).forEach((si, sii) => {
+    console.log(si.label, header[sii])
+      if (si.label !== header[sii]) { 
+        headok = false; 
+      }
+    });
+  }
+
+  if (!headok) {
+    ElMessage.error("表头与导入模板不匹配!");
+    loading.value = false;
+    return;
+  }
+
+  tableData.value = [];
+
+  for (const v1 of results) {
+    const b = Object.values(v1);
+    let model = {};
+    b.forEach((si, sii) => { model["value" + sii] = si + ""; });
+    tableData.value.push(model);
+    row.value = row.value + 1;
+  }
+
+    const data = [];
+   tableData.value.forEach((key) => {
+      const obj: Record<string, string> = {};
+
+      for (let i in key) {
+        const prop = mapProp[i];
+        const value = key[i];
+        obj[prop] = value;
+     }
+      
+      data.push(obj);
+    });
+
+
+    const typeErrors: string[] = [];
+    const checkErrors: string[] = [];
+    const codeErrors: string[] = [];
+    const numberErrors: string[] = [];
+    const priceErrors: string[] = [];
+    const fullyElectionicPriceErrors: string[] = [];
+
+    
+  const openDateErrors: string[] = [];
+  const now = dayjs(new Date()).format('YYYY-MM-DD');
+
+    data.forEach((row, index) => {
+      const source = row.invoiceType.trim();
+      const target = cg_inv_type_list.find(({ label }) => label === source);
+
+      if (!target) {
+        typeErrors.push(String(index + 1));
+      } else {
+        row.invoiceType = target.value;
+
+        if (
+          (target.value === "normal" || target.value === "electronic") &&
+          !row.checkNumber
+        ) {
+          checkErrors.push(String(index + 1));
+        }
+      }
+
+      const isFullyElectionic = row.invoiceType === 'fully_digitalized_special_electronic' || row.invoiceType === 'fully_digitalized_normal_electronic'
+
+      if(!row.open_time || (row.open_time && !dayjs(row.open_time).isSame(dayjs(now)) && !dayjs(row.open_time).isBefore(dayjs(now)))){
+        openDateErrors.push(String(index + 1))
+      }
+
+      const reg = /^\d+(\.\d+)?$/;
+
+      if (!reg.test(row.invoiceCode) && !isFullyElectionic) {
+        codeErrors.push(String(index + 1));
+      }
+
+      if (!reg.test(row.invoiceNumber)) {
+        numberErrors.push(String(index + 1));
+      }
+
+      if ((!reg.test(row.inv_subtotal_amount) || Number(row.inv_subtotal_amount) < 0) && !isFullyElectionic) {
+        priceErrors.push(String(index + 1));
+      }
+
+      if ((!reg.test(row.inv_total) || Number(row.inv_total) < 0) && isFullyElectionic) {
+        fullyElectionicPriceErrors.push(String(index + 1));
+      }
+    });
+
+    if (typeErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: createInvErrorMessage(typeErrors.join(","))
+      });
+      loading.value = false;
+      return;
+    }
+
+    if (checkErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${checkErrors.join(",")} 行,校验码不能为空。`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (codeErrors.length > 0) {
+      ElMessage({
+        type: "error",
+        message: `第 ${codeErrors.join(",")} 行,发票代码必须为数字。`
+      });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+
+    if (numberErrors.length > 0) {
+      ElMessage({ type: "error", message: `第 ${numberErrors.join(",")} 行,发票号码必须为数字。`});
+
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (priceErrors.length > 0) {
+      ElMessage({ type: "error", message: `第 ${priceErrors.join(",")} 行,发票税前金额必须为数字且不能是负数` });
+
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (fullyElectionicPriceErrors.length > 0) {
+      ElMessage({ type: "error", message: `第 ${fullyElectionicPriceErrors.join(",")} 行,发票税后金额必须为数字且不能是负数` });
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+    if (openDateErrors.length > 0) {
+      ElMessage({ type: "error", message: `第 ${openDateErrors.join(",")} 行,开票日期不能为空且不能超过当前日期`});
+      loading.value = false;
+      tableData.value = [];
+      return;
+    }
+
+  loading.value = false;
+};
+
+//提交
+const handleSubmit = async () => {
+  try {
+    if (loading.value) return;
+    loading.value = true;
+    const data = [];
+
+    tableData.value.forEach((key) => {
+      const obj: Record<string, string> = {};
+
+      for (let i in key) {
+        const prop = mapProp[i];
+        const value = key[i];
+        obj[prop] = value;
+      }
+      data.push(obj);
+    });
+
+    data.forEach((row) => {
+      const source = row.invoiceType.trim();
+      const target = cg_inv_type_list.find(({ label }) => label === source);
+      row.invoiceType = target.value;
+    });
+
+    const buyers = data.map(({ supplierNo }) => supplierNo);
+    const setBuyers = [...new Set(buyers)];
+
+    if (setBuyers.length > 1) {
+      ElMessage.error("卖方公司编码不一致");
+      loading.value = false;
+      return;
+    }
+
+    const companyNo = data[0].supplierNo;
+
+    if(companyNo != currentCompany.value.companyNo){
+      ElMessage.error("卖方公司编码与当前选中的公司不一致");
+      loading.value = false;
+      return;
+    }
+
+    data.forEach(item => {
+      const isFullyElectionic = item.invoiceType === 'fully_digitalized_special_electronic' || item.invoiceType === 'fully_digitalized_normal_electronic'
+      if(isFullyElectionic){ item.inv_subtotal_amount = item.inv_total }
+      
+      delete item['inv_total']
+      delete item["supplierNo"];
+      delete item["supplierName"];
+      delete item["companyName"];
+      delete item["companyNo"];
+    });
+    const { code, message,data: _d } = await httpBatchAdd({
+      list: data,
+      companyNo,
+      is_comon: '0'
+      // relaComNo: currentCompany.value.companyNo
+    });
+
+    loading.value = false;
+
+    responseHandle({
+      code,
+      message,
+      noMessage: false,
+      handler: () => {
+        ElMessage.success("数据导入成功!");
+        emit("onSuccess");
+        visible.value = false;
+      },
+       onError() {
+        if (Number(code) === 10004) {
+          ElMessageBox({
+            title: '以下对账单不符合要求',
+            message: h('div', null, [
+              h('p', null, '当前功能仅支持业务类型为采购订单的对账单,以下通用订单类型的对账单不支持该功能:'),
+              h('p', null, _d.join('、')),
+            ])
+          })
+         }else {
+          ElMessage.warning(message)
+         }
+      }
+    });
+  } catch (err) { 
+    console.log(err)
+  }
+};
+const cancel = () => {
+  tableData.value = [];
+};
+</script>
+
+<template>
+  <ElDialog
+    v-model="visible"
+    :close-on-click-modal="false"
+    title="订单商品导入"
+    width="1040px"
+    top="8vh"
+    center
+  >
+    <execlUpload style="margin-bottom: 10px" @on-success="Uploadsuccess" v-if="tableData.length === 0" />
+
+    <el-table
+      :data="tableData"
+      stripe
+      border
+      max-height="500px"
+      size="small"
+      style="width: 100%"
+    >
+      <el-table-column
+        v-for="(si, sii) in columns"
+        :minWidth="si.minWidth"
+        show-overflow-tooltip
+        :fixed="si.fixed"
+        :prop="si.prop"
+        :type="si.type"
+        :key="sii"
+      >
+        <template #header>
+          <span v-if="!requireHeaders.includes(mapProp[si.prop]) || si.label === '序号' ">
+            {{ si.label }}
+          </span>
+          
+          <p v-else>
+            <span style="color: #f56c6c; font-size: 14px">* </span>
+            {{ si.label }}
+          </p>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div
+      flex
+      justify-end
+      gap-2
+      v-if="tableData.length !== 0"
+      style="padding: 10px 0 0 0"
+    >
+      <ElButton size="small" @click="cancel">取消</ElButton>
+      <el-button
+        size="small"
+        type="primary"
+        :loading="loading"
+        @click="handleSubmit"
+        >保存</el-button
+      >
+    </div>
+  </ElDialog>
+</template>
+
+<style lang="scss" scoped></style>

+ 18 - 0
src/views/invoiceInOut/adjustOrder/components/rules.ts

@@ -0,0 +1,18 @@
+export const rules = {
+    supplierNo: [{ required: true, message: '请选择销售方公司', trigger: 'change' }],
+    companyNo: [{ required: true, message: '请选择购买方公司', trigger: 'change' }],
+    goodSource: [{ required: true, message: '请选择商品来源', trigger: 'change' }],
+    spuCode: [{ required: true, message: '请输入商品编号', trigger: 'change' }],
+    goodType: [{ required: true, message: '请选择订单商品类型', trigger: 'change' }],
+    is_combind: [{ required: true, message: '请选择组合类型', trigger: 'change' }],
+    goodName: [{ required: true, message: '请输入订单商品名称', trigger: 'change' }],
+    invGoodName: [{ required: true, message: '请输入发票商品名称', trigger: 'change' }],
+    beforeTaxPrice: [{ required: true, message: '请输入成本税前单价', trigger: 'change' }],
+    unit: [{ required: true, message: '请选择单位', trigger: 'change' }],
+    weight: [{ required: true, message: '请选择重量', trigger: 'change' }],
+    afterTaxPrice: [{ required: true, message: '请输入成本税后单价', trigger: 'change' }],
+    in_code: [{ required: true, message: '请选择进项类目', trigger: 'change' }],
+    invType: [{ required: true, message: '请选择发票类型', trigger: 'change' }],
+    in_tax: [{ required: true, message: '请选择进项税率', trigger: 'change' }],
+    in_cost_status: [{ required: true, message: '请选择进项成本类型', trigger: 'change' }]
+}

+ 7 - 0
src/views/invoiceInOut/adjustOrder/config/columns.ts

@@ -0,0 +1,7 @@
+export const goodColumns = [
+  { label: '业务编号', field: '' }
+]
+
+
+
+export const orderGoodColumns = []

+ 30 - 0
src/views/invoiceInOut/adjustOrder/config/content.config.ts

@@ -0,0 +1,30 @@
+import { ContentConfig } from "/@/components/PageContent";
+import { httpList } from "/@/api/invoiceInOut/productManager";
+
+const columns = [
+  { label: "调整单编号", prop: "TODO", width: 150 },
+  { label: "来源单号", prop: "TODO", width: 160 },
+  { label: '发票明细ID', width: 160 },
+  { label: "商品编号", prop: "TODO", width: 100 },
+  { label: '商品名称', prop: 'TODO', width: 100 },
+  { label: '规格', prop: 'TODO', width: 100 },
+  { label: '单位', prop: 'TODO', width: 120 },
+  { label: '税前单价', prop: 'TODO', width: 120 },
+  { label: '税后单价', prop: 'TODO', width: 120 },
+  { label: '调整数量', prop: 'TODO', width: 120 },
+  { label: '调整金额', prop: 'TODO', width: 120 },
+  { label: '创建人', prop: 'TODO', width: 120 },
+  { label: "操作", fixed: "right", width: 45, slot: "operation" }
+];
+
+const contentConfig: ContentConfig = {
+  columns,
+  title: "商品管理",
+  permissions: ['007'],
+  apis: { 
+    httpList,
+    httpAdd: true
+  }
+};
+
+export default contentConfig;

+ 0 - 0
src/views/invoiceInOut/inOutManager/components/ChooseGoodModal/config/modal.config.ts → src/views/invoiceInOut/adjustOrder/config/modal.config.ts


+ 33 - 0
src/views/invoiceInOut/adjustOrder/config/search.config.ts

@@ -0,0 +1,33 @@
+import { FormConfig } from "/@/components/PageSearch";
+import { goodTypeOptions } from "/@/utils/status";
+
+const searchFormConfig: FormConfig = {
+  formItems: [
+    {
+      field: 'goodNo',
+      type: 'input',
+      placeholder: '商品编码'
+    },
+    {
+      field: 'goodType',
+      type: 'select',
+      options: goodTypeOptions,
+      placeholder: '商品类型'
+    },
+    {
+      field: "timer",
+      type: "date_picker",
+      span: 7,
+      label: '创建时间',
+      otherOptions: {
+        type: "daterange",
+        startProp: "start",
+        endProp: "end",
+        startPlaceholder: "开始时间",
+        endPlaceholder: "结束时间"
+      }
+    },
+  ]
+};
+
+export default searchFormConfig;

+ 84 - 0
src/views/invoiceInOut/adjustOrder/detail.vue

@@ -0,0 +1,84 @@
+<script setup lang="ts">
+import BasicDescriptions from "/@/components/BasicDescriptions"
+import { useDetail } from "/@/hooks/core/useDetail"
+import { NumberInput } from "/@/components/Input"
+import { goodColumns } from "./config/columns"
+import { ref } from "vue"
+
+import { 
+  ElFormItem, 
+  ElForm, 
+  ElButton, 
+  ElSelect, 
+  ElOption, 
+  ElTable, 
+  ElTableColumn, 
+  ElCollapseItem, 
+  ElCollapse, 
+  ElTabPane, 
+  ElTabs 
+} from "element-plus"
+
+
+const { id, isDetail, title, collapses } = useDetail({ baseName: '计提明细处理', collapseLen: 2 });
+
+
+const formData = ref({
+  isToAdjust: '',
+  amount: ''
+})
+
+</script>
+
+<template>
+  <div class="padding__container">
+    <ElTabs>
+      <ElTabPane :label="title">
+        <ElCollapse v-model="collapses">
+          <ElCollapseItem :title="title" name="1">
+            <ElForm label-width="100px">
+              <ElFormItem label="计提明细">
+                <BasicDescriptions 
+                  style="margin-left: 40px" 
+                  :columns="goodColumns" 
+                  :data="{}" 
+                />
+              </ElFormItem>
+              
+              <ElFormItem label="关联凭证">
+                <ElTable size="small" border>
+                  <ElTableColumn label="凭证编号" />
+                  <ElTableColumn label="商品编号" />
+                  <ElTableColumn label="商品名称" />
+                  <ElTableColumn label="账面数量" />
+                  <ElTableColumn label="目标商品比例" />
+                  <ElTableColumn label="关联数量" />
+                  <ElTableColumn label="税前单价" />
+                  <ElTableColumn label="税后单价" />
+                </ElTable>
+              </ElFormItem>
+
+              <ElFormItem label="调整金额" prop="amount">
+                <NumberInput 
+                  v-model="formData.amount" 
+                  placeholder="调整金额"
+                />
+              </ElFormItem>
+
+              <ElFormItem label="添加至调整单" prop="isToAdjust">
+                <ElSelect v-model="formData.isToAdjust" placeholder="添加至调整单">
+                  <ElOption label="是" value="1" />
+                  <ElOption label="否" value="0" />
+                </ElSelect>
+              </ElFormItem>
+
+              <div class="flex w-full justify-end">
+                <ElButton type="primary">保存</ElButton>
+              </div>
+            </ElForm>
+          </ElCollapseItem>
+        </ElCollapse>
+      </ElTabPane>
+    </ElTabs>
+  </div>
+</template>

+ 37 - 0
src/views/invoiceInOut/adjustOrder/index.vue

@@ -0,0 +1,37 @@
+<script setup lang="ts">
+import { reactive } from "vue";
+import { useRouter } from "vue-router";
+import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
+import contentConfig from "./config/content.config";
+import searchConfig from "./config/search.config";
+
+const PageName = "productManager";
+const router = useRouter();
+
+const hooks: PageHooks = {
+  pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
+};
+
+const state = reactive({ 
+  orderImportVisible: false, 
+  notOrderImportVisible: false 
+})
+
+const events: PageEvents = {
+  content: {
+    create: () => router.push('/invoiceInOut/provisionOutDetail'),
+    preview: ({ id }) => router.push("/invoiceInOut/provisionOutDetail?id=" + id)
+  }
+};
+</script>
+
+<template>
+  <PageAuth :pageName="PageName">
+    <PageContainer
+      :hooks="hooks"
+      :events="events"
+      :searchConfig="searchConfig"
+      :contentConfig="contentConfig"
+    />
+  </PageAuth>
+</template>

+ 0 - 0
src/views/invoiceInOut/adjustOrder/调整单


+ 3 - 1
src/views/invoiceInOut/inOutManager/components/ChooseGoodModal/config/content.config.ts

@@ -94,7 +94,9 @@ const columns = [
 
 const contentConfig: ContentConfig = {
   columns,
-  apis: { httpList: (parameter = {}) => httpList({ ...parameter, is_combind: '0' }) }
+  apis: { 
+    httpList: (parameter = {}) => httpList({ ...parameter, is_combind: '0' })
+  }
 };
 
 export default contentConfig;

+ 1 - 2
src/views/invoiceInOut/inOutManager/components/ChooseGoodModal/index.vue

@@ -1,9 +1,9 @@
 <script setup lang="ts">
 import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
 import contentConfig from "./config/content.config";
+import { ElDialog, ElMessage } from "element-plus";
 import searchConfig from "./config/search.config";
 import { useVModel } from "@vueuse/core";
-import { ElDialog, ElMessage } from "element-plus";
 import { useRouter } from "vue-router";
 import { ref } from "vue";
 
@@ -11,7 +11,6 @@ const props = defineProps<{ visible: boolean }>()
 const emit = defineEmits(['submit'])
 
 const visible = useVModel(props, 'visible')
-
 const router = useRouter();
 
 const hooks: PageHooks = {

+ 0 - 2
src/views/invoiceInOut/inOutManager/components/OrderImportModal/index.vue

@@ -44,11 +44,9 @@ const Uploadsuccess = ({ results, header }) => {
   let headok = true;
 
   if (header.length !== columns.length - 1) {
-    console.log('joined', header, columns)
     headok = false;
   } else {
     columns.slice(1).forEach((si, sii) => {
-    console.log(si.label, header[sii])
       if (si.label !== header[sii]) { 
         headok = false; 
       }

+ 1 - 1
src/views/invoiceInOut/inOutManager/config/content.config.ts

@@ -49,7 +49,7 @@ const columns = [
   { label: '税前单价', prop: 'TODO', width: 100 },
   { label: '单价', prop: 'TODO', width: 100 },
   { label: '数量', prop: 'TODO', width: 100 },
-  { label: "操作", fixed: "right", width: 55, slot: "operation" }
+  { label: "操作", fixed: "right", width: 75, slot: "operation" }
 ];
 
 const contentConfig: ContentConfig = {

+ 0 - 40
src/views/invoiceInOut/inOutManager/config/modal.config.ts

@@ -1,40 +0,0 @@
-import { ModalConfig } from "../../../../components/PageModal/src/types";
-
-const modalConfig: ModalConfig = {
-  title: "客户",
-  itemStyle: {},
-  formItems: [
-    {
-      field: "companyNo",
-      type: "input",
-      label: "客户编码",
-      labelWidth: "120px"
-    },
-    {
-      field: "companyName",
-      type: "input",
-      labelWidth: "120px",
-      label: "客户名称"
-    },
-    {
-      field: "parent",
-      type: "input",
-      labelWidth: "120px",
-      label: "归属集团"
-    },
-    {
-      field: "contactor",
-      type: "input",
-      labelWidth: "120px",
-      label: "联系人"
-    },
-    {
-      field: "createTime",
-      type: "input",
-      labelWidth: "120px",
-      label: "创建时间"
-    }
-  ]
-};
-
-export default modalConfig;

+ 36 - 9
src/views/invoiceInOut/inOutManager/detail.vue

@@ -7,26 +7,46 @@ import BasicDescriptions from "/@/components/BasicDescriptions";
 import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
 
 import ChooseGoodModal from "./components/ChooseGoodModal/index.vue"
+import { ElForm } from "element-plus";
 
 const { title, collapses } = useDetail({ baseName: '出入库', collapseLen: 2 });
 const visible = ref(false)
 
+const formRef = ref<InstanceType<typeof ElForm> | null>(null)
+
 const formData = ref({
-  goods: []
+  goods: [],
+  month: ''
 })
 
-function handleGoodComfirm(values){
-  console.log('item ~~🚀~~')
+const rules = {
+  goods: [{ required: true, message: '请选择操作商品' }],
+  month: [{ required: true, message: '请选择入账月份' }]
+}
+
+const disabledTomorrow = (time) => {
+  const now = new Date();
+  return time.getTime() > now.setHours(0, 0, 0, 0);
+};
 
+function handleGoodComfirm(values){
   const ids = formData.value.goods.map(({ id }) => id)
   const list = []
 
   values.forEach(item => {
-    if(!ids.includes(item.id)){  list.push(item) }
+    if(!ids.includes(item.id)){ list.push(item) }
   })
 
   formData.value.goods = [...list,  ...formData.value.goods]
 }
+
+async function onSubmit(){
+  try{
+    await formRef.value.validate()
+  }catch(err){
+    console.log(err)
+  }
+}
 </script>
 
 <template>
@@ -39,8 +59,8 @@ function handleGoodComfirm(values){
           </ElCollapseItem>
 
           <ElCollapseItem title="出入库信息确认" name="2">
-            <ElForm>
-              <ElFormItem label="操作商品">
+            <ElForm ref="formRef" :rules="rules" :model="formData">
+              <ElFormItem label="操作商品" prop="goods">
                 <ElTable
                   border 
                   size="small" 
@@ -86,12 +106,19 @@ function handleGoodComfirm(values){
                 </ElTable>
               </ElFormItem>
 
-              <ElFormItem label="入账月份">
-                <ElDatePicker type="month" placeholder="入账月份" />
+              <ElFormItem label="入账月份" prop="month">
+                <ElDatePicker 
+                  type="month" 
+                  placeholder="入账月份"
+                  :disabledDate="disabledTomorrow" 
+                />
               </ElFormItem>
 
               <div class="flex w-full justify-end">
-                <ElButton type="primary">保存</ElButton>
+                <ElButton 
+                  type="primary"
+                  @click="onSubmit"
+                >保存</ElButton>
               </div>
             </ElForm>
           </ElCollapseItem>

+ 11 - 1
src/views/invoiceInOut/inOutManager/index.vue

@@ -15,7 +15,7 @@ import { utils, writeFile } from "xlsx";
 
 import { useRenderIcon } from "/@/components/ReIcon/src/hooks"
 
-const PageName = "productManager";
+const PageName = "inOutManager";
 const router = useRouter();
 
 const hooks: PageHooks = {
@@ -88,6 +88,16 @@ function onDownload(type = 'notOrder'){
         </ElDropdown>
       </template>
 
+      <template #content_action>
+        <ElTooltip content="取消操作" placement="top">
+          <ElButton 
+            :icon="useRenderIcon('delete')"
+            type="danger"
+            link
+          />
+        </ElTooltip>
+      </template>
+
     </PageContainer>
 
     <OrderImportModal v-model:visible="state.orderImportVisible" />

+ 34 - 37
src/views/invoiceInOut/inventoryCheck/components/BaseForm.vue

@@ -1,23 +1,26 @@
 <script setup lang="ts">
 import { reactive, ref } from "vue";
-import { ElButton, ElCol, ElForm, ElFormItem, ElMessage, ElOption, ElSelect, ElTooltip } from "element-plus"
 import { httpCompanies } from "/@/api/invoiceInOut/productManager"
-import { rules } from "./rules"
-
 import { createInitalData } from "./shared"
 import { useTask } from "/@/hooks/core"
 import { useRouter } from "vue-router"
+import { ElForm } from "element-plus"
 
-import { NumberInput } from "/@/components/Input"
 
 import ChooseGoodModal from "./ChooseGoodModal/index.vue"
 import ChildGoodEditModal from "./ChildGoodEditModal.vue";
 
-
-import { httpAdd } from "/@/api/invoiceInOut/productManager";
 import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { NumberInput } from "/@/components/Input"
 import { goodTypeOptions } from "/@/utils/status";
 
+import { rules } from "./shared"
+
+const disabledDate = (time) => {
+  const now = new Date();
+  return time.getTime() > now.setHours(0, 0, 0, 0);
+};
+
 const router = useRouter()
 const formRef = ref<InstanceType<typeof ElForm> | null>(null)
 
@@ -30,26 +33,13 @@ const state = reactive({
 })
 
 
-
 const createTask = useTask({ success(){ router.push('/invoiceInOut/productManager') } })
 const formData = ref(createInitalData())
 
 async function submit(){
-  if(formData.value.is_combind === '1' && formData.value.childArr.length === 0){
-    ElMessage.warning('请选择至少一个子商品')
-    return
-  }
-
-  if(formData.value.is_combind === '0'){
-    formData.value.childArr = []
-  }
-
   try{
     await formRef.value?.validate()
-    createTask.run(httpAdd({
-      ...formData.value,
-      childArr: formData.value.childArr.map(({ child_id, child_num }) => ({ child_id, child_num }))
-    }))
+    // createTask.run(httpAdd({}))
   }catch(err){
     console.log(err)
   }
@@ -57,18 +47,20 @@ async function submit(){
 
 
 function handleSubmit(list: any[]){
-  const currentIds = formData.value.childArr.map(({ id }) => id)
-  const appends: any[] = []
-
-  for(const item of list){
-    if(currentIds.includes(item.id)){ continue }
-    appends.push(item)
-  }
-
-  formData.value.childArr = [ ...formData.value.childArr, ...appends ]
+  formData.value.childArr = [...list]
+  console.log(formData.value.childArr)
+
+  // const currentIds = formData.value.childArr.map(({ id }) => id)
+  // const appends: any[] = []
+  // for(const item of list){
+  //   if(currentIds.includes(item.id)){ continue }
+  //   appends.push(item)
+  // }
+  // formData.value.childArr = [ ...formData.value.childArr, ...appends ]
 }
 
 
+console.log(rules);
 
 (async function initialData(){
   const result = await httpCompanies({ size: 10000 })
@@ -89,7 +81,7 @@ function handleSubmit(list: any[]){
   >
     <ElRow>
       <ElCol :span="24">
-        <ElFormItem label="商品信息">
+        <ElFormItem label="商品信息" prop="childArr">
           <ElTable border size="small" :data="formData.childArr">
             <ElTableColumn label="商品编号" prop="skuCode" show-overflow-tooltip />
             <ElTableColumn label="商品名称" prop="goodName"  show-overflow-tooltip />
@@ -113,6 +105,7 @@ function handleSubmit(list: any[]){
             <ElTableColumn label="税率" prop="cat_tax" show-overflow-tooltip />
             <ElTableColumn label="重量" prop="unit_weight" show-overflow-tooltip />
             <ElTableColumn label="分光" prop="spectral" show-overflow-tooltip />
+            <ElTableColumn label="账面数量" prop="" show-overflow-tooltip />
 
             <ElTableColumn label="操作" width="60px" fixed="right">
               <template #header>
@@ -147,25 +140,25 @@ function handleSubmit(list: any[]){
       </ElCol>
 
       <ElCol :span="24">
-        <ElFormItem label="盘点数量">
-          <NumberInput placeholder="盘点数量" />
+        <ElFormItem label="盘点数量" prop="num">
+          <NumberInput v-model="formData.num" placeholder="盘点数量" />
         </ElFormItem>
       </ElCol>
 
       <ElCol :span="24">
-        <ElFormItem label="盈亏数量">
+        <ElFormItem label="盈亏数量" prop="ykNum">
           =账面数量-盘点数量
         </ElFormItem>
       </ElCol>
 
       <ElCol :span="24">
-        <ElFormItem label="盈亏金额">
+        <ElFormItem label="盈亏金额" prop="ykPrice">
           =(账面数量-盘点数量) * 税前单价
         </ElFormItem>
       </ElCol>
 
       <ElCol :span="24">
-        <ElFormItem label="结果类型">
+        <ElFormItem label="结果类型" prop="result">
           <ElSelect>
             <ElOption label="调整单" value="0" />
             <ElOption label="前期数据导入" value="1" />
@@ -174,8 +167,12 @@ function handleSubmit(list: any[]){
       </ElCol>
 
       <ElCol :span="24">
-        <ElFormItem label="调整单入账月份">
-          <ElDatePicker placeholder="入账月份" />
+        <ElFormItem label="调整单入账月份" prop="month">
+          <ElDatePicker
+            type="month"
+            placeholder="入账月份" 
+            :disabledDate="disabledDate" 
+          />
         </ElFormItem>
       </ElCol>
     </ElRow>

+ 43 - 0
src/views/invoiceInOut/inventoryCheck/components/BatchCreateModal/columns-config.ts

@@ -0,0 +1,43 @@
+export const mapProp = {
+  value0: "companyNo",
+  value1: "companyName",
+  value2: "supplierNo",
+  value3: "supplierName",
+  value4: "payNo",
+  value5: "invoiceType",
+  value6: "invoiceCode",
+  value7: "invoiceNumber",
+  value8: "inv_subtotal_amount",
+  value9: "inv_total",
+  value10: "open_time",
+  value11: "checkNumber"
+};
+
+export const requireHeaders = [];
+
+const columns = [
+  {
+    label: '购买方纳税号',
+    prop: 'TODO1',
+    minWidth: '100px',
+    reuqired: true
+  },
+  {
+    label: '商品编号',
+    prop: 'TODO2',
+    minWidth: '100px',
+    reuqired: true
+  },
+  {
+    label:'盘点数量',
+    prop: 'TODO3',
+    minWidth: '100px',
+    reuqired: true
+  }
+]
+
+const orderTemplate = [columns.slice(1).reduce((prev, current) => {
+  return { ...prev, [current.label]: current.detaultData ? current.defaultData : '' }
+}, {})]
+
+export { initheaders, columns, orderTemplate };

+ 243 - 0
src/views/invoiceInOut/inventoryCheck/components/BatchCreateModal/index.vue

@@ -0,0 +1,243 @@
+<script setup lang="ts">
+import { ref, h } from "vue";
+import { ElButton, ElDialog, ElMessage,ElMessageBox } from "element-plus";
+import { execlUpload } from "/@/components/execlUpload";
+import { httpBatchAdd } from "/@/api/purchase/ticketReturn";
+import { useCompany } from "/@/hooks/core/useCompany";
+import { cg_inv_type_list } from "/@/utils/status";
+import { useResponseHandle } from "/@/hooks";
+import { useVModel } from "@vueuse/core";
+import dayjs from "dayjs"
+
+import {
+  columns,
+  mapProp,
+  requireHeaders
+} from "./columns-config";
+
+
+const loading = ref(false);
+const tableData = ref([]);
+
+const props = defineProps<{ visible: boolean }>()
+const emit = defineEmits(["onSuccess"]);
+
+const row = ref(1);
+const allTypes = cg_inv_type_list.map(({ label }) => label);
+const visible = useVModel(props, 'visible')
+
+const createInvErrorMessage = (row: string) => `导入数据第 ${row} 行 发票类型格式不正确,发票类型必须为${allTypes.join(",")}`;
+
+const { currentCompany } = useCompany();
+
+const responseHandle = useResponseHandle();
+
+const Uploadsuccess = ({ results, header }) => {
+  loading.value = true;
+  if (results.length === 0) {
+    ElMessage.error("表格无有效数据!");
+    loading.value = false;
+    return;
+  }
+
+  let headok = true;
+
+  if (header.length !== columns.length - 1) {
+    headok = false;
+  } else {
+    columns.slice(1).forEach((si, sii) => {
+      if (si.label !== header[sii]) { 
+        headok = false; 
+      }
+    });
+  }
+
+  if (!headok) {
+    ElMessage.error("表头与导入模板不匹配!");
+    loading.value = false;
+    return;
+  }
+
+  tableData.value = [];
+
+  for (const v1 of results) {
+    const b = Object.values(v1);
+    let model = {};
+    b.forEach((si, sii) => { model["value" + sii] = si + ""; });
+    tableData.value.push(model);
+    row.value = row.value + 1;
+  }
+
+    const data = [];
+   tableData.value.forEach((key) => {
+      const obj: Record<string, string> = {};
+
+      for (let i in key) {
+        const prop = mapProp[i];
+        const value = key[i];
+        obj[prop] = value;
+     }
+      
+      data.push(obj);
+    });
+
+
+  const openDateErrors: string[] = [];
+  const now = dayjs(new Date()).format('YYYY-MM-DD');
+
+    data.forEach((row, index) => {
+ 
+    });
+
+
+  loading.value = false;
+};
+
+//提交
+const handleSubmit = async () => {
+  try {
+    if (loading.value) return;
+    loading.value = true;
+    const data = [];
+
+    tableData.value.forEach((key) => {
+      const obj: Record<string, string> = {};
+
+      for (let i in key) {
+        const prop = mapProp[i];
+        const value = key[i];
+        obj[prop] = value;
+      }
+      data.push(obj);
+    });
+
+    data.forEach((row) => {
+      const source = row.invoiceType.trim();
+      const target = cg_inv_type_list.find(({ label }) => label === source);
+      row.invoiceType = target.value;
+    });
+
+    const buyers = data.map(({ supplierNo }) => supplierNo);
+    const setBuyers = [...new Set(buyers)];
+
+    if (setBuyers.length > 1) {
+      ElMessage.error("卖方公司编码不一致");
+      loading.value = false;
+      return;
+    }
+
+    const companyNo = data[0].supplierNo;
+
+    if(companyNo != currentCompany.value.companyNo){
+      ElMessage.error("卖方公司编码与当前选中的公司不一致");
+      loading.value = false;
+      return;
+    }
+
+    data.forEach(item => {
+      const isFullyElectionic = item.invoiceType === 'fully_digitalized_special_electronic' || item.invoiceType === 'fully_digitalized_normal_electronic'
+      if(isFullyElectionic){ item.inv_subtotal_amount = item.inv_total }
+      
+      delete item['inv_total']
+      delete item["supplierNo"];
+      delete item["supplierName"];
+      delete item["companyName"];
+      delete item["companyNo"];
+    });
+    
+    const { code, message,data: _d } = await httpBatchAdd({ list: data, companyNo,  is_comon: '0' });
+
+    loading.value = false;
+
+    responseHandle({
+      code,
+      message,
+      noMessage: false,
+      handler: () => {
+        ElMessage.success("数据导入成功!");
+        emit("onSuccess");
+        visible.value = false;
+      },
+       onError() {
+        if (Number(code) === 10004) {
+          ElMessageBox({
+            title: '以下对账单不符合要求',
+            message: h('div', null, [
+              h('p', null, '当前功能仅支持业务类型为采购订单的对账单,以下通用订单类型的对账单不支持该功能:'),
+              h('p', null, _d.join('、')),
+            ])
+          })
+         }else {
+          ElMessage.warning(message)
+         }
+      }
+    });
+  } catch (err) { 
+    console.log(err)
+  }
+};
+const cancel = () => {
+  tableData.value = [];
+};
+</script>
+
+<template>
+  <ElDialog
+    v-model="visible"
+    :close-on-click-modal="false"
+    title="批量创建盘点"
+    width="1040px"
+    top="8vh"
+    center
+  >
+    <execlUpload style="margin-bottom: 10px" @on-success="Uploadsuccess" v-if="tableData.length === 0" />
+
+    <el-table
+      :data="tableData"
+      stripe
+      border
+      max-height="500px"
+      size="small"
+      style="width: 100%"
+    >
+      <el-table-column
+        v-for="(si, sii) in columns"
+        :minWidth="si.minWidth"
+        show-overflow-tooltip
+        :fixed="si.fixed"
+        :prop="si.prop"
+        :type="si.type"
+        :key="sii"
+      >
+        <template #header>
+          <span v-if="!requireHeaders.includes(mapProp[si.prop]) || si.label === '序号' ">
+            {{ si.label }}
+          </span>
+          
+          <p v-else>
+            <span style="color: #f56c6c; font-size: 14px">* </span>
+            {{ si.label }}
+          </p>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div
+      flex
+      justify-end
+      gap-2
+      v-if="tableData.length !== 0"
+      style="padding: 10px 0 0 0"
+    >
+      <ElButton size="small" @click="cancel">取消</ElButton>
+      <el-button
+        size="small"
+        type="primary"
+        :loading="loading"
+        @click="handleSubmit"
+        >保存</el-button
+      >
+    </div>
+  </ElDialog>
+</template>
+
+<style lang="scss" scoped></style>

+ 3 - 2
src/views/invoiceInOut/inventoryCheck/components/ChooseGoodModal/config/content.config.ts

@@ -7,8 +7,9 @@ import { h } from "vue";
 
 const columns = [
   {
-    width: 40,
-    type: 'selection'
+    width: 30,
+    type: 'selection',
+    fixed: 'left'
   },
   {
     label: "商品编码",

+ 7 - 2
src/views/invoiceInOut/inventoryCheck/components/ChooseGoodModal/index.vue

@@ -29,7 +29,12 @@ const events: PageEvents = {
 
 function handleSubmit(){
    if(selection.value.length === 0){
-       ElMessage.warning('请选择至少一个子商品')
+       ElMessage.warning('请选择一个商品')
+       return
+   }
+
+   if(selection.value.length > 1){
+       ElMessage.warning('只能选择一个商品')
        return
    }
 
@@ -39,7 +44,7 @@ function handleSubmit(){
 </script>
 
 <template>
-    <ElDialog class="reactive" v-model="visible" title="选择商品" center top="10px">
+    <ElDialog class="relative" v-model="visible" title="选择商品" center top="10px">
       <PageContainer
         v-if="visible"
         :hooks="hooks"

+ 0 - 18
src/views/invoiceInOut/inventoryCheck/components/rules.ts

@@ -1,18 +0,0 @@
-export const rules = {
-    seller_code: [{ required: true, message: '请选择销售方公司', trigger: 'change' }],
-    buyer_code: [{ required: true, message: '请选择购买方公司', trigger: 'change' }],
-    good_source: [{ required: true, message: '请选择商品来源', trigger: 'change' }],
-    skuCode: [{ required: true, message: '请输入商品编号', trigger: 'change' }],
-    good_type: [{ required: true, message: '请选择订单商品类型', trigger: 'change' }],
-    is_combind: [{ required: true, message: '请选择组合类型', trigger: 'change' }],
-    goodName: [{ required: true, message: '请输入订单商品名称', trigger: 'change' }],
-    inv_good_name: [{ required: true, message: '请输入发票商品名称', trigger: 'change' }],
-    unit_price: [{ required: true, message: '请输入成本税前单价', trigger: 'change' }],
-    unit: [{ required: true, message: '请选择单位', trigger: 'change' }],
-    unit_weight: [{ required: true, message: '请选择重量', trigger: 'change' }],
-    subunit_price: [{ required: true, message: '请输入成本税后单价', trigger: 'change' }],
-    cat_code: [{ required: true, message: '请选择进项类目', trigger: 'change' }],
-    inv_type: [{ required: true, message: '请选择发票类型', trigger: 'change' }],
-    cat_tax: [{ required: true, message: '请选择进项税率', trigger: 'change' }],
-    basic_status: [{ required: true, message: '请选择进项成本类型', trigger: 'change' }]
-}

+ 13 - 23
src/views/invoiceInOut/inventoryCheck/components/shared.ts

@@ -53,26 +53,16 @@ export const invoice_columns = [
 
 
 export const createInitalData = () => ({
-    buyer_code: "",
-    buyer_name: "",
-    seller_code: "",
-    seller_name: "",
-    good_source: "",
-    good_code: '',
-    good_type: '',
-    is_combind: "1",
-    inv_good_name: "",
-    subunit_price: '',
-    basic_status: '',
-    unit_price: '',
-    goodName: "",
-    skuCode: '',
-    cat_code: '',
-    inv_type: '',
-    cat_tax: '',
-    spec: '',
-    unit: '',
-    unit_weight: '',
-    spectral: '',
-    childArr: []
-})
+    childArr: [],
+    num: '',
+    ykNum: '',
+    result: '',
+    month: ''
+})
+
+export const rules = {
+    childArr: [{ required: true, message:'请选择商品', trigger: 'change' }],
+    num: [{ required: true, message: '请输入盘点数量', trigger: 'change' }],
+    result: [{ required: true, message: '请选择结果类型', trigger: 'change' }],
+    month: [{ required: true, message: '请选择入账月份', trigger: 'change' }]
+}

+ 2 - 3
src/views/invoiceInOut/inventoryCheck/config/columns.ts

@@ -1,7 +1,6 @@
-import { render } from "nprogress";
-import { cg_order_type_options, statusList } from "/@/utils/status";
+import { cg_order_type_options } from "/@/utils/status";
+import { ElTable, ElTableColumn, ElTag  } from "element-plus";
 import { h } from "vue";
-import { ElTable, ElTableColumn, ElTag } from "element-plus";
 
 export const goodColumns = [
   {

+ 19 - 1
src/views/invoiceInOut/inventoryCheck/index.vue

@@ -4,9 +4,15 @@ import contentConfig from "./config/content.config";
 import searchConfig from "./config/search.config";
 import { useRouter } from "vue-router";
 
+import BatchCreateModal from "./components/BatchCreateModal/index.vue"
+import { ref } from "vue";
+
 const PageName = "productManager";
 const router = useRouter();
 
+
+const visible = ref(false)
+
 const hooks: PageHooks = {
   pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
 };
@@ -26,6 +32,18 @@ const events: PageEvents = {
       :events="events"
       :searchConfig="searchConfig"
       :contentConfig="contentConfig"
-    />
+    >
+      <template #content_header>
+        <ElButton 
+          type="primary" 
+          size="small" 
+          @click="visible = true"
+        >批量创建</ElButton>
+        
+        <ElButton size="small">批量导出当前结存数</ElButton>
+      </template>
+    </PageContainer>
+
+    <BatchCreateModal v-model:visible="visible" />
   </PageAuth>
 </template>

+ 1 - 1
src/views/invoiceInOut/productManager/config/content.config.ts

@@ -88,7 +88,7 @@ const columns = [
   {
     label: "操作",
     fixed: "right",
-    width: 80,
+    width: 70,
     slot: "operation"
   }
 ];

+ 0 - 40
src/views/invoiceInOut/productManager/config/modal.config.ts

@@ -1,40 +0,0 @@
-import { ModalConfig } from "../../../../components/PageModal/src/types";
-
-const modalConfig: ModalConfig = {
-  title: "客户",
-  itemStyle: {},
-  formItems: [
-    {
-      field: "companyNo",
-      type: "input",
-      label: "客户编码",
-      labelWidth: "120px"
-    },
-    {
-      field: "companyName",
-      type: "input",
-      labelWidth: "120px",
-      label: "客户名称"
-    },
-    {
-      field: "parent",
-      type: "input",
-      labelWidth: "120px",
-      label: "归属集团"
-    },
-    {
-      field: "contactor",
-      type: "input",
-      labelWidth: "120px",
-      label: "联系人"
-    },
-    {
-      field: "createTime",
-      type: "input",
-      labelWidth: "120px",
-      label: "创建时间"
-    }
-  ]
-};
-
-export default modalConfig;

+ 18 - 1
src/views/invoiceInOut/provisionOut/config/columns.ts

@@ -1,5 +1,22 @@
 export const goodColumns = [
-  { label: '业务编号', field: '' }
+  { label: '处理编号', field: 'TODO', span: 6 },
+  { label: '发票明细ID', field: 'TODO', span: 6 },
+  { label: '业务编号', field:'TODO', span: 6 },
+  { label: '商品编号', field: 'TODO', span: 6 },
+  { label: '商品名称', field: 'TODO', span: 6 },
+  { label: '商品数量', field: 'TODO', span: 6  },
+  { label: '税前单价', field: 'TODO', span: 6 },
+  { label: '税后单价', field: 'TODO', span: 6 },
+  { label: '出库金额', field: 'TODO', span: 6 },
+  
+  { 
+    label: '状态' , 
+    field: 'TODO' 
+  },
+
+  { label: '分光', field: 'TODO', span: 6 },
+  { label: '创建人', field: 'TODO', span: 6 },
+  { label: '创建时间', field: 'TODO', span: 6 }
 ]
 
 

+ 3 - 4
src/views/invoiceInOut/provisionOut/config/content.config.ts

@@ -14,13 +14,12 @@ const columns = [
   { 
     label: "状态", 
     width: 120,
-    cellRenderer(){
-      return null
-    }
+    cellRenderer(){ return null }
   },
+  
   { label: "创建人", prop: "TODO", width: 120 },
   { label: "创建时间", prop: "TODO", width: 120 },
-  { label: "操作", fixed: "right", width: 55, slot: "operation" }
+  { label: "操作", fixed: "right", width: 45, slot: "operation" }
 ];
 
 const contentConfig: ContentConfig = {

+ 52 - 8
src/views/invoiceInOut/provisionOut/detail.vue

@@ -1,11 +1,46 @@
 <script setup lang="ts">
 import BasicDescriptions from "/@/components/BasicDescriptions"
 import { useDetail } from "/@/hooks/core/useDetail"
-import { ElFormItem, ElForm } from "element-plus"
 import { NumberInput } from "/@/components/Input"
 import { goodColumns } from "./config/columns"
+import { ref } from "vue"
+
+import { 
+  ElFormItem, 
+  ElForm, 
+  ElButton, 
+  ElSelect, 
+  ElOption, 
+  ElTable, 
+  ElTableColumn, 
+  ElCollapseItem, 
+  ElCollapse, 
+  ElTabPane, 
+  ElTabs 
+} from "element-plus"
+
 
 const { id, isDetail, title, collapses } = useDetail({ baseName: '计提明细处理', collapseLen: 2 });
+
+const formRef = ref<InstanceType<typeof ElForm> | null>(null)
+
+const rules = {
+  isToAdjust: [{ required: true, message: '请选择是否添加至调整单', trigger: 'change' }],
+  amount: [{ required: true, message: '请输入调整金额', trigger: 'change' }]
+}
+
+const formData = ref({
+  isToAdjust: '',
+  amount: ''
+})
+
+async function handleSubmit(){
+  try{
+    await formRef.value?.validate()
+  }catch(err){
+    console.log(err)
+  }
+}
 </script>
 
 <template>
@@ -14,10 +49,15 @@ const { id, isDetail, title, collapses } = useDetail({ baseName: '计提明细
       <ElTabPane :label="title">
         <ElCollapse v-model="collapses">
           <ElCollapseItem :title="title" name="1">
-            <ElForm label-width="100px">
+            <ElForm 
+              label-width="100px" 
+              :model="formData"
+               ref="formRef" 
+              :rules="rules" 
+            >
               <ElFormItem label="计提明细">
                 <BasicDescriptions 
-                  style="margin-left: 40px" 
+                  style="width: 100%" 
                   :columns="goodColumns" 
                   :data="{}" 
                 />
@@ -36,19 +76,23 @@ const { id, isDetail, title, collapses } = useDetail({ baseName: '计提明细
                 </ElTable>
               </ElFormItem>
 
-              <ElFormItem label="调整金额">
-                <NumberInput placeholder="调整金额" />
+              <ElFormItem label="调整金额" prop="amount">
+                <NumberInput
+                  v-model="formData.amount" 
+                  placeholder="调整金额"
+                  disabled
+                />
               </ElFormItem>
 
-              <ElFormItem label="添加至调整单">
-                <ElSelect>
+              <ElFormItem label="添加至调整单" prop="isToAdjust">
+                <ElSelect v-model="formData.isToAdjust" placeholder="添加至调整单">
                   <ElOption label="是" value="1" />
                   <ElOption label="否" value="0" />
                 </ElSelect>
               </ElFormItem>
 
               <div class="flex w-full justify-end">
-                <ElButton type="primary">保存</ElButton>
+                <ElButton type="primary" @click="handleSubmit">保存</ElButton>
               </div>
             </ElForm>
           </ElCollapseItem>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio