codeMan 2 лет назад
Родитель
Сommit
65d1735912
83 измененных файлов с 347 добавлено и 1007 удалено
  1. 1 1
      dist/assets/PlusCircleOutlined-7b6d547e.js
  2. 0 0
      dist/assets/base-c2b12f0f.js
  3. 1 1
      dist/assets/customBtn-a9885ba6.js
  4. 0 0
      dist/assets/dataBlock-10ffeed4.js
  5. 0 0
      dist/assets/dataBlock-2da177f6.css
  6. 0 0
      dist/assets/dataBlock-619865d2.css
  7. 0 0
      dist/assets/index-0549beea.js
  8. 0 0
      dist/assets/index-06ff2d7a.js
  9. 0 0
      dist/assets/index-07b17fee.js
  10. 0 0
      dist/assets/index-0d98df4e.js
  11. 0 0
      dist/assets/index-1658c704.js
  12. 0 0
      dist/assets/index-1de3a1cd.js
  13. 0 0
      dist/assets/index-1e7b661b.js
  14. 0 0
      dist/assets/index-27651646.js
  15. 1 1
      dist/assets/index-2b7a1bb2.js
  16. 0 0
      dist/assets/index-31359fee.js
  17. 0 0
      dist/assets/index-3476d36a.js
  18. 0 0
      dist/assets/index-3e5777e8.js
  19. 0 0
      dist/assets/index-3f4d5c10.js
  20. 0 0
      dist/assets/index-4898cd68.js
  21. 0 0
      dist/assets/index-4c0b16af.js
  22. 0 0
      dist/assets/index-4da91a77.js
  23. 0 0
      dist/assets/index-519bfbde.js
  24. 0 0
      dist/assets/index-59a121b1.js
  25. 0 0
      dist/assets/index-5e49665d.css
  26. 0 0
      dist/assets/index-69c5c0a0.js
  27. 0 0
      dist/assets/index-74b3d740.js
  28. 0 0
      dist/assets/index-7607348c.js
  29. 0 0
      dist/assets/index-7b8dbae0.js
  30. 0 0
      dist/assets/index-7c77b9e4.js
  31. 0 0
      dist/assets/index-84dcdc2e.js
  32. 0 0
      dist/assets/index-88c431a9.js
  33. 0 0
      dist/assets/index-8a617dd8.js
  34. 1 1
      dist/assets/index-99c67dd9.js
  35. 0 0
      dist/assets/index-9a7efc3d.js
  36. 1 1
      dist/assets/index-9d19f479.js
  37. 0 0
      dist/assets/index-a1484d83.js
  38. 0 0
      dist/assets/index-a47265d2.js
  39. 0 1
      dist/assets/index-a5b2198c.js
  40. 0 0
      dist/assets/index-a97c8917.js
  41. 0 0
      dist/assets/index-ab9fe68f.js
  42. 0 0
      dist/assets/index-af8b8cc0.js
  43. 0 0
      dist/assets/index-b0f81e81.js
  44. 0 0
      dist/assets/index-b76a2430.js
  45. 0 0
      dist/assets/index-bbb7cd4f.js
  46. 0 0
      dist/assets/index-beaefac1.js
  47. 0 0
      dist/assets/index-ccbcd954.js
  48. 0 0
      dist/assets/index-d634a4ef.js
  49. 0 0
      dist/assets/index-d6badbbd.js
  50. 0 1
      dist/assets/index-db36acb0.css
  51. 0 0
      dist/assets/index-e05e304a.js
  52. 0 0
      dist/assets/index-eb9d1793.js
  53. 1 0
      dist/assets/index-ec126cff.js
  54. 0 0
      dist/assets/index-f20c45a8.js
  55. 0 0
      dist/assets/index-f5622f9a.js
  56. 0 0
      dist/assets/index-f806b384.js
  57. 0 0
      dist/assets/index-f83414f8.js
  58. 0 0
      dist/assets/index-f8a268e5.js
  59. 1 0
      dist/assets/index-fefe2ec2.css
  60. 1 1
      dist/assets/index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-0f8068d1.js
  61. 0 0
      dist/assets/index2-777ed307.js
  62. 1 1
      dist/assets/login-a0dd1524.js
  63. 0 0
      dist/assets/map-b8d3642a.js
  64. 1 1
      dist/index.html
  65. BIN
      src/assets/deviced/电池.png
  66. 4 0
      src/system/IOT/productManage/detail/index.vue
  67. 74 1
      src/system/IOT/productManage/detail/modules/Edit.vue
  68. 78 4
      src/system/IOT/productManage/modules/Add.vue
  69. 1 1
      src/system/IOT/valveAssets/modules/Add.vue
  70. 1 1
      src/system/IOT/valveAssets/modules/Edit.vue
  71. 9 2
      src/system/moduleNormal/enterpriseArchives/detail/modules/edit.vue
  72. 0 3
      src/system/moduleNormal/enterpriseArchives/index.vue
  73. 0 80
      src/system/moduleNormal/productManage/detail/index.vue
  74. 0 161
      src/system/moduleNormal/productManage/detail/modules/Edit.vue
  75. 0 46
      src/system/moduleNormal/productManage/index.vue
  76. 0 155
      src/system/moduleNormal/productManage/modules/Add.vue
  77. 0 202
      src/system/moduleNormal/productManage/modules/selectAllData.vue
  78. 0 285
      src/system/moduleNormal/productManage/modules/selectSiteProduct.vue
  79. 118 48
      src/system/moduleNormal/systemRemind/modules/Edit.vue
  80. 1 1
      src/system/moduleNormal/userManage/detail/index.vue
  81. 21 3
      src/system/moduleNormal/userManage/detail/modules/edit.vue
  82. 24 3
      src/system/moduleNormal/userManage/modules/add.vue
  83. 6 1
      src/template/normalTable/index.vue

+ 1 - 1
dist/assets/PlusCircleOutlined-579d718a.js → dist/assets/PlusCircleOutlined-7b6d547e.js

@@ -1 +1 @@
-import{b as a}from"./index-7db3d923.js";import{j as u}from"./vue-b109b72f.js";var s={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};const o=s;function i(r){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?Object(arguments[t]):{},n=Object.keys(e);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(e).filter(function(c){return Object.getOwnPropertyDescriptor(e,c).enumerable}))),n.forEach(function(c){f(r,c,e[c])})}return r}function f(r,t,e){return t in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var l=function(t,e){var n=i({},t,e.attrs);return u(a,i({},n,{icon:o}),null)};l.displayName="PlusCircleOutlined";l.inheritAttrs=!1;const m=l;export{m as P};
+import{b as a}from"./index-1e7b661b.js";import{j as u}from"./vue-b109b72f.js";var s={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};const o=s;function i(r){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?Object(arguments[t]):{},n=Object.keys(e);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(e).filter(function(c){return Object.getOwnPropertyDescriptor(e,c).enumerable}))),n.forEach(function(c){f(r,c,e[c])})}return r}function f(r,t,e){return t in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var l=function(t,e){var n=i({},t,e.attrs);return u(a,i({},n,{icon:o}),null)};l.displayName="PlusCircleOutlined";l.inheritAttrs=!1;const m=l;export{m as P};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/base-c2b12f0f.js


+ 1 - 1
dist/assets/customBtn-d4e872d7.js → dist/assets/customBtn-a9885ba6.js

@@ -1 +1 @@
-import"./index-7db3d923.js";import{_ as B}from"./_plugin-vue_export-helper-c27b6911.js";import{a as _,c as C,V as t,W as a,a4 as d,F as b,a2 as f,$ as s,a1 as k,a0 as g,u as c,a7 as x,R as h}from"./vue-b109b72f.js";const S={class:"btn-box"},F=["onClick"],N={key:0,class:"icon1"},O={key:0,class:"content"},$={__name:"customBtn",props:{btnOptions:Array,btn:!1,tab:{type:Boolean,default:()=>!1},select:{type:Boolean,default:()=>!1},activeNormal:{type:Boolean,default:()=>!0},selectDisabled:{type:Boolean,default:()=>!1},btnColor:{type:String,default:()=>"rgb(22,255,246,.30)"},textColor:{type:String,default:()=>"#16FFF6"},icon1:{type:Boolean,default:()=>!1}},emits:["clickBtn","selectChange"],setup(e,{expose:v,emit:m}){const r=e;let n=_(r.activeNormal?r.btnOptions[0].label:""),y=C(o=>i=>(console.log(n.value),i.value==n.value)),p=o=>{n.value=o.label,m("clickBtn",o)};return v({active:n}),(o,i)=>(t(),a("div",null,[d("div",{class:"btn-wrapper",style:k([{"--btnColor":e.btnColor},{"--textColor":e.textColor}])},[d("div",S,[(t(!0),a(b,null,f(e.btnOptions,l=>(t(),a("div",{class:g(["btn-item",c(n)==l.label?"active":"",{active:e.btn}]),onClick:u=>c(p)(l)},x(l.label),11,F))),256))]),e.icon1?(t(),a("div",N)):s("",!0)],4),e.tab?(t(),a("div",O,[(t(!0),a(b,null,f(e.btnOptions,(l,u)=>(t(),a("div",null,[c(y)(l)?h(o.$slots,`slot${u}`,{key:0,data:l},void 0,!0):s("",!0)]))),256))])):s("",!0)]))}},w=B($,[["__scopeId","data-v-277be93f"]]);export{w as c};
+import"./index-1e7b661b.js";import{_ as B}from"./_plugin-vue_export-helper-c27b6911.js";import{a as _,c as C,V as t,W as a,a4 as d,F as b,a2 as f,$ as s,a1 as k,a0 as g,u as c,a7 as x,R as h}from"./vue-b109b72f.js";const S={class:"btn-box"},F=["onClick"],N={key:0,class:"icon1"},O={key:0,class:"content"},$={__name:"customBtn",props:{btnOptions:Array,btn:!1,tab:{type:Boolean,default:()=>!1},select:{type:Boolean,default:()=>!1},activeNormal:{type:Boolean,default:()=>!0},selectDisabled:{type:Boolean,default:()=>!1},btnColor:{type:String,default:()=>"rgb(22,255,246,.30)"},textColor:{type:String,default:()=>"#16FFF6"},icon1:{type:Boolean,default:()=>!1}},emits:["clickBtn","selectChange"],setup(e,{expose:v,emit:m}){const r=e;let n=_(r.activeNormal?r.btnOptions[0].label:""),y=C(o=>i=>(console.log(n.value),i.value==n.value)),p=o=>{n.value=o.label,m("clickBtn",o)};return v({active:n}),(o,i)=>(t(),a("div",null,[d("div",{class:"btn-wrapper",style:k([{"--btnColor":e.btnColor},{"--textColor":e.textColor}])},[d("div",S,[(t(!0),a(b,null,f(e.btnOptions,l=>(t(),a("div",{class:g(["btn-item",c(n)==l.label?"active":"",{active:e.btn}]),onClick:u=>c(p)(l)},x(l.label),11,F))),256))]),e.icon1?(t(),a("div",N)):s("",!0)],4),e.tab?(t(),a("div",O,[(t(!0),a(b,null,f(e.btnOptions,(l,u)=>(t(),a("div",null,[c(y)(l)?h(o.$slots,`slot${u}`,{key:0,data:l},void 0,!0):s("",!0)]))),256))])):s("",!0)]))}},w=B($,[["__scopeId","data-v-277be93f"]]);export{w as c};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/dataBlock-10ffeed4.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/dataBlock-2da177f6.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/dataBlock-619865d2.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-0549beea.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-06ff2d7a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-07b17fee.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-0d98df4e.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-1658c704.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-1de3a1cd.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-1e7b661b.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-27651646.js


+ 1 - 1
dist/assets/index-eaff948a.js → dist/assets/index-2b7a1bb2.js

@@ -1 +1 @@
-import{M as o,A as c,e as m}from"./index-7db3d923.js";import{U as l,V as u,a3 as p,X as y,G as d,a7 as g,u as S}from"./vue-b109b72f.js";const N={__name:"index",props:{type:String,btnName:String,message:String,idName:String,keyName:String,id:[String,Number],paramData:{type:Array,default(){return[]}},size:String},emits:["onSuccess"],setup(e,{emit:r}){const t=e;let i=()=>{o.confirm({title:t.message||"确定操作当前数据吗?",async onOk(){let a={content:{}};a.id=t.idName,a.content[t.keyName]=t.id,t.paramData.forEach(n=>{a.content[n.key]=n.value});let s=await c.requested(a);m.message(s,"操作成功",()=>{r("onSuccess")})},onCancel(){}})};return(a,s)=>{const n=l("a-button");return u(),p(n,{type:e.type?e.type:"primary",onClick:S(i),size:e.size||"small"},{default:y(()=>[d(g(e.btnName),1)]),_:1},8,["type","onClick","size"])}}};export{N as _};
+import{M as o,A as c,e as m}from"./index-1e7b661b.js";import{U as l,V as u,a3 as p,X as y,G as d,a7 as g,u as S}from"./vue-b109b72f.js";const N={__name:"index",props:{type:String,btnName:String,message:String,idName:String,keyName:String,id:[String,Number],paramData:{type:Array,default(){return[]}},size:String},emits:["onSuccess"],setup(e,{emit:r}){const t=e;let i=()=>{o.confirm({title:t.message||"确定操作当前数据吗?",async onOk(){let a={content:{}};a.id=t.idName,a.content[t.keyName]=t.id,t.paramData.forEach(n=>{a.content[n.key]=n.value});let s=await c.requested(a);m.message(s,"操作成功",()=>{r("onSuccess")})},onCancel(){}})};return(a,s)=>{const n=l("a-button");return u(),p(n,{type:e.type?e.type:"primary",onClick:S(i),size:e.size||"small"},{default:y(()=>[d(g(e.btnName),1)]),_:1},8,["type","onClick","size"])}}};export{N as _};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-31359fee.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-3476d36a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-3e5777e8.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-3f4d5c10.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-4898cd68.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-4c0b16af.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-4da91a77.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-519bfbde.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-59a121b1.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-5e49665d.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-69c5c0a0.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-74b3d740.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-7607348c.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-7b8dbae0.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-7c77b9e4.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-84dcdc2e.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-88c431a9.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-8a617dd8.js


+ 1 - 1
dist/assets/index-646767bf.js → dist/assets/index-99c67dd9.js

@@ -1 +1 @@
-import{l as n}from"./index-83756981.js";import{a as e,o as p,V as s,W as i,j as c,X as l,u as a}from"./vue-b109b72f.js";import"./vue-router-e4a270fb.js";import"./index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-044b34a2.js";import"./index-7db3d923.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./base-c429fa62.js";const x={__name:"index",setup(m){const t=e();let r=e([{label:"范围",key:"isnext",type:"select",dataSource:[{remarks:"今年",value:"0"},{remarks:"明年",value:"1"}]},{label:"时间范围",key:"dateRange",type:"datepickerRange",objKeys:["begindate","enddate"]}]),o=e({content:{pageNumber:1,pageSize:20,where:{condition:""}},id:20221215165504});return p(()=>{}),(u,d)=>(s(),i("div",null,[c(n,{ref_key:"list",ref:t,keyRouteName:"accountno",param:a(o),tableName:"vacationTable",searchType:a(r)},{operation:l(()=>[]),_:1},8,["param","searchType"])]))}};export{x as default};
+import{l as n}from"./index-ab9fe68f.js";import{a as e,o as p,V as s,W as i,j as c,X as l,u as a}from"./vue-b109b72f.js";import"./vue-router-e4a270fb.js";import"./index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-0f8068d1.js";import"./index-1e7b661b.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./base-c2b12f0f.js";const x={__name:"index",setup(m){const t=e();let r=e([{label:"范围",key:"isnext",type:"select",dataSource:[{remarks:"今年",value:"0"},{remarks:"明年",value:"1"}]},{label:"时间范围",key:"dateRange",type:"datepickerRange",objKeys:["begindate","enddate"]}]),o=e({content:{pageNumber:1,pageSize:20,where:{condition:""}},id:20221215165504});return p(()=>{}),(u,d)=>(s(),i("div",null,[c(n,{ref_key:"list",ref:t,keyRouteName:"accountno",param:a(o),tableName:"vacationTable",searchType:a(r)},{operation:l(()=>[]),_:1},8,["param","searchType"])]))}};export{x as default};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-9a7efc3d.js


+ 1 - 1
dist/assets/index-8d4acbe9.js → dist/assets/index-9d19f479.js

@@ -1 +1 @@
-import{l as d}from"./index-83756981.js";import{a as u,A as f}from"./index-7db3d923.js";import{u as x}from"./vue-router-e4a270fb.js";import{_ as y}from"./_plugin-vue_export-helper-c27b6911.js";import{a as s,U as h,V as r,W as b,j as k,X as n,G as g,a3 as w,a4 as A,a7 as B,$ as v,u as i}from"./vue-b109b72f.js";import"./index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-044b34a2.js";import"./base-c429fa62.js";const N={class:"y-container"},S=["onClick"],C={__name:"index",setup(V){x();let c=s([]);s([]);let l=u(),p=s({content:{pageNumber:1,pageSize:20,systemappid:l.app.systemappid},id:20221213094401});const _=()=>{let t=window.location.href,e=t.indexOf("/"),o=0;for(;e!=-1;)if(o++,e=t.indexOf("/",e+1),o++==3)return t.slice(0,e)},m=async t=>{console.log("http://60.204.153.188/");let e=await f.requested({id:20221213094501,content:{sys_reportid:t.sys_reportid,dataid:0}});window.open(_()+e.data)};return(t,e)=>{const o=h("a-button");return r(),b("div",N,[k(d,{columns:i(c),param:i(p),tableName:"reportcenterTable"},{operation:n(()=>[g(" 报表中心 ")]),tb_cell:n(({data:a})=>[a.column.dataIndex=="name"?(r(),w(o,{key:0,type:"link"},{default:n(()=>[A("span",{class:"btn-link",onClick:I=>m(a.record)},B(a.record.name),9,S)]),_:2},1024)):v("",!0)]),_:1},8,["columns","param"])])}}},j=y(C,[["__scopeId","data-v-b9e552e1"]]);export{j as default};
+import{l as d}from"./index-ab9fe68f.js";import{a as u,A as f}from"./index-1e7b661b.js";import{u as x}from"./vue-router-e4a270fb.js";import{_ as y}from"./_plugin-vue_export-helper-c27b6911.js";import{a as s,U as h,V as r,W as b,j as k,X as n,G as g,a3 as w,a4 as A,a7 as B,$ as v,u as i}from"./vue-b109b72f.js";import"./index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-0f8068d1.js";import"./base-c2b12f0f.js";const N={class:"y-container"},S=["onClick"],C={__name:"index",setup(V){x();let c=s([]);s([]);let l=u(),p=s({content:{pageNumber:1,pageSize:20,systemappid:l.app.systemappid},id:20221213094401});const _=()=>{let t=window.location.href,e=t.indexOf("/"),o=0;for(;e!=-1;)if(o++,e=t.indexOf("/",e+1),o++==3)return t.slice(0,e)},m=async t=>{console.log("http://60.204.153.188/");let e=await f.requested({id:20221213094501,content:{sys_reportid:t.sys_reportid,dataid:0}});window.open(_()+e.data)};return(t,e)=>{const o=h("a-button");return r(),b("div",N,[k(d,{columns:i(c),param:i(p),tableName:"reportcenterTable"},{operation:n(()=>[g(" 报表中心 ")]),tb_cell:n(({data:a})=>[a.column.dataIndex=="name"?(r(),w(o,{key:0,type:"link"},{default:n(()=>[A("span",{class:"btn-link",onClick:I=>m(a.record)},B(a.record.name),9,S)]),_:2},1024)):v("",!0)]),_:1},8,["columns","param"])])}}},j=y(C,[["__scopeId","data-v-b9e552e1"]]);export{j as default};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-a1484d83.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-a47265d2.js


+ 0 - 1
dist/assets/index-a5b2198c.js

@@ -1 +0,0 @@
-import{n as g}from"./index-88c431a9.js";import{m as k}from"./index-7db3d923.js";import{a as d,w as y,U as D,V as l,W as o,j as u,X as f,ab as _,R as r,F as b,G as R,a7 as S,u as m,H as C}from"./vue-b109b72f.js";const T={key:0},V={key:1},$={__name:"index",props:{title:String,wdith:String,custom:{type:Object,default:()=>!1}},emits:["selectRowData","close"],setup(i,{expose:p,emit:c}){let s=d(),e=d(!1),v=()=>{if(!s.value.tableRecord.length)return k.warning("请选择数据");e.value=!1,c("selectRowData",s.value.tableRecord)};y(()=>e.value,(t,n)=>{t||s.value.reloadSelect()});let h=()=>{c("close")};return p({modeVisible:e,refreshTable:()=>{s.value.listData()}}),(t,n)=>{const w=D("a-modal");return l(),o(b,null,[u(w,{visible:m(e),"onUpdate:visible":n[0]||(n[0]=a=>C(e)?e.value=a:e=a),class:"custom-class",title:i.title||"标题",placement:"right",width:i.wdith||"1200px",closable:!1,onClose:m(h),onOk:m(v)},{default:f(()=>[u(g,_(t.$attrs,{ref_key:"list",ref:s,size:"small",onListData:t.listData}),{tb_cell:f(({data:a})=>[i.custom?(l(),o("div",T,[r(t.$slots,"custom",{data:a})])):(l(),o("div",V,[a.column.dataIndex==="operation"?r(t.$slots,"handleBtn",{key:0}):(l(),o(b,{key:1},[R(S(a.record[a.column.dataIndex]),1)],64))]))]),_:3},16,["onListData"])]),_:3},8,["visible","title","width","onClose","onOk"]),r(t.$slots,"slot1")],64)}}};export{$ as _};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-a97c8917.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-ab9fe68f.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-af8b8cc0.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-b0f81e81.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-b76a2430.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-bbb7cd4f.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-beaefac1.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-ccbcd954.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-d634a4ef.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-d6badbbd.js


+ 0 - 1
dist/assets/index-db36acb0.css

@@ -1 +0,0 @@
-.ant-table-striped[data-v-5e1d75e1] td{font-size:12px}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-e05e304a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-eb9d1793.js


+ 1 - 0
dist/assets/index-ec126cff.js

@@ -0,0 +1 @@
+import{n as g}from"./index-f20c45a8.js";import{m as k}from"./index-1e7b661b.js";import{a as d,w as y,U as D,V as l,W as o,j as u,X as f,ab as _,R as r,F as b,G as R,a7 as S,u as m,H as C}from"./vue-b109b72f.js";const T={key:0},V={key:1},$={__name:"index",props:{title:String,wdith:String,custom:{type:Object,default:()=>!1}},emits:["selectRowData","close"],setup(i,{expose:p,emit:c}){let s=d(),e=d(!1),v=()=>{if(!s.value.tableRecord.length)return k.warning("请选择数据");e.value=!1,c("selectRowData",s.value.tableRecord)};y(()=>e.value,(t,n)=>{t||s.value.reloadSelect()});let h=()=>{c("close")};return p({modeVisible:e,refreshTable:()=>{s.value.listData()},list:s}),(t,n)=>{const w=D("a-modal");return l(),o(b,null,[u(w,{visible:m(e),"onUpdate:visible":n[0]||(n[0]=a=>C(e)?e.value=a:e=a),class:"custom-class",title:i.title||"标题",placement:"right",width:i.wdith||"1200px",closable:!1,onClose:m(h),onOk:m(v)},{default:f(()=>[u(g,_(t.$attrs,{ref_key:"list",ref:s,size:"small",onListData:t.listData}),{tb_cell:f(({data:a})=>[i.custom?(l(),o("div",T,[r(t.$slots,"custom",{data:a})])):(l(),o("div",V,[a.column.dataIndex==="operation"?r(t.$slots,"handleBtn",{key:0}):(l(),o(b,{key:1},[R(S(a.record[a.column.dataIndex]),1)],64))]))]),_:3},16,["onListData"])]),_:3},8,["visible","title","width","onClose","onOk"]),r(t.$slots,"slot1")],64)}}};export{$ as _};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-f20c45a8.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-f5622f9a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-f806b384.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-f83414f8.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index-f8a268e5.js


+ 1 - 0
dist/assets/index-fefe2ec2.css

@@ -0,0 +1 @@
+.ant-table-striped[data-v-b8cb0c21] td{font-size:12px}

+ 1 - 1
dist/assets/index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-044b34a2.js → dist/assets/index.vue_vue_type_style_index_0_scoped_f6f545f0_lang-0f8068d1.js

@@ -1 +1 @@
-import{a as i,s as r,k as m,e as u,A as p}from"./index-7db3d923.js";const h=i();let{tableConfigs:c,app:d}=r(h);const v=m("columnStore",{state:()=>({colIndex:[],checkedColumns:[],columnsIndex:[],selectedColumns:0,cacheData:{},time:null}),persist:{enabled:!0,strategies:[{storage:localStorage,paths:[]}]},getters:{},actions:{userSetting(e){this.selectedColumns=new Date,c.value[`${d.value.systemappid}${e}`]={},c.value[`${d.value.systemappid}${e}`].columnsIndex=this.columnsIndex,c.value[`${d.value.systemappid}${e}`].checkedColumns=this.checkedColumns,this.saveConfig(c.value)},getUserSetting(e){console.log(d.value);let l=[],a=new Map,o=u.TBLayout(e),n=c.value[`${d.value.systemappid}${e}`];return n&&o.length==n.columnsIndex.length?(u.TBLayout(e).map(s=>({value:s.dataIndex,label:s.title})).forEach(s=>{a.set(s.value,s.label)}),this.checkedColumns=n.checkedColumns,n.columnsIndex=this.columnsIndex=n.columnsIndex.length==0?u.TBLayout(e).map(s=>s.dataIndex):n.columnsIndex,n.columnsIndex.forEach(s=>{l.push({value:s,label:a.get(s)})}),l):(this.checkedColumns=this.columnsIndex=u.TBLayout(e).map(t=>t.dataIndex),l=u.TBLayout(e).map(t=>({value:t.dataIndex,label:t.title})),l)},loadTableConfig(e){let l=u.TBLayout(e),a=c.value[`${d.value.systemappid}${e}`],o=[],n=new Map;try{return a&&l.length==a.columnsIndex.length?(l.forEach(t=>{n.set(t.dataIndex,t)}),a.columnsIndex.forEach(t=>{o.push(n.get(t))}),o=o.filter(t=>{if(a.checkedColumns.some(s=>s===t.dataIndex))return t}),o):l}catch{}},async saveConfig(e){await p.requested({classname:"sysmanage.develop.users.users",method:"updateClientConfig",content:{config:JSON.stringify(e)}})}}});export{v as u};
+import{a as i,s as r,k as m,e as u,A as p}from"./index-1e7b661b.js";const h=i();let{tableConfigs:c,app:d}=r(h);const v=m("columnStore",{state:()=>({colIndex:[],checkedColumns:[],columnsIndex:[],selectedColumns:0,cacheData:{},time:null}),persist:{enabled:!0,strategies:[{storage:localStorage,paths:[]}]},getters:{},actions:{userSetting(e){this.selectedColumns=new Date,c.value[`${d.value.systemappid}${e}`]={},c.value[`${d.value.systemappid}${e}`].columnsIndex=this.columnsIndex,c.value[`${d.value.systemappid}${e}`].checkedColumns=this.checkedColumns,this.saveConfig(c.value)},getUserSetting(e){console.log(d.value);let l=[],a=new Map,o=u.TBLayout(e),n=c.value[`${d.value.systemappid}${e}`];return n&&o.length==n.columnsIndex.length?(u.TBLayout(e).map(s=>({value:s.dataIndex,label:s.title})).forEach(s=>{a.set(s.value,s.label)}),this.checkedColumns=n.checkedColumns,n.columnsIndex=this.columnsIndex=n.columnsIndex.length==0?u.TBLayout(e).map(s=>s.dataIndex):n.columnsIndex,n.columnsIndex.forEach(s=>{l.push({value:s,label:a.get(s)})}),l):(this.checkedColumns=this.columnsIndex=u.TBLayout(e).map(t=>t.dataIndex),l=u.TBLayout(e).map(t=>({value:t.dataIndex,label:t.title})),l)},loadTableConfig(e){let l=u.TBLayout(e),a=c.value[`${d.value.systemappid}${e}`],o=[],n=new Map;try{return a&&l.length==a.columnsIndex.length?(l.forEach(t=>{n.set(t.dataIndex,t)}),a.columnsIndex.forEach(t=>{o.push(n.get(t))}),o=o.filter(t=>{if(a.checkedColumns.some(s=>s===t.dataIndex))return t}),o):l}catch{}},async saveConfig(e){await p.requested({classname:"sysmanage.develop.users.users",method:"updateClientConfig",content:{config:JSON.stringify(e)}})}}});export{v as u};

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/index2-777ed307.js


+ 1 - 1
dist/assets/login-cefb7e17.js → dist/assets/login-a0dd1524.js

@@ -1,4 +1,4 @@
-import{u as useRouter}from"./vue-router-e4a270fb.js";import{c as commonjsGlobal,u as useRouteTabsStore,a as useAuthStore,s as storeToRefs,A as Api,m as message}from"./index-7db3d923.js";import{_ as _imports_0}from"./LOGO-5fe40572.js";import{_ as _export_sfc}from"./_plugin-vue_export-helper-c27b6911.js";import{d as defineComponent,U as resolveComponent,V as openBlock,W as createElementBlock,a4 as createBaseVNode,j as createVNode,X as withCtx,a1 as normalizeStyle,G as createTextVNode,a as ref,r as reactive,a5 as pushScopeId,a6 as popScopeId}from"./vue-b109b72f.js";var md5Exports={},md5$1={get exports(){return md5Exports},set exports(e){md5Exports=e}};/**
+import{u as useRouter}from"./vue-router-e4a270fb.js";import{c as commonjsGlobal,u as useRouteTabsStore,a as useAuthStore,s as storeToRefs,A as Api,m as message}from"./index-1e7b661b.js";import{_ as _imports_0}from"./LOGO-5fe40572.js";import{_ as _export_sfc}from"./_plugin-vue_export-helper-c27b6911.js";import{d as defineComponent,U as resolveComponent,V as openBlock,W as createElementBlock,a4 as createBaseVNode,j as createVNode,X as withCtx,a1 as normalizeStyle,G as createTextVNode,a as ref,r as reactive,a5 as pushScopeId,a6 as popScopeId}from"./vue-b109b72f.js";var md5Exports={},md5$1={get exports(){return md5Exports},set exports(e){md5Exports=e}};/**
  * [js-md5]{@link https://github.com/emn178/js-md5}
  *
  * @namespace md5

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/assets/map-b8d3642a.js


+ 1 - 1
dist/index.html

@@ -5,7 +5,7 @@
     <link rel="icon" type="image/svg+xml" href="./vite.svg" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>班尼戈水务管理</title>
-    <script type="module" crossorigin src="./assets/index-7db3d923.js"></script>
+    <script type="module" crossorigin src="./assets/index-1e7b661b.js"></script>
     <link rel="modulepreload" crossorigin href="./assets/vue-b109b72f.js">
     <link rel="modulepreload" crossorigin href="./assets/vue-router-e4a270fb.js">
     <link rel="stylesheet" href="./assets/index-8790befc.css">

BIN
src/assets/deviced/电池.png


+ 4 - 0
src/system/IOT/productManage/detail/index.vue

@@ -131,6 +131,10 @@ const changeDataStructure = (data) => {
       return style
     }},
     {label:'设备数量',value:userData.value.device_count},
+    {
+      label:'是否指令反馈',
+      value:data.isfeedback ? '是' : '否'
+    },
     {label:'描述',value:userData.value.remarks},
   ]
   systemInfoData.value = [

+ 74 - 1
src/system/IOT/productManage/detail/modules/Edit.vue

@@ -21,6 +21,28 @@
             <a-input v-model:value="form.prodname" placeholder="请输入产品名称"></a-input>
           </a-form-item>
         </a-col>
+        <a-col :span="24">
+          <a-form-item  label="产品分类" name="prodclassname">
+            <SelectModel 
+              ref="Class" 
+              @selectRowData="selectClass" 
+              rowKey="w_prodclassid" 
+              :param="classParam" 
+              :filterMultiple="true" 
+              :columns="utils.TBLayout('categoryTable')" title="选择产品分类"
+              @handleList="handleList"
+            >
+              <template v-slot:slot1>
+                <a-input-search
+                  v-model:value="form.prodclassname"
+                  enter-button="添加"
+                  readonly
+                  @search="$refs.Class.modeVisible=true"
+                />
+              </template>
+            </SelectModel>
+          </a-form-item>
+        </a-col>
         <a-col :span="24">
           <a-form-item  label="设备类型" name="prodtype" :rules="[{ required: true, message: '请选择设备类型' }]">
             <a-select
@@ -58,6 +80,11 @@
             </SelectModel> -->
           </a-form-item>
         </a-col>
+        <a-col :span="24">
+          <a-form-item  label="是否指令反馈" name="isfeedback">
+            <a-radio-group v-model:value="form.isfeedback" :options="feedbackList" />
+          </a-form-item>
+        </a-col>
         <a-col :span="24">
           <a-form-item  label="描述" name="remarks">
             <a-textarea v-model:value="form.remarks" placeholder="请输入描述"></a-textarea>
@@ -102,7 +129,8 @@ let form = ref({
   "remarks": "",
   "isused": 0,
   "enterprisename":'',
-  'dashboardpath':''
+  'dashboardpath':'',
+  'isfeedback':''
 })
 let classParam = ref({
   "id": 20230609105302,
@@ -111,6 +139,7 @@ let classParam = ref({
 let enterpriseList = ref([])
 let typeList = ref([])
 let formRef = ref()
+let feedbackList = ref([{label:'是',value:1},{label:'否',value:0}])
 let onSubmit = async () => {
   let isCheck = await formRef.value.validateFields()
   if (!isCheck) return
@@ -146,6 +175,50 @@ let getEnterpriseList = async () => {
   console.log(enterpriseList.value)
 }
 
+let selectClass = (data) => {
+  console.log(data);
+  form.value.prodclassname = data[data.length-1].prodclassname
+  form.value.w_prodclassid = data[data.length-1].w_prodclassid
+}
+
+let handleList = (res) => {
+  console.log(res);
+  res.data = createDeep(res.data)
+}
+let createDeep = (array) => {
+  let arr = []
+  function deepFun (node) {
+    console.log(node,'触发');
+    let elNode = {
+      changeby:node['changeby'],
+      changeuserid:node['changeuserid'],
+      createby:node['createby'],
+      createuserid:node['createuserid'],
+      parentid:node['parentid'],
+      prodclassname:node['prodclassname'],
+      prodclassnum:node['prodclassnum'],
+      remarks:node['remarks'],
+      sequence:node['sequence'],
+      w_prodclassid:node['w_prodclassid'],
+      children:[]
+    }
+    if (node.sub && node.sub.length > 0) {
+      // 如果存在子节点
+      for (var index = 0; index < node.sub.length; index++) {
+      // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+      elNode.children.push(deepFun(node.sub[index]));
+      }
+    }
+    if (!elNode.children.length) delete elNode.children
+    return elNode
+  }
+  array.forEach(item => {
+    console.log(item);
+    arr.push(deepFun(item))
+  })
+  return arr
+}
+
 onMounted(async () => {
   getEnterpriseList()
   let res = await base.optiontypeselect('prodtype')

+ 78 - 4
src/system/IOT/productManage/modules/Add.vue

@@ -21,6 +21,28 @@
             <a-input v-model:value="form.prodname" placeholder="请输入产品名称"></a-input>
           </a-form-item>
         </a-col>
+        <a-col :span="24">
+          <a-form-item  label="产品分类" name="prodclassname">
+            <SelectModel 
+              ref="Class" 
+              @selectRowData="selectClass" 
+              rowKey="w_prodclassid" 
+              :param="classParam" 
+              :filterMultiple="true" 
+              :columns="utils.TBLayout('categoryTable')" title="选择产品分类"
+              @handleList="handleList"
+            >
+              <template v-slot:slot1>
+                <a-input-search
+                  v-model:value="form.prodclassname"
+                  enter-button="添加"
+                  readonly
+                  @search="$refs.Class.modeVisible=true"
+                />
+              </template>
+            </SelectModel>
+          </a-form-item>
+        </a-col>
         <a-col :span="24">
           <a-form-item  label="设备类型" name="prodtype" :rules="[{ required: true, message: '请选择设备类型' }]">
             <a-select
@@ -58,6 +80,11 @@
             </SelectModel> -->
           </a-form-item>
         </a-col>
+        <a-col :span="24">
+          <a-form-item  label="是否指令反馈" name="isfeedback">
+            <a-radio-group v-model:value="form.isfeedback" :options="feedbackList" />
+          </a-form-item>
+        </a-col>
         <a-col :span="24">
           <a-form-item  label="描述" name="remarks">
             <a-textarea v-model:value="form.remarks" placeholder="请输入描述"></a-textarea>
@@ -95,13 +122,15 @@ let visible = ref(false)
 let form = ref({
   "w_productid": 0,
   "w_prodclassid": 0,
+  "prodclassname":'',
   "prodnum": "",
-  "prodname": "",
-  "prodtype": "",
-  "sys_enterpriseid": '',
+  "prodname": undefined,
+  "prodtype": undefined,
+  "sys_enterpriseid": undefined,
   "remarks": "",
   "isused": 0,
-  "enterprisename":''
+  "enterprisename":undefined,
+  'isfeedback':1
 })
 let classParam = ref({
   "id": 20230609105302,
@@ -110,6 +139,7 @@ let classParam = ref({
 let enterpriseList = ref([])
 let typeList = ref([])
 let formRef = ref()
+let feedbackList = ref([{label:'是',value:1},{label:'否',value:0}])
 
 let addBtn = async () => {
   visible.value = true
@@ -149,6 +179,50 @@ let getEnterpriseList = async () => {
   console.log(res,'企业res');
   console.log(enterpriseList.value,'企业')
 }
+
+let selectClass = (data) => {
+  console.log(data);
+  form.value.prodclassname = data[data.length-1].prodclassname
+  form.value.w_prodclassid = data[data.length-1].w_prodclassid
+}
+
+let handleList = (res) => {
+  console.log(res);
+  res.data = createDeep(res.data)
+}
+let createDeep = (array) => {
+  let arr = []
+  function deepFun (node) {
+    console.log(node,'触发');
+    let elNode = {
+      changeby:node['changeby'],
+      changeuserid:node['changeuserid'],
+      createby:node['createby'],
+      createuserid:node['createuserid'],
+      parentid:node['parentid'],
+      prodclassname:node['prodclassname'],
+      prodclassnum:node['prodclassnum'],
+      remarks:node['remarks'],
+      sequence:node['sequence'],
+      w_prodclassid:node['w_prodclassid'],
+      children:[]
+    }
+    if (node.sub && node.sub.length > 0) {
+      // 如果存在子节点
+      for (var index = 0; index < node.sub.length; index++) {
+      // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+      elNode.children.push(deepFun(node.sub[index]));
+      }
+    }
+    if (!elNode.children.length) delete elNode.children
+    return elNode
+  }
+  array.forEach(item => {
+    console.log(item);
+    arr.push(deepFun(item))
+  })
+  return arr
+}
 </script>
 
 <style scoped>

+ 1 - 1
src/system/IOT/valveAssets/modules/Add.vue

@@ -112,7 +112,7 @@
           </a-form-item>
         </a-col>
         <a-col :span="24" v-for="(item,index) in form.dataextend">
-        <a-form-item  label="自定义选项" name="dataextend">
+        <a-form-item  label="自定义属性" name="dataextend">
           <div style="display: flex;">
             <a-input v-model:value="item.fieldname" placeholder="请输入描述" style="margin-right: 10px;"></a-input>
             <a-input v-model:value="item.fieldvalue" placeholder="请输入值" style="margin-right: 10px;"></a-input>

+ 1 - 1
src/system/IOT/valveAssets/modules/Edit.vue

@@ -112,7 +112,7 @@
           </a-form-item>
         </a-col>
         <a-col :span="24" v-for="(item,index) in form.dataextend">
-        <a-form-item  label="自定义选项" name="dataextend">
+        <a-form-item  label="自定义属性" name="dataextend">
           <div style="display: flex;">
             <a-input v-model:value="item.fieldname" placeholder="请输入描述" style="margin-right: 10px;"></a-input>
             <a-input v-model:value="item.fieldvalue" placeholder="请输入值" style="margin-right: 10px;"></a-input>

+ 9 - 2
src/system/moduleNormal/enterpriseArchives/detail/modules/edit.vue

@@ -16,9 +16,9 @@
             <a-form-item label="企业名称" name="enterprisename" :rules="[{ required: true, message: '请输入企业名称' }]">
               <a-input  v-model:value="form.enterprisename"
                 placeholder="输入企业名称">
-                <!-- <template #addonAfter>
+                <template #addonAfter>
                    <business-info :value="form.enterprisename" @onSelect="onSelect"></business-info>
-                </template> -->
+                </template>
               </a-input>
             </a-form-item>
           </a-col>
@@ -88,6 +88,7 @@ import {ref,defineEmits,defineProps} from 'vue'
 import Api from '@/api/api'
 import utils from '@/utils/utils'
 import { storeToRefs } from 'pinia'
+import { useRouter } from 'vue-router'
 import { useBaseStore } from '@/stores/modules/base'
 import businessInfo from '@/template/businessInfo/index.vue'
 const props = defineProps(['data'])
@@ -100,6 +101,7 @@ const form = ref({
   enterprisename:'',
   cascaderValue:null
 })
+let router = useRouter()
 const formRef = ref()
 const Provinces = ref([])
 const showDrawer = async ()=>{
@@ -137,7 +139,9 @@ const onChange = ()=>{
   })
 }
 const onSelect = (info)=>{
+  console.log(info);
   form.value = {
+    sys_enterpriseid:router.currentRoute.value.query.id,
     enterprisename:info.companyName,
     contact:info.legalPerson,
     phonenumber:info.phone,
@@ -145,8 +149,11 @@ const onSelect = (info)=>{
     city:info.regCity,
     county:info.regArea,
     address:info.address,
+    taxno:info.taxNum,
+    entcode:form.value.entcode,
     cascaderValue:[info.regProvince,info.regCity,info.regArea]
   }
+
 }
 const customertype = async ()=>{
   const res = await Api.optionstype('customertypemx')

+ 0 - 3
src/system/moduleNormal/enterpriseArchives/index.vue

@@ -8,9 +8,6 @@
         <template v-if="data.column.dataIndex === 'iscooperatesite'">
           {{data.record.iscooperatesite == 1?'是':'否'}}
         </template>
-        <template v-if="data.column.dataIndex === 'operation'">
-          <a-button type="link" @click="toDetailPage(data.record)">详 情</a-button>
-        </template>
       </template>
     </listTemp>
   </div>

+ 0 - 80
src/system/moduleNormal/productManage/detail/index.vue

@@ -1,80 +0,0 @@
-<template>
-  <div>
-    <!-- :disable="utils.isDisabled(userData.status,['ACTIVE'])" -->
-    <detail-template 
-      :headData="mainAreaData" 
-      :title="`${userData.prodname}(${userData.prodnum})`" 
-      :tabs="['负责团队','参与团队']" 
-      ownertable="user" 
-      :delParam="{id:'20221031141202',content:{userids:[router.currentRoute.value.query.id]}}" 
-      >
-      <template #operation>
-        <Edit :data="userData" @onSuccess="mianData"></Edit>
-      </template>
-      <!-- <template #tab0>
-        <normal-table size="small" :columns="utils.TBLayout('partakeTeamTable')" :param="{id: 20230302174201, content: {leaderuserid:router.currentRoute.value.query.id}}"></normal-table>
-      </template> -->
-    </detail-template>
-  </div>
-</template>
-
-<script setup>
-import Api from '@/api/api'
-import utils  from '@/utils/utils'
-
-import normalTable from '@/template/normalTable/index.vue'
-import detailTemplate from '@/components/detailTemplate/index.vue'
-import Edit from './modules/Edit.vue'
-import { message, Modal } from 'ant-design-vue'
-import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
-import { useRouter } from "vue-router";
-import { onMounted,ref,createVNode } from "vue"
-const router = useRouter()
-const mainAreaData = ref([])
-
-const userData = ref({})
-const mianData = async ()=>{
-  const res = await Api.requested({
-    "id":20230612152502,
-    "content": {
-      "w_productid": router.currentRoute.value.query.id
-    }
-  })
-  userData.value = res.data
-  changeDataStructure(res.data)
-
-}
-const changeDataStructure = (data) => {
-  mainAreaData.value = [
-    {
-      label:'产品编码',
-      value:data.prodnum
-    },
-    {
-      label:'产品名称',
-      value:data.prodname
-    },
-    {
-      label:'设备类型',
-      value:data.prodtype
-    },
-    {
-      label:'厂商',
-      value:data.enterprisename
-    },
-    {
-      label:'状态',
-      value:data.isused ? '启用':'停用'
-    },
-    {
-      label:'描述',
-      value:data.remarks
-    },
-  ]
-}
-onMounted (()=>{
-  mianData()
-})
-</script>
-<style>
-</style>

+ 0 - 161
src/system/moduleNormal/productManage/detail/modules/Edit.vue

@@ -1,161 +0,0 @@
-<template>
-  <a-button type="primary" @click="editBtn">编辑</a-button>
-  <a-drawer
-    v-model:visible="visible"
-    class="custom-class"
-    title="编辑产品"
-    placement="right"
-    width="500px"
-    :closable="false"
-    @close="visible = false"
-  >
-    <a-form ref="formRef" :model="form" size="small" layout="vertical" mode="multiple">
-      <a-row :gutter="16">
-        <a-col :span="24">
-          <a-form-item  label="产品编码" name="prodnum" :rules="[{ required: true, message: '请输入产品编码' }]">
-            <a-input v-model:value="form.prodnum" placeholder="请输入产品编码"></a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="产品名称" name="prodname" :rules="[{ required: true, message: '请输入产品名称' }]">
-            <a-input v-model:value="form.prodname" placeholder="请输入产品名称"></a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="设备类型" name="prodtype" :rules="[{ required: true, message: '请选择设备类型' }]">
-            <a-select
-              v-model:value="form.prodtype"
-              
-            >
-              <a-select-option :value="item.value" v-for="(item,index) in typeList" :key="index">{{ item.value }}</a-select-option>
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="厂商" name="sys_enterpriseid" :rules="[{required:true,message:'请选择厂商'}]">
-            <a-select
-              v-model:value="form.sys_enterpriseid"
-            >
-              <a-select-option v-for="item in enterpriseList" :key="item.sys_enterpriseid" :value="item.sys_enterpriseid">{{ item.enterprisename }}</a-select-option>
-            </a-select>
-            <!-- <SelectModel 
-              ref="Class" 
-              @selectRowData="selectClass" 
-              rowKey="w_prodclassid" 
-              :param="classParam" 
-              :filterMultiple="true" 
-              :columns="utils.TBLayout('categoryTable')" title="选择厂商"
-              @handleList="handleList"
-            >
-              <template v-slot:slot1>
-                <a-input-search
-                  v-model:value="form.enterprisename"
-                  enter-button="选择"
-                  readonly
-                  @search="$refs.Class.modeVisible=true"
-                />
-              </template>
-            </SelectModel> -->
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="描述" name="remarks">
-            <a-textarea v-model:value="form.remarks" placeholder="请输入描述"></a-textarea>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="是否启用" name="isused">
-            <a-checkbox v-model:checked="form.isused"></a-checkbox>
-          </a-form-item>
-        </a-col>
-      </a-row>
-    </a-form>
-    <template #extra>
-      <a-space>
-        <a-button @click="visible=false">关闭</a-button>
-        <a-button type="primary" @click="onSubmit">保存</a-button>
-      </a-space>
-    </template>
-  </a-drawer>
-</template>
-
-<script setup>
-import {ref, defineProps, defineEmits, onMounted} from 'vue'
-import SelectModel from '@/components/selectModel/index.vue'
-import Api from '@/api/api'
-import utils from '@/utils/utils'
-import { useBaseStore } from '@/stores/modules/base'
-import { storeToRefs } from 'pinia'
-
-let base = useBaseStore()
-let emit = defineEmits(['onSuccess'])
-let props = defineProps({
-  data:Object
-})
-let searchType = ref([{label:'搜索',key:'condition',type:'input'}])
-let visible = ref(false)
-let form = ref({
-  "w_productid": 0,
-  "w_prodclassid": 0,
-  "prodnum": "",
-  "prodname": "",
-  "prodtype": "",
-  "sys_enterpriseid": '',
-  "remarks": "",
-  "isused": 0,
-  "enterprisename":''
-})
-let classParam = ref({
-  "id": 20230609105302,
-  "content": {},
-})
-let enterpriseList = ref([])
-let typeList = ref([])
-let formRef = ref()
-let onSubmit = async () => {
-  let isCheck = await formRef.value.validateFields()
-  if (!isCheck) return
-  let res = await Api.requested({
-    id:20230609150202,
-    content: form.value
-  })
-  utils.message(res,'操作成功',() => {
-    visible.value = false
-    emit('onSuccess')
-    formRef.value.resetFields()
-    console.log(res);
-  })
-}
-
-let editBtn = () => {
-  visible.value = true
-  form.value = Object.assign({},form.value,props.data)
-}
-
-let getEnterpriseList = async () => {
-  let res = await Api.requested({
-    "id": 20230612091102,
-    "content": {
-        "pageNumber": 1,
-        "pageSize": 9999999,
-        "where": {
-            "condition": ""
-        }
-    }
-  })
-  enterpriseList.value = res.data
-  console.log(enterpriseList.value)
-}
-
-onMounted(async () => {
-  getEnterpriseList()
-  let res = await Api.optionstype('prodtype')
-  typeList.value = res.data
-  console.log(typeList,'分类数据');
-})
-
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 46
src/system/moduleNormal/productManage/index.vue

@@ -1,46 +0,0 @@
-<template>
-  <listTemp ref="list" :param="param" :tableName="'productListTable'" keyRouteName="prodname" :searchType="searchType" :detailPage="{name:'productDetail',idname:'w_productid'}">
-    <template #operation>
-      <Add @onSuccess="$refs.list.tableData()"></Add>
-      <!-- <selectSiteProduct @onSuccess="$refs.list.tableData()"></selectSiteProduct> -->
-    </template>
-    <template #tb_cell="{data}">
-      <template v-if="data.column.dataIndex === 'operation'">
-      </template>
-      <template v-if="data.column.dataIndex === 'isused'">
-        <span :style="{color:utils.statusAndColor(data.record.isused ? '启用' : '停用')}">{{ data.record.isused ? '启用' : '停用' }}</span>
-      </template>
-    </template>
-  </listTemp>
-</template>
-
-<script setup>
-import listTemp from '@/components/listTemplate/index.vue'
-import normalTable from '@/template/normalTable/index.vue'
-import customBtn from '@/components/customHandleBtn/index.vue'
-import Add from './modules/Add.vue'
-import selectSiteProduct from './modules/selectSiteProduct.vue'
-import {ref, defineProps, defineEmits} from 'vue'
-import Api from '@/api/api'
-import utils from '@/utils/utils'
-let emit = defineEmits([])
-let props = defineProps({})
-let searchType = ref([{label:'搜索',key:'condition',type:'input'}])
-let param = ref({
-  "id": 20230612103202,
-  "content": {
-      "pageNumber": 1,
-      "pageSize": 20,
-      "where": {
-          "condition": "",
-          "prodtype": "",
-          "enterprisename": "",
-          "isused": "" //0,1
-      }
-  },
-})
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 155
src/system/moduleNormal/productManage/modules/Add.vue

@@ -1,155 +0,0 @@
-<template>
-  <a-button type="primary" @click="visible=true" style="margin-right:10px">新建</a-button>
-  <a-drawer
-    v-model:visible="visible"
-    class="custom-class"
-    title="新建产品"
-    placement="right"
-    width="500px"
-    :closable="false"
-    @close="visible = false"
-  >
-    <a-form ref="formRef" :model="form" size="small" layout="vertical" mode="multiple">
-      <a-row :gutter="16">
-        <a-col :span="24">
-          <a-form-item  label="产品编码" name="prodnum" :rules="[{ required: true, message: '请输入产品编码' }]">
-            <a-input v-model:value="form.prodnum" placeholder="请输入产品编码"></a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="产品名称" name="prodname" :rules="[{ required: true, message: '请输入产品名称' }]">
-            <a-input v-model:value="form.prodname" placeholder="请输入产品名称"></a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="设备类型" name="prodtype" :rules="[{ required: true, message: '请选择设备类型' }]">
-            <a-select
-              v-model:value="form.prodtype"
-              
-            >
-              <a-select-option :value="item.value" v-for="(item,index) in typeList" :key="index">{{ item.value }}</a-select-option>
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="厂商" name="sys_enterpriseid" :rules="[{required:true,message:'请选择厂商'}]">
-            <a-select
-              v-model:value="form.sys_enterpriseid"
-            >
-              <a-select-option v-for="item in enterpriseList" :key="item.sys_enterpriseid" :value="item.sys_enterpriseid">{{ item.enterprisename }}</a-select-option>
-            </a-select>
-            <!-- <SelectModel 
-              ref="Class" 
-              @selectRowData="selectClass" 
-              rowKey="w_prodclassid" 
-              :param="classParam" 
-              :filterMultiple="true" 
-              :columns="utils.TBLayout('categoryTable')" title="选择厂商"
-              @handleList="handleList"
-            >
-              <template v-slot:slot1>
-                <a-input-search
-                  v-model:value="form.enterprisename"
-                  enter-button="选择"
-                  readonly
-                  @search="$refs.Class.modeVisible=true"
-                />
-              </template>
-            </SelectModel> -->
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="描述" name="remarks">
-            <a-textarea v-model:value="form.remarks" placeholder="请输入描述"></a-textarea>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item  label="是否启用" name="isused">
-            <a-checkbox v-model:checked="form.isused"></a-checkbox>
-          </a-form-item>
-        </a-col>
-      </a-row>
-    </a-form>
-    <template #extra>
-      <a-space>
-        <a-button @click="visible=false">关闭</a-button>
-        <a-button type="primary" @click="onSubmit">保存</a-button>
-      </a-space>
-    </template>
-  </a-drawer>
-</template>
-
-<script setup>
-import {ref, defineProps, defineEmits, onMounted} from 'vue'
-import SelectModel from '@/components/selectModel/index.vue'
-import Api from '@/api/api'
-import utils from '@/utils/utils'
-import { useBaseStore } from '@/stores/modules/base'
-import { storeToRefs } from 'pinia'
-
-let base = useBaseStore()
-let emit = defineEmits(['onSuccess'])
-let props = defineProps({})
-let searchType = ref([{label:'搜索',key:'condition',type:'input'}])
-let visible = ref(false)
-let form = ref({
-  "w_productid": 0,
-  "w_prodclassid": 0,
-  "prodnum": "",
-  "prodname": "",
-  "prodtype": "",
-  "sys_enterpriseid": '',
-  "remarks": "",
-  "isused": 0,
-  "enterprisename":''
-})
-let classParam = ref({
-  "id": 20230609105302,
-  "content": {},
-})
-let enterpriseList = ref([])
-let typeList = ref([])
-let formRef = ref()
-let onSubmit = async () => {
-  let isCheck = await formRef.value.validateFields()
-  if (!isCheck) return
-  form.value.isused = form.value.isused ? 1 : 0
-  let res = await Api.requested({
-    id:20230609150202,
-    content: form.value
-  })
-  utils.message(res,'操作成功',() => {
-    visible.value = false
-    emit('onSuccess')
-    formRef.value.resetFields()
-    console.log(res);
-  })
-}
-
-let getEnterpriseList = async () => {
-  let res = await Api.requested({
-    "id": 20230612091102,
-    "content": {
-        "pageNumber": 1,
-        "pageSize": 9999999,
-        "where": {
-            "condition": ""
-        }
-    }
-  })
-  enterpriseList.value = res.data
-  console.log(enterpriseList.value)
-}
-
-onMounted(async () => {
-  getEnterpriseList()
-  let res = await Api.optionstype('prodtype')
-  typeList.value = res.data
-  console.log(typeList,'分类数据');
-})
-
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 202
src/system/moduleNormal/productManage/modules/selectAllData.vue

@@ -1,202 +0,0 @@
-<template>
-  <div>
-    <a-button type="primary" class="inline-16" @click="allProduct" v-if="type=='upload'">一 键 全 选</a-button>
-    <a-button type="primary" class="inline-16" @click="allProduct" v-else>一 键 删 除</a-button>
-    <a-modal
-      v-model:visible="progressVisible"
-      class="custom-class"
-      placement="right"
-      width="500px"
-    >
-      <a-progress v-if="totalPage" :percent="Math.floor(progress / totalPage * 100)"></a-progress>
-    </a-modal>
-  </div>
-</template>
-
-<script setup>
-import listTemp from '@/components/listTemplate/index.vue'
-import normalTable from '@/template/normalTable/index.vue'
-import {ref, defineProps, defineEmits} from 'vue'
-import {Modal} from 'ant-design-vue'
-import Api from '@/api/api'
-import utils from '@/utils/utils'
-let emit = defineEmits(['handlePullApi','handleUploadApi','onSuccess','emitCallBack'])
-let props = defineProps({
-  dataSize: {
-    type:[Number,String],
-    default:() => 200
-  },
-  total: {
-    type:[Number,String],
-    default:() => 0
-  },
-  type: {
-    type:String,
-    default:() => 'upload'
-  },
-  idName: {
-    type: [Number,String]
-  },
-  dataType:{
-    type:[String],
-    default:() => '商品'
-  },
-  disabled:{
-    type:[]
-  },
-  isEmit: {
-    type: Object,
-    default:() => false
-  }
-})
-
-let totalPage = ref(0)
-let progress = ref(0)
-let progressVisible = ref(false)
-let deleteIds = ref([])
-
-let allProduct = () => {
-  if (props.total > props.dataSize) {
-    Modal.confirm({
-      title:'提示',
-      content:`总共有${props.total}个${props.dataType},是否确定${props.type == 'upload' ? '提交' : '删除'}`,
-      async onOk() {
-        /* 打断 */
-        if (props.isEmit) {
-          emit('emitCallBack',() => {
-            progressVisible.value = true
-            props.type == 'upload' ? totalPage.value = Math.ceil(props.total / props.dataSize) * 2 : totalPage.value = Math.ceil(props.total / props.dataSize)
-            let totalPages = Math.ceil(props.total / props.dataSize)
-            for (let index = 1; index <= totalPages; index++) {
-              pullData(index)
-            }
-          })
-        } else {
-          progressVisible.value = true
-          props.type == 'upload' ? totalPage.value = Math.ceil(total.value / props.dataSize) * 2 : totalPage.value = Math.ceil(props.total / props.dataSize)
-          let totalPage = Math.ceil(props.total / props.dataSize)
-          for (let index = 1; index <= totalPage; index++) {
-            pullData(index)
-          }
-        }
-      },
-    })
-  } else {
-    Modal.confirm({
-      title:'提示',
-      content:`总共有${props.total}个${props.dataType},是否确定${props.type == 'upload' ? '提交' : '删除'}`,
-      async onOk() {
-        if (!props.total) return
-        if(props.isEmit) {
-          return emit('emitCallBack',async () => {
-            let pullApi = {}
-            /**
-             * 暴露出去操作 修改拉取请求  
-             * @param pullApi - 拉取数据的请求接口
-            */
-            emit('handlePullApi',pullApi)
-            pullApi.content.pageNumber = 1
-            pullApi.content.pageSize = props.dataSize
-
-            const res = await Api.requested(pullApi)
-
-            if (props.type == 'upload') {
-              let uploadApi = {}
-              /**
-               * 暴露出去操作 修改上传请求
-               * @param1 uploadApi - 上传接口
-               * @param2 res.data - 拉取的上传数据
-               */
-              emit('handleUploadApi',uploadApi,res.data)
-
-              const res2 = await Api.requested(uploadApi)
-              utils.message(res2,'添加成功',() => {
-                emit('onSuccess',res2.data)
-              })
-            } else {
-              deleteIds.value.push(...res.data.map(item => item[props.idName]))
-              deleteOrderProduct(deleteIds.value)
-            }
-          })
-        }
-        let pullApi = {}
-        /**
-         * 暴露出去操作 修改拉取请求  
-         * @param pullApi - 拉取数据的请求接口
-        */
-        emit('handlePullApi',pullApi)
-        pullApi.content.pageNumber = 1
-        pullApi.content.pageSize = props.dataSize
-
-        const res = await Api.requested(pullApi)
-
-        if (props.type == 'upload') {
-          let uploadApi = {}
-          /**
-           * 暴露出去操作 修改上传请求
-           * @param1 uploadApi - 上传接口
-           * @param2 res.data - 拉取的上传数据
-           */
-          emit('handleUploadApi',uploadApi,res.data)
-
-          const res2 = await Api.requested(uploadApi)
-          utils.message(res2,() => {
-            emit('onSuccess',res2.data)
-          })
-        } else {
-          deleteIds.value.push(...res.data.map(item => item[props.idName]))
-          deleteOrderProduct(deleteIds.value)
-        }
-      },
-    })
-  }
-}
-/* 拉取数据 */
-let pullData = async (page) => {
-  let pullApi = {}
-  /**
-   * 暴露出去操作 修改拉取请求  
-   * @param pullApi - 拉取数据的请求接口
-  */
-  emit('handlePullApi',pullApi)
-  pullApi.content.pageNumber = page
-  pullApi.content.pageSize = props.dataSize
-  const res = await Api.requested(pullApi)
-  progress.value++
-  if (props.type == 'upload') {
-    uploadData(res.data)
-    if (progress.value >= totalPage.value) {
-      emit('onSuccess')
-      progressVisible.value = false
-      progress.value = 0
-    }
-  } else {
-    deleteIds.value.push(...res.data.map(item => item[props.idName]))
-    if (progress.value >= totalPage.value) {
-      deleteOrderProduct(deleteIds.value)
-      progressVisible.value = false
-    }
-  }
-}
-/* 添加数据 */
-let uploadData = async (data) => {
-  let uploadApi = {}
-  /**
-   * 暴露出去操作 修改上传请求
-   * @param1 uploadApi - 上传接口
-   * @param2 res.data - 拉取的上传数据
-   */
-  emit('handleUploadApi',uploadApi,data)
-  const res = await Api.requested(uploadApi)
-  progress.value++
-  if (progress.value >= totalPage.value) {
-    emit('onSuccess')
-    progressVisible.value = false
-    progress.value = 0
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 285
src/system/moduleNormal/productManage/modules/selectSiteProduct.vue

@@ -1,285 +0,0 @@
-<template>
-  <a-drawer
-    v-model:visible="modeVisible"
-    class="custom-class"
-    title="自产品库添加"
-    placement="right"
-    width="1200px"
-    :closable="false"
-    @close="modeVisible = false"
-  >
-    <div style="margin-bottom:16px;display:flex">
-      <a-button type="primary" @click="handleAdd" style="margin-right:25px" :disabled="handleBtnDisabled">批量添加</a-button>
-      
-      <selectAllData 
-        style="margin-right: 25px"
-        :total="total"
-        @handlePullApi="handlePullApi"
-        @handleUploadApi="handleUploadApi"
-        @onSuccess="emit('onSuccess')"
-        @emitCallBack="emitCallBack"
-        :isEmit="true"
-      ></selectAllData>
-
-      <div style="margin-right: 25px;">
-        <span>搜索:</span>
-        <a-input v-model:value="param.content.where.condition" placeholder="产品编码/名称" style="width:200px"></a-input>
-      </div>
-      <div style="margin-right: 25px;">
-        <span>设备类型:</span>
-        <a-select
-          v-model:value="param.content.where.prodtype"
-          style="width:200px"
-          placeholder="请选择设备类型"
-          @change="$refs.list.listData()"
-          allowClear
-        >
-          <a-select-option :value="item.value" v-for="(item,index) in typeList" :key="index">{{ item.value }}</a-select-option>
-        </a-select>
-      </div>
-      <div>
-        <span>厂商:</span>
-        <a-select
-        style="width:200px"
-          v-model:value="param.content.where.enterprisename"
-          @change="$refs.list.listData()"
-          allowClear
-        >
-          <a-select-option v-for="item in enterpriseList" :key="item.sys_enterpriseid" :value="item.sys_enterpriseid">{{ item.enterprisename }}</a-select-option>
-        </a-select>
-      </div>
-    </div>
-    <normalTable rowKey="w_productid" ref="list" size="small" :param="param" :columns="utils.TBLayout('productListTable')" @onSelect="onSelect" @handleList="handleProduct">
-      <template #tb_cell="{data}">
-        <template v-if="data.column.dataIndex === 'operation'">
-          <a-button type="link" size="small" @click="addProduct(data.record)">添加</a-button>
-        </template>
-        <template v-else>
-          {{ data.record[data.column.dataIndex] }}
-        </template>
-      </template>
-    </normalTable>
-    <template #extra>
-      <a-space>
-        <a-button @click="visible=false">关闭</a-button>
-      </a-space>
-    </template>
-  </a-drawer>
-  <SelectModel 
-    ref="Class" 
-    @selectRowData="selectClass" 
-    rowKey="w_prodclassid" 
-    :param="classParam" 
-    :filterMultiple="true" 
-    :columns="utils.TBLayout('categoryTable')" title="选择产品分类"
-    @handleList="handleList"
-    @close="classClose"
-  >
-  </SelectModel>
-  <a-button type="primary" @click="modeVisible=true">自产品库添加</a-button>
-</template>
-<script setup>
-import normalTable from '@/template/normalTable/index.vue'
-import selectAllData from './selectAllData.vue'
-import SelectModel from '@/components/selectModel/index.vue'
-import { useBaseStore } from '@/stores/modules/base'
-import {ref, defineProps, defineEmits, onMounted, computed} from 'vue'
-import { useRouter } from 'vue-router'
-import Api from '@/api/api'
-import utils from '@/utils/utils'
-
-import {message} from 'ant-design-vue' 
-
-let router = useRouter()
-let base = useBaseStore()
-let emit = defineEmits(['selectRowData','onSuccess'])
-let props = defineProps({
-})
-let param = ref({
-    "id": 20230612101702,
-    "content": {
-      "pageNumber": 1,
-      "pageSize": 20,
-      "where": {
-          "condition": "",
-          "prodtype": "",
-          "enterprisename": ""
-      }
-    },
-})
-let classParam = ref({
-  "id": 20230609105302,
-  "content": {},
-})
-let Class = ref()
-let typeList = ref([])
-let enterpriseList = ref([])
-let list = ref()
-let selectRowData = ref([])
-let selectOneData = ref({})
-let modeVisible = ref(false)
-let cacheFun = ref('')
-let selectClassArr = ref([])
-let total = ref(0)
-
-let addProduct = (data) => {
-  actionClassSelect(data)
-}
-
-let handleAdd = async () => {
-  Class.value.modeVisible = true
-}
-
-let onSelect = (data) => {
-  selectRowData.value = data
-}
-
-let handleBtnDisabled = computed(() => {
-  return selectRowData.value.length > 0 ? false : true
-})
-
-let emitCallBack = (fun) => {
-  cacheFun.value = fun
-  Class.value.modeVisible = true
-}
-
-/* 选中产品分类 */
-let selectClass = async (data) => {
-  let res
-  selectClassArr.value = data
-  if (cacheFun.value) {
-    cacheFun.value()
-    return
-  }
-  if (Object.keys(selectOneData.value).length) {
-    res = await Api.requested({
-      "id": 20230612112302,
-      "content": {
-        "items": [
-            {
-                "w_productid": selectOneData.value.w_productid,
-                "w_prodclassid": data[data.length - 1].w_prodclassid
-            }
-        ]
-      },
-    })
-  } else {
-    let items = selectRowData.value.map(item => {
-      return {
-        "w_productid":item.w_productid,
-        "w_prodclassid":data[data.length - 1].w_prodclassid
-      }
-    })
-
-    res = await Api.requested({
-      "id": 20230612112302,
-      "content": {
-        "items": items
-      },
-    })
-  }
-  utils.message(res,'添加成功',() => {
-    emit('onSuccess')
-    selectOneData.value = []
-  })
-}
-
-let classClose = () => {
-  selectOneData.value = []
-}
-
-/* 激活分类选择窗口 */
-let actionClassSelect = (data) => {
-  Class.value.modeVisible = true
-  selectOneData.value = data
-}
-
-let getEnterpriseList = async () => {
-  let res = await Api.requested({
-    "id": 20230612091102,
-    "content": {
-        "pageNumber": 1,
-        "pageSize": 9999999,
-        "where": {
-            "condition": ""
-        }
-    }
-  })
-  enterpriseList.value = res.data
-  console.log(enterpriseList.value)
-}
-
-/*改变产品分类列表数据结构 sub:[] => children:[] */
-let handleList = (res) => {
-  res.data = createDeep(res.data)
-}
-let handleProduct = (res) => {
-  total.value =res.total
-}
-let createDeep = (array) => {
-  let arr = []
-  function deepFun (node) {
-    console.log(node,'触发');
-    let elNode = {
-      changeby:node['changeby'],
-      changeuserid:node['changeuserid'],
-      createby:node['createby'],
-      createuserid:node['createuserid'],
-      parentid:node['parentid'],
-      prodclassname:node['prodclassname'],
-      prodclassnum:node['prodclassnum'],
-      remarks:node['remarks'],
-      sequence:node['sequence'],
-      w_prodclassid:node['w_prodclassid'],
-      children:[]
-    }
-    if (node.sub && node.sub.length > 0) {
-      // 如果存在子节点
-      for (var index = 0; index < node.sub.length; index++) {
-      // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
-      elNode.children.push(deepFun(node.sub[index]));
-      }
-    }
-    if (!elNode.children.length) delete elNode.children
-    return elNode
-  }
-  array.forEach(item => {
-    console.log(item);
-    arr.push(deepFun(item))
-  })
-  return arr
-}
-
-/*拉取数据*/
-let handlePullApi = (pullApi) => {
-  pullApi.content = JSON.parse(JSON.stringify(param.value.content))
-  pullApi.id = param.value.id
-  /*pullApi.content.sa_projectid = this.$route.query.id*/
-}
-/*上传数据*/
-let handleUploadApi = (uploadApi,data) => {
-  uploadApi.id = 20230612112302
-  uploadApi.content = {
-    "items": data.map(e=>{
-      return {
-        "w_productid":e.w_productid,
-        "w_prodclassid":selectClassArr.value[selectClassArr.value.length - 1].w_prodclassid,
-      }
-    })
-  }
-}
-
-onMounted(async () => {
-  getEnterpriseList()
-  let res = await Api.optionstype('prodtype')
-  typeList.value = res.data
-})
-
-defineExpose({
-  modeVisible
-})
-</script>
-
-<style scoped>
-
-</style>

+ 118 - 48
src/system/moduleNormal/systemRemind/modules/Edit.vue

@@ -50,16 +50,22 @@
         </a-col>
         <a-col :span="24" v-if="form.isrole">
           <a-form-item  label="角色选择" name="rolename">
-            <selectRole ref="Role" @selectRoles="selectRoles">
-              <template v-slot:input>
-                <a-input-search
-                  v-model:value="form.rolename"
-                  enter-button="添加"
-                  readonly
-                  @search="roleClick"
-                />
+            <SelectModel 
+              ref="Role" 
+              @selectRowData="selectRoles" 
+              rowKey="roleid" 
+              :param="roleParam" 
+              :columns="utils.TBLayout('roleTable')" title="选择角色"
+            >
+              <template v-slot:slot1>
+                <template v-for="(tag, index) in form.roleArr" :key="tag">
+                  <a-tag closable @close.prevent="closeRole(tag)">
+                    {{ tag.rolename }}
+                  </a-tag>
+                </template>
+                <a-button size="small" @click="roleShow">+ 添 加</a-button>
               </template>
-            </selectRole>
+            </SelectModel>
           </a-form-item>
         </a-col>
         <a-col :span="24">
@@ -69,16 +75,27 @@
         </a-col>
         <a-col :span="24" v-if="form.isuser">
           <a-form-item  label="人员选择" name="username">
-            <selectPeople ref="People" @selectPeople="selectPeoples">
-              <template v-slot:input>
-                <a-input-search
-                  v-model:value="form.username"
-                  enter-button="添加"
-                  readonly
-                  @search="peopleClick"
-                />
+            <SelectModel 
+              ref="People" 
+              @selectRowData="selectPeoples" 
+              rowKey="userid" 
+              :param="peopleParam" 
+              :columns="utils.TBLayout('staffTable')" title="选择人员"
+            >
+              <template v-slot:slot1>
+                <template v-for="(tag, index) in form.userArr" :key="tag">
+                  <a-tag closable @close.prevent="closePeople(tag)">
+                    {{ tag.name }}
+                  </a-tag>
+                </template>
+                <a-button size="small" @click="PeopleShow">+ 添 加</a-button>
               </template>
-            </selectPeople>
+            </SelectModel>
+          </a-form-item>
+        </a-col>
+        <a-col :span="24">
+          <a-form-item label="人员sql查询" prop="sqlstr">
+            <a-textarea v-model="form.sqlstr" placeholder="请输入人员sql查询"></a-textarea>
           </a-form-item>
         </a-col>
       </a-row>
@@ -97,12 +114,23 @@
 import selectRole from './selectRole.vue'
 import selectPeople from './selectPeople.vue'
 import SelectModel from '@/components/selectModel/index.vue'
+// import { PlusOutlined } from 'ant-design-vue'
 import {ref,defineProps,defineEmits, nextTick} from 'vue'
 import Api from '@/api/api'
 import utils from '@/utils/utils'
 let props = defineProps({
   data: Object
 })
+let roleParam = ref({
+  "id": 20221101131902,
+  "content": {
+    "pageSize":20,
+    "pageNumber":1,
+    "where": {
+      "condition": "",
+    }
+  }
+})
 let peopleParam = ref({
   "id": 20221031141102,
   "content": {
@@ -127,62 +155,104 @@ let form = ref({
   userids:[],
   username:'',
   issql:1,
-  sqlstr:''
+  sqlstr:'',
+  roleArr:[],
+  userArr:[]
 })
 let formRef = ref()
 let Role = ref()
 let People = ref()
 
-let roleClick = () => {
-  Role.value.modeVisible=true
+
+let editBtn = () => {
+  visible.value = true
+  form.value = Object.assign({},form.value,props.data)
+  form.value.userArr = form.value.userids.map(item => {
+    return {
+      name:form.value.usermsg[item],
+      userid:item
+    }
+  })
+  form.value.roleArr = form.value.roleids.map(item => {
+    return {
+      rolename:form.value.rolemsg[item],
+      roleid:item
+    }
+  })
+}
+
+const closeRole = (tag) => {
+  form.value.roleArr.splice(form.value.roleArr.indexOf(tag), 1);
+  form.value.roleids.splice(form.value.roleids.indexOf(tag.roleid),1)
+  console.log(form.value.roleids);
+}
+
+const roleShow = () => {
+  Role.value.modeVisible = true
   nextTick(() => {
-    Role.value.list.selectedRowKeys = form.value.roleids
-    Role.value.result = form.value.roleids.map(item => {
-      return {
+    Role.value.list.normalSelect((data) => {
+      data.value = props.data.roleids.map(item => {
+        return {
           roleid: item,
-          rolename: form.value.rolemsg[item]
+          name: props.data.rolemsg[item]
         }
+      })
     })
+    Role.value.list.selectedRowKeys = props.data.roleids
   })
 }
 
-let peopleClick = () => {
-  People.value.modeVisible=true
+let selectPeoples = (data) => {
+  console.log(data);
+  data.forEach(item => {
+    let is = form.value.userArr.filter(item2 => item2.userid == item.userid)
+    if (!is.length) {
+      form.value.userArr.push(item)
+      form.value.userids.push(item.userid)
+    } 
+  })
+}
+
+
+const closePeople = (tag) => {
+  form.value.userArr.splice(form.value.userArr.indexOf(tag), 1);
+  form.value.userids.splice(form.value.userids.indexOf(tag.userid),1)
+}
+
+const PeopleShow = () => {
+  People.value.modeVisible = true
   nextTick(() => {
-    People.value.list.selectedRowKeys = form.value.userids
-    People.value.result = form.value.userids.map(item => {
-      return {
+    People.value.list.normalSelect((data) => {
+      data.value = props.data.userids.map(item => {
+        return {
           userid: item,
-          username: form.value.usermsg[item]
+          name: props.data.usermsg[item]
         }
+      })
     })
+    People.value.list.selectedRowKeys = props.data.userids
+    console.log(People.value.list.selectedRowKeys);
   })
 }
 
-let editBtn = () => {
-  visible.value = true
-  form.value = Object.assign({},form.value,props.data)
-  form.value.rolename = Object.values(form.value.rolemsg).join(',')
-  form.value.username = Object.values(form.value.usermsg).join(',')
-}
-
 let selectRoles = (data) => {
-  form.value.rolename = data.map(item => item.rolename).join(',')
-  form.value.roleids = data.map(item => item.roleid)
-  Role.value.list.selectedRowKeys = form.value.roleids
-  console.log('触发',form.value);
-}
-
-let selectPeoples = (data) => {
   console.log(data);
-  form.value.username = data.map(item => item.name).join(',')
-  form.value.userids = data.map(item => item.userid)
-  People.value.list.selectedRowKeys = form.value.userid
+  data.forEach(item => {
+    let is = form.value.userArr.filter(item2 => item2.roleid == item.roleid)
+    if (!is.length) {
+      form.value.roleArr.push(item)
+      form.value.roleids.push(item.roleid)
+    } 
+  })
 }
 
+
+
 let onSubmit = async () => {
   let isCheck = await formRef.value.validateFields()
   if (!isCheck) return
+  form.value.userids = form.value.userArr.map(item => item.userid)
+  form.value.roleids = form.value.roleArr.map(item => item.roleid)
   let res = await Api.requested({
     id:20221220153201,
     content: form.value

+ 1 - 1
src/system/moduleNormal/userManage/detail/index.vue

@@ -47,7 +47,7 @@ const mianData = async ()=>{
 const changeDataStructure = (data) => {
   mainAreaData.value = [
     {
-      label:'账号类型',
+      label:'用户类型',
       value:data.usertypename
     },
     {

+ 21 - 3
src/system/moduleNormal/userManage/detail/modules/edit.vue

@@ -13,7 +13,7 @@
       <a-form ref="formRef" :model="form" size="small" layout="vertical">
         <a-row :gutter="16">
           <a-col :span="12">
-            <a-form-item label="选择角色">
+            <a-form-item label="选择角色" :rules="[{ required: true, message: '请选择角色' }]">
               <a-select
                 ref="select"
                 mode="multiple"
@@ -40,6 +40,18 @@
               <a-input v-model:value="form.name" placeholder="输入用户名称" />
             </a-form-item>
           </a-col>
+          <a-col :span="12">
+            <a-form-item label="用户类型" name="usertype" :rules="[{ required: true, message: '请选择用户类型'}]">
+              <a-select
+                ref="select"
+                v-model:value="form.usertype"
+                placeholder="选择用户类型"
+                style="width: 100%"
+              >
+                <a-select-option v-for="item in userTypeOptions" :key="item.value" :value="item.value">{{item.remarks}}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
         </a-row>
       </a-form>
       <template #extra>
@@ -53,7 +65,7 @@
 </template>
 
 <script setup>
-import {ref,defineEmits,defineProps} from 'vue'
+import {ref,defineEmits,defineProps,onMounted} from 'vue'
 import Api from '@/api/api'
 import utils from '@/utils/utils'
 const emit = defineEmits(['onSuccess'])
@@ -61,8 +73,10 @@ const visible = ref(false)
 const props = defineProps(['data','disabled'])
 const form = ref({
   userid: 0,
-  remarks:''
+  remarks:'',
+  usertype:undefined
 })
+let userTypeOptions = ref([])
 const validatePhoneNumber = async (rule, value)=> {
   const phoneNumberPattern = /^1\d{10}$/;
   if (phoneNumberPattern.test(value)) {
@@ -101,6 +115,10 @@ const roles = async ()=>{
   const res = await Api.optionstype('role')
   rolesOptions.value = res.data
 }
+onMounted(async () => {
+  const res = await Api.optionstype('usertype')
+  userTypeOptions.value = res.data
+})
 </script>
 <style>
 </style>

+ 24 - 3
src/system/moduleNormal/userManage/modules/add.vue

@@ -13,7 +13,7 @@
       <a-form ref="formRef" :model="form" size="small" layout="vertical">
         <a-row :gutter="16">
           <a-col :span="12">
-            <a-form-item label="选择角色">
+            <a-form-item label="选择角色" :rules="[{ required: true, message: '请选择角色' }]">
               <a-select
                 ref="select"
                 mode="multiple"
@@ -40,6 +40,18 @@
               <a-input v-model:value="form.name" placeholder="输入用户名称" />
             </a-form-item>
           </a-col>
+          <a-col :span="12">
+            <a-form-item label="用户类型" name="usertype" :rules="[{ required: true, message: '请选择用户类型'}]">
+              <a-select
+                ref="select"
+                v-model:value="form.usertype"
+                placeholder="选择用户类型"
+                style="width: 100%"
+              >
+                <a-select-option v-for="item in userTypeOptions" :key="item.value" :value="item.value">{{item.remarks}}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
         </a-row>
       </a-form>
       <template #extra>
@@ -53,15 +65,17 @@
 </template>
 
 <script setup>
-import {ref,defineEmits} from 'vue'
+import {ref,defineEmits, onMounted} from 'vue'
 import Api from '@/api/api'
 import utils from '@/utils/utils'
 const emit = defineEmits(['onSuccess'])
 const visible = ref(false)
 const form = ref({
   userid: 0,
-  remarks:''
+  remarks:'',
+  usertype:undefined
 })
+let userTypeOptions = ref([])
 const validatePhoneNumber = async (rule, value)=> {
   const phoneNumberPattern = /^1\d{10}$/;
   if (phoneNumberPattern.test(value)) {
@@ -98,6 +112,13 @@ const roles = async ()=>{
   const res = await Api.optionstype('role')
   rolesOptions.value = res.data
 }
+
+onMounted(async () => {
+  const res = await Api.optionstype('usertype')
+  userTypeOptions.value = res.data
+})
+
+
 </script>
 <style>
 </style>

+ 6 - 1
src/template/normalTable/index.vue

@@ -83,6 +83,10 @@
     loading.value = false
     emit('listData',data.value)
   }
+  /* 初始化选中数据 */
+  const normalSelect = (callback) => {
+    callback(tableRecord)
+  }
   const onSelect = async (record, selected, selectedRows, nativeEvent)=>{
     if (!selected) {
       tableRecord.value = tableRecord.value.filter(e=>e[props.rowKey] !== record[props.rowKey])
@@ -180,7 +184,8 @@ let customRow = (record, index) => {
     listData,
     reloadSelect,
     tableRecord,
-    selectedRowKeys
+    selectedRowKeys,
+    normalSelect
   })
 </script>
 <style>

Некоторые файлы не были показаны из-за большого количества измененных файлов