Переглянути джерело

feat:餐饮公司和食堂绑定

lizhi 1 рік тому
батько
коміт
6e3f36dbe9
100 змінених файлів з 115 додано та 38 видалено
  1. 1 0
      assets/404-DZIpZTml.js
  2. 0 0
      assets/ArtUploadImgs.vue_vue_type_script_setup_true_lang-D8q0C5aF.js
  3. 0 0
      assets/FollowDialog.vue_vue_type_script_setup_true_lang-DfpJd6HP.js
  4. BIN
      assets/FollowDialog.vue_vue_type_script_setup_true_lang-DfpJd6HP.js.gz
  5. 0 0
      assets/FollowDrawer-DKP4CdqQ.js
  6. 0 0
      assets/LoginLeftView-B5JX9Eg4.js
  7. 1 0
      assets/canteenApi-DfYwW3JF.js
  8. 1 0
      assets/companyApi-Ulg6zLYX.js
  9. 0 0
      assets/edit-BS2zvGZs.js
  10. 0 0
      assets/edit-D5lDfm1c.js
  11. 0 0
      assets/edit-a25GPdmd.js
  12. 1 0
      assets/followApi-6LfrtKsT.js
  13. 0 0
      assets/index-0Mygocou.js
  14. 0 0
      assets/index-2nse6zli.js
  15. 0 0
      assets/index-36VrAgpq.js
  16. 0 0
      assets/index-B1BlgNhU.js
  17. 0 0
      assets/index-B88XqoY5.css
  18. 0 0
      assets/index-BF0hblkn.css
  19. 0 0
      assets/index-BtKePhm1.js
  20. 0 0
      assets/index-ByM6e8Ue.js
  21. BIN
      assets/index-ByM6e8Ue.js.gz
  22. 0 0
      assets/index-CPoaUgqv.js
  23. 0 0
      assets/index-CSNLX16x.js
  24. 0 0
      assets/index-Cf-Us86_.js
  25. BIN
      assets/index-Cf-Us86_.js.gz
  26. 0 0
      assets/index-Cstj7Qzp.css
  27. 0 0
      assets/index-CzSo7Ru7.css
  28. 0 0
      assets/index-D23UTSNz.js
  29. 0 0
      assets/index-D7CZli1R.css
  30. 0 0
      assets/index-DGVogfZO.js
  31. 0 0
      assets/index-DSmTZU3a.js
  32. 0 0
      assets/index-DnIFkhts.js
  33. 0 0
      assets/index-Dv41wSye.js
  34. 0 0
      assets/index-SKorT4No.js
  35. 0 0
      assets/index-VPXNnZJq.js
  36. BIN
      assets/index-VPXNnZJq.js.gz
  37. 0 0
      assets/index-Y4p9KeN-.js
  38. 0 0
      assets/index-ZFEhoDei.js
  39. 0 0
      assets/index-cA7j7rMR.css
  40. BIN
      assets/index-cA7j7rMR.css.gz
  41. 0 0
      assets/index-pe3jx9Gp.css
  42. 0 0
      assets/index-pizsP2Ov.js
  43. 0 0
      assets/index-qmIh3EzD.js
  44. 0 0
      assets/info-70Hc7tuO.js
  45. 0 0
      assets/info-B-_0eXsl.js
  46. 0 0
      assets/info-BV5Rxyg1.js
  47. 1 0
      assets/info-BmLacyYR.css
  48. 1 0
      assets/info-BxWsadiQ.css
  49. 0 0
      assets/info-CDJdd1c7.js
  50. 1 0
      assets/info-CYOggkt2.css
  51. 0 0
      assets/info-Cp5hJ8Uf.js
  52. 1 0
      assets/info-DbJNlSd2.css
  53. 1 0
      assets/info-DfNCY75P.css
  54. 1 0
      assets/info-DsXuXMGb.css
  55. 0 0
      assets/info-SK03JiD2.js
  56. 1 0
      assets/schoolApi-D0CZluX9.js
  57. 0 0
      assets/useTable-DllZVeJ1.js
  58. BIN
      assets/useTable-DllZVeJ1.js.gz
  59. 1 0
      assets/user-dialog-BmWeEKeb.js
  60. 1 0
      assets/user-dialog-DqlS4ilA.js
  61. 1 0
      assets/user-dialog-LDaxG2Gp.js
  62. 0 0
      assets/user-dialog.vue_vue_type_script_setup_true_lang-B9MtsWWc.js
  63. 0 0
      assets/user-dialog.vue_vue_type_script_setup_true_lang-DQfZqXbV.js
  64. 0 0
      assets/user-dialog.vue_vue_type_script_setup_true_lang-kdeFVofN.js
  65. 1 0
      assets/user-search-B7s-Q5Hi.js
  66. 1 0
      assets/user-search-BGJVWm7q.js
  67. 1 0
      assets/user-search-Bh1GMoI4.js
  68. 1 0
      assets/user-search-Bj0p19nS.js
  69. 1 0
      assets/user-search-CN69sa0H.js
  70. 1 0
      assets/user-search-CYmSuBxJ.js
  71. 1 0
      assets/user-search-CiwEMnvA.js
  72. 1 0
      assets/user-search-CmJ0vwM8.js
  73. 1 0
      assets/user-search-DZkeK2iC.js
  74. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-1_KW_Xwe.js
  75. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-BJH48ZAa.js
  76. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-Bytju0rB.js
  77. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-C23XWAYt.js
  78. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-CInpL8A4.js
  79. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-CcWaXS0G.js
  80. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-IN3KeChY.js
  81. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-Nc4-FRuq.js
  82. 1 0
      assets/user-search.vue_vue_type_script_setup_true_lang-URtE9-73.js
  83. 1 1
      index.html
  84. 7 3
      protected/components/DB.php
  85. 34 10
      protected/controllers/CanteenController.php
  86. 8 1
      protected/controllers/CommonController.php
  87. 2 2
      web/src/api/commonApi.ts
  88. 0 2
      web/src/components/custom/ArtUploadImgs.vue
  89. 6 0
      web/src/typings/api.d.ts
  90. 1 0
      web/src/typings/form.d.ts
  91. 0 1
      web/src/utils/http/index.ts
  92. 1 1
      web/src/views/auth/register/index.vue
  93. 20 7
      web/src/views/canteen/edit.vue
  94. 0 1
      web/src/views/canteen/follow/info.vue
  95. 0 2
      web/src/views/canteen/follow/modules/user-search.vue
  96. 0 1
      web/src/views/canteen/info.vue
  97. 0 1
      web/src/views/canteen/list/index.vue
  98. 0 2
      web/src/views/canteen/list/user-search.vue
  99. 3 2
      web/src/views/company/edit.vue
  100. 0 1
      web/src/views/company/follow/info.vue

+ 1 - 0
assets/404-DZIpZTml.js

@@ -0,0 +1 @@
+var e=Object.defineProperty,t=Object.defineProperties,a=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,s=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,p=(t,a,r)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[a]=r;import{d as n}from"./index-Cf-Us86_.js";/* empty css                  */import{_ as i}from"./index-qgnFkYkv.js";import{j as l,Q as c,S as d,v as u,a6 as m,Y as b,D as g,H as v,a7 as f,G as j,X as _,Z as x,_ as y,u as O}from"./vendor-C0fQtjEp.js";import{_ as P}from"./_plugin-vue_export-helper-BCo6x5W8.js";const h={class:"page-content state-page"},w={class:"tips"},z={class:"right-wrap"},E=P(l({__name:"ArtException",props:{data:{}},setup(e){const t=x(),a=()=>{t.push(n().homePath.value)};return(e,t)=>{const r=i,s=f,o=y("ripple");return j(),c("div",h,[d("div",w,[u(r,{src:e.data.imgUrl,size:"100%"},null,8,["src"]),d("div",z,[d("p",null,b(e.data.desc),1),m((j(),g(s,{type:"primary",size:"large",onClick:a},{default:v((()=>[_(b(e.data.btnText),1)])),_:1})),[[o]])])])])}}}),[["__scopeId","data-v-a44ad155"]]),I=l((D=((e,t)=>{for(var a in t||(t={}))s.call(t,a)&&p(e,a,t[a]);if(r)for(var a of r(t))o.call(t,a)&&p(e,a,t[a]);return e})({},{name:"Exception404"}),t(D,a({__name:"404",setup:e=>(e,t)=>{const a=E;return j(),g(a,{data:{title:"404",desc:e.$t("exceptionPage.404"),btnText:e.$t("exceptionPage.gohome"),imgUrl:O("/assets/404-BzxNMzaO.svg")}},null,8,["data"])}}))));var D;export{I as default};

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/ArtUploadImgs.vue_vue_type_script_setup_true_lang-D8q0C5aF.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/FollowDialog.vue_vue_type_script_setup_true_lang-DfpJd6HP.js


BIN
assets/FollowDialog.vue_vue_type_script_setup_true_lang-DfpJd6HP.js.gz


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/FollowDrawer-DKP4CdqQ.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/LoginLeftView-B5JX9Eg4.js


+ 1 - 0
assets/canteenApi-DfYwW3JF.js

@@ -0,0 +1 @@
+import{f as t}from"./index-Cf-Us86_.js";class a{static list(a){return t.post({url:"canteen/list",params:a})}static info(a){return t.post({url:"canteen/info",params:{id:a}})}static add(a){return t.post({url:"canteen/add",params:a})}static updateAttr(a){return t.post({url:"canteen/updateAttr",params:a})}static edit(a){return t.post({url:"canteen/edit",params:a})}static delete(a){return t.post({url:"canteen/delete",params:a})}}export{a as c};

+ 1 - 0
assets/companyApi-Ulg6zLYX.js

@@ -0,0 +1 @@
+import{f as t}from"./index-Cf-Us86_.js";class a{static list(a){return t.post({url:"company/list",params:a})}static info(a){return t.post({url:"company/info",params:{id:a}})}static add(a){return t.post({url:"company/add",params:a})}static updateAttr(a){return t.post({url:"company/updateAttr",params:a})}static edit(a){return t.post({url:"company/edit",params:a})}static delete(a){return t.post({url:"company/delete",params:a})}}export{a as c};

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/edit-BS2zvGZs.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/edit-D5lDfm1c.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/edit-a25GPdmd.js


+ 1 - 0
assets/followApi-6LfrtKsT.js

@@ -0,0 +1 @@
+import{f as o}from"./index-Cf-Us86_.js";class t{static schoolInfo(t){return o.post({url:"follow/schoolInfo",params:{id:t}})}static schoolFollow(t){return o.post({url:"follow/schoolAdd",params:t})}static schoolList(t){return o.post({url:"follow/schoolList",params:t})}static schoolAll(t,l){return o.post({url:"follow/schoolAll",params:{first_id:t,second_id:l}})}static canteenInfo(t){return o.post({url:"follow/canteenInfo",params:{id:t}})}static canteenFollow(t){return o.post({url:"follow/canteenAdd",params:t})}static canteenList(t){return o.post({url:"follow/canteenList",params:t})}static canteenAll(t,l){return o.post({url:"follow/canteenAll",params:{first_id:t,second_id:l}})}static companyInfo(t){return o.post({url:"follow/companyInfo",params:{id:t}})}static companyFollow(t){return o.post({url:"follow/companyAdd",params:t})}static companyList(t){return o.post({url:"follow/companyList",params:t})}static companyAll(t,l){return o.post({url:"follow/companyAll",params:{first_id:t,second_id:l}})}}export{t as f};

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-0Mygocou.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-2nse6zli.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-36VrAgpq.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-B1BlgNhU.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-B88XqoY5.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-BF0hblkn.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-BtKePhm1.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-ByM6e8Ue.js


BIN
assets/index-ByM6e8Ue.js.gz


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-CPoaUgqv.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-CSNLX16x.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-Cf-Us86_.js


BIN
assets/index-Cf-Us86_.js.gz


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-Cstj7Qzp.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-CzSo7Ru7.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-D23UTSNz.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-D7CZli1R.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-DGVogfZO.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-DSmTZU3a.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-DnIFkhts.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-Dv41wSye.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-SKorT4No.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-VPXNnZJq.js


BIN
assets/index-VPXNnZJq.js.gz


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-Y4p9KeN-.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-ZFEhoDei.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-cA7j7rMR.css


BIN
assets/index-cA7j7rMR.css.gz


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-pe3jx9Gp.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-pizsP2Ov.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/index-qmIh3EzD.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/info-70Hc7tuO.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/info-B-_0eXsl.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/info-BV5Rxyg1.js


+ 1 - 0
assets/info-BmLacyYR.css

@@ -0,0 +1 @@
+.detail{&[data-v-f08da61b]{padding-top:20px;font-size:14px}.el-col{&[data-v-f08da61b]{margin-bottom:30px}label[data-v-f08da61b]{font-weight:700;margin-right:10px}}}

+ 1 - 0
assets/info-BxWsadiQ.css

@@ -0,0 +1 @@
+.detail{&[data-v-daf47579]{padding-top:20px;font-size:14px}.el-col{&[data-v-daf47579]{margin-bottom:30px}label[data-v-daf47579]{font-weight:700;margin-right:10px}}}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/info-CDJdd1c7.js


+ 1 - 0
assets/info-CYOggkt2.css

@@ -0,0 +1 @@
+.detail{&[data-v-ffe2b4f4]{padding-top:20px;font-size:14px}.el-col{&[data-v-ffe2b4f4]{margin-bottom:30px}label[data-v-ffe2b4f4]{font-weight:700;margin-right:10px}}}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/info-Cp5hJ8Uf.js


+ 1 - 0
assets/info-DbJNlSd2.css

@@ -0,0 +1 @@
+.detail{&[data-v-63c757c6]{padding-top:20px;font-size:14px}.el-col{&[data-v-63c757c6]{margin-bottom:30px}label[data-v-63c757c6]{font-weight:700;margin-right:10px}}}

+ 1 - 0
assets/info-DfNCY75P.css

@@ -0,0 +1 @@
+.detail{&[data-v-986701a5]{padding-top:20px;font-size:14px}.el-col{&[data-v-986701a5]{margin-bottom:30px}label[data-v-986701a5]{font-weight:700;margin-right:10px}}}

+ 1 - 0
assets/info-DsXuXMGb.css

@@ -0,0 +1 @@
+.detail{&[data-v-52e98547]{padding-top:20px;font-size:14px}.el-col{&[data-v-52e98547]{margin-bottom:30px}label[data-v-52e98547]{font-weight:700;margin-right:10px}}}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/info-SK03JiD2.js


+ 1 - 0
assets/schoolApi-D0CZluX9.js

@@ -0,0 +1 @@
+import{f as t}from"./index-Cf-Us86_.js";class s{static list(s){return t.post({url:"school/list",params:s})}static info(s){return t.post({url:"school/info",params:{id:s}})}static add(s){return t.post({url:"school/add",params:s})}static updateAttr(s){return t.post({url:"school/updateAttr",params:s})}static edit(s){return t.post({url:"school/edit",params:s})}static delete(s){return t.post({url:"school/delete",params:s})}}export{s};

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/useTable-DllZVeJ1.js


BIN
assets/useTable-DllZVeJ1.js.gz


+ 1 - 0
assets/user-dialog-BmWeEKeb.js

@@ -0,0 +1 @@
+import{_ as t}from"./user-dialog.vue_vue_type_script_setup_true_lang-DQfZqXbV.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                   *//* empty css                  *//* empty css                *//* empty css               *//* empty css                  *//* empty css                     */import"./el-form-item-l0sNRNKZ.js";/* empty css                 */export{t as default};

+ 1 - 0
assets/user-dialog-DqlS4ilA.js

@@ -0,0 +1 @@
+import{_ as t}from"./user-dialog.vue_vue_type_script_setup_true_lang-kdeFVofN.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                   *//* empty css                  *//* empty css                *//* empty css               *//* empty css                  *//* empty css                     */import"./el-form-item-l0sNRNKZ.js";/* empty css                 */export{t as default};

+ 1 - 0
assets/user-dialog-LDaxG2Gp.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-dialog.vue_vue_type_script_setup_true_lang-B9MtsWWc.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                   *//* empty css                  *//* empty css                *//* empty css               *//* empty css                  *//* empty css                     */import"./el-form-item-l0sNRNKZ.js";/* empty css                 *//* empty css                   */export{e as default};

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/user-dialog.vue_vue_type_script_setup_true_lang-B9MtsWWc.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/user-dialog.vue_vue_type_script_setup_true_lang-DQfZqXbV.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
assets/user-dialog.vue_vue_type_script_setup_true_lang-kdeFVofN.js


+ 1 - 0
assets/user-search-B7s-Q5Hi.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-BJH48ZAa.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";import"./city-zj5gw6l3.js";export{e as default};

+ 1 - 0
assets/user-search-BGJVWm7q.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-Bytju0rB.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search-Bh1GMoI4.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-IN3KeChY.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search-Bj0p19nS.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-URtE9-73.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search-CN69sa0H.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-1_KW_Xwe.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search-CYmSuBxJ.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-CInpL8A4.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search-CiwEMnvA.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-CcWaXS0G.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";import"./city-zj5gw6l3.js";export{e as default};

+ 1 - 0
assets/user-search-CmJ0vwM8.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-C23XWAYt.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search-DZkeK2iC.js

@@ -0,0 +1 @@
+import{_ as e}from"./user-search.vue_vue_type_script_setup_true_lang-Nc4-FRuq.js";import"./index-qmIh3EzD.js";import"./index-Cf-Us86_.js";import"./vendor-C0fQtjEp.js";/* empty css                 */import"./index-DSmTZU3a.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";export{e as default};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-1_KW_Xwe.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as l,r as a,c as t,D as s,G as r}from"./vendor-C0fQtjEp.js";const o=l({__name:"user-search",props:{modelValue:{},selectList:{}},emits:["update:modelValue","search","reset"],setup(l,{emit:o}){const n=l,c=o,u=a(),i=t({get:()=>n.modelValue,set:e=>c("update:modelValue",e)}),d={},m={checkStrictly:!0},p=t((()=>[{label:"学校",key:"school",type:"cascader",props:{options:n.selectList.map((e=>{var l;return{value:e.id,label:e.name,children:null==(l=e.children)?void 0:l.map((e=>({value:e.id,label:e.name})))}})),style:{width:"280px"},filterable:!0,placeholder:"可搜索",clearable:!0,props:m}}]));function h(){c("reset")}function v(){return e=this,l=null,a=function*(){yield u.value.validate(),c("search",i.value)},new Promise(((t,s)=>{var r=e=>{try{n(a.next(e))}catch(l){s(l)}},o=e=>{try{n(a.throw(e))}catch(l){s(l)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(r,o);n((a=a.apply(e,l)).next())}));var e,l,a}return(l,a)=>{const t=e;return r(),s(t,{ref_key:"searchBarRef",ref:u,modelValue:i.value,"onUpdate:modelValue":a[0]||(a[0]=e=>i.value=e),items:p.value,selectList:l.selectList,rules:d,onReset:h,onSearch:v},null,8,["modelValue","items","selectList"])}}});export{o as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-BJH48ZAa.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{c as a}from"./city-zj5gw6l3.js";import{j as l,r as t,c as r,D as s,G as o}from"./vendor-C0fQtjEp.js";const c=l({__name:"user-search",props:{modelValue:{},schools:{}},emits:["update:modelValue","search","reset"],setup(l,{emit:c}){const n=l,u=c,p=t(),i=r({get:()=>n.modelValue,set:e=>u("update:modelValue",e)}),d={},m={checkStrictly:!0},h=r((()=>[{label:"名称",key:"name",type:"input",placeholder:"请输入名称",clearable:!0},{label:"地区",key:"address",type:"cascader",props:{options:a,style:{width:"280px"},filterable:!0,placeholder:"可搜索",clearable:!0,props:m}},{label:"学校",key:"school_id",type:"select",filterable:!0,props:{options:n.schools.map((e=>({value:e.id,label:e.name})))}}]));function y(){u("reset")}function v(){return e=this,a=null,l=function*(){yield p.value.validate(),u("search",i.value)},new Promise(((t,r)=>{var s=e=>{try{c(l.next(e))}catch(a){r(a)}},o=e=>{try{c(l.throw(e))}catch(a){r(a)}},c=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,o);c((l=l.apply(e,a)).next())}));var e,a,l}return(a,l)=>{const t=e;return o(),s(t,{ref_key:"searchBarRef",ref:p,modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=e=>i.value=e),items:h.value,rules:d,onReset:y,onSearch:v},null,8,["modelValue","items"])}}});export{c as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-Bytju0rB.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as l,r as a,c as t,D as r,G as s}from"./vendor-C0fQtjEp.js";const o=l({__name:"user-search",props:{modelValue:{},selectList:{}},emits:["update:modelValue","search","reset"],setup(l,{emit:o}){const n=l,c=o,u=a(),i=t({get:()=>n.modelValue,set:e=>c("update:modelValue",e)}),p={},d={checkStrictly:!0},m=t((()=>[{label:"手机号",key:"phone",type:"input",placeholder:"请输入手机号",clearable:!0},{label:"学校",key:"school",type:"cascader",props:{options:n.selectList.map((e=>{var l;return{value:e.id,label:e.name,children:null==(l=e.children)?void 0:l.map((e=>({value:e.id,label:e.name})))}})),style:{width:"280px"},filterable:!0,placeholder:"可搜索",clearable:!0,props:d}}]));function h(){c("reset")}function v(){return e=this,l=null,a=function*(){yield u.value.validate(),c("search",i.value)},new Promise(((t,r)=>{var s=e=>{try{n(a.next(e))}catch(l){r(l)}},o=e=>{try{n(a.throw(e))}catch(l){r(l)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,o);n((a=a.apply(e,l)).next())}));var e,l,a}return(l,a)=>{const t=e;return s(),r(t,{ref_key:"searchBarRef",ref:u,modelValue:i.value,"onUpdate:modelValue":a[0]||(a[0]=e=>i.value=e),items:m.value,selectList:l.selectList,rules:p,onReset:h,onSearch:v},null,8,["modelValue","items","selectList"])}}});export{o as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-C23XWAYt.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as a,r as l,c as t,D as s,G as r}from"./vendor-C0fQtjEp.js";const o=a({__name:"user-search",props:{modelValue:{},selectList:{}},emits:["update:modelValue","search","reset"],setup(a,{emit:o}){const n=a,u=o,p=l(),c=t({get:()=>n.modelValue,set:e=>u("update:modelValue",e)}),i={};l([]);const m=t((()=>[{label:"用户名",key:"name",type:"input",placeholder:"请输入用户名",clearable:!0},{label:"手机号",key:"phone",type:"input",props:{placeholder:"请输入手机号",maxlength:"11"}},{label:"学校",key:"school_id",type:"select",props:{placeholder:"请选择",options:n.selectList.map((e=>({label:e.name,value:e.id})))}}]));function d(){u("reset")}function h(){return e=this,a=null,l=function*(){yield p.value.validate(),u("search",c.value)},new Promise(((t,s)=>{var r=e=>{try{n(l.next(e))}catch(a){s(a)}},o=e=>{try{n(l.throw(e))}catch(a){s(a)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(r,o);n((l=l.apply(e,a)).next())}));var e,a,l}return(a,l)=>{const t=e;return r(),s(t,{ref_key:"searchBarRef",ref:p,modelValue:c.value,"onUpdate:modelValue":l[0]||(l[0]=e=>c.value=e),items:m.value,rules:i,onReset:d,onSearch:h},null,8,["modelValue","items"])}}});export{o as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-CInpL8A4.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as a,r as l,c as t,D as r,G as s}from"./vendor-C0fQtjEp.js";const o=a({__name:"user-search",props:{modelValue:{},selectList:{}},emits:["update:modelValue","search","reset"],setup(a,{emit:o}){const n=a,u=o,p=l(),c=t({get:()=>n.modelValue,set:e=>u("update:modelValue",e)}),m={};l([]);const i=t((()=>[{label:"用户名",key:"name",type:"input",placeholder:"请输入用户名",clearable:!0},{label:"手机号",key:"phone",type:"input",props:{placeholder:"请输入手机号",maxlength:"11"}},{label:"餐饮公司",key:"company_id",type:"select",props:{placeholder:"请选择",options:n.selectList.map((e=>({label:e.name,value:e.id})))}}]));function d(){u("reset")}function h(){return e=this,a=null,l=function*(){yield p.value.validate(),u("search",c.value)},new Promise(((t,r)=>{var s=e=>{try{n(l.next(e))}catch(a){r(a)}},o=e=>{try{n(l.throw(e))}catch(a){r(a)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,o);n((l=l.apply(e,a)).next())}));var e,a,l}return(a,l)=>{const t=e;return s(),r(t,{ref_key:"searchBarRef",ref:p,modelValue:c.value,"onUpdate:modelValue":l[0]||(l[0]=e=>c.value=e),items:i.value,rules:m,onReset:d,onSearch:h},null,8,["modelValue","items"])}}});export{o as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-CcWaXS0G.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{c as a}from"./city-zj5gw6l3.js";import{j as l,r as t,c as r,D as s,G as o}from"./vendor-C0fQtjEp.js";const u=l({__name:"user-search",props:{modelValue:{}},emits:["update:modelValue","search","reset"],setup(l,{emit:u}){const c=l,n=u,p=t(),i=r({get:()=>c.modelValue,set:e=>n("update:modelValue",e)}),d={},m={checkStrictly:!0},h=r((()=>[{label:"学校名称",key:"name",type:"input",placeholder:"请输入学校名称",clearable:!0},{label:"地区",key:"address",type:"cascader",props:{options:a,style:{width:"280px"},filterable:!0,placeholder:"可搜索",clearable:!0,props:m}},{label:"是否合作",key:"is_cooperate",type:"select",filterable:!0,props:{options:[{label:"全部",value:-1},{label:"已合作",value:1},{label:"未合作",value:0}]}}]));function v(){n("reset")}function y(){return e=this,a=null,l=function*(){yield p.value.validate(),n("search",i.value)},new Promise(((t,r)=>{var s=e=>{try{u(l.next(e))}catch(a){r(a)}},o=e=>{try{u(l.throw(e))}catch(a){r(a)}},u=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,o);u((l=l.apply(e,a)).next())}));var e,a,l}return(a,l)=>{const t=e;return o(),s(t,{ref_key:"searchBarRef",ref:p,modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=e=>i.value=e),items:h.value,rules:d,onReset:v,onSearch:y},null,8,["modelValue","items"])}}});export{u as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-IN3KeChY.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as l,r as a,c as t,D as r,G as s}from"./vendor-C0fQtjEp.js";const o=l({__name:"user-search",props:{modelValue:{},selectList:{}},emits:["update:modelValue","search","reset"],setup(l,{emit:o}){const n=l,c=o,u=a(),i=t({get:()=>n.modelValue,set:e=>c("update:modelValue",e)}),p={},d={checkStrictly:!0},m=t((()=>[{label:"手机号",key:"phone",type:"input",placeholder:"请输入手机号",clearable:!0},{label:"餐饮公司",key:"school",type:"cascader",props:{options:n.selectList.map((e=>{var l;return{value:e.id,label:e.name,children:null==(l=e.children)?void 0:l.map((e=>({value:e.id,label:e.name})))}})),style:{width:"280px"},filterable:!0,placeholder:"可搜索",clearable:!0,props:d}}]));function h(){c("reset")}function v(){return e=this,l=null,a=function*(){yield u.value.validate(),c("search",i.value)},new Promise(((t,r)=>{var s=e=>{try{n(a.next(e))}catch(l){r(l)}},o=e=>{try{n(a.throw(e))}catch(l){r(l)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,o);n((a=a.apply(e,l)).next())}));var e,l,a}return(l,a)=>{const t=e;return s(),r(t,{ref_key:"searchBarRef",ref:u,modelValue:i.value,"onUpdate:modelValue":a[0]||(a[0]=e=>i.value=e),items:m.value,selectList:l.selectList,rules:p,onReset:h,onSearch:v},null,8,["modelValue","items","selectList"])}}});export{o as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-Nc4-FRuq.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as a,r as l,c as t,D as o,G as s}from"./vendor-C0fQtjEp.js";const r=a({__name:"user-search",props:{modelValue:{},schoolList:{},companyList:{}},emits:["update:modelValue","search","reset"],setup(a,{emit:r}){const n=a,u=r,i=l(),p=t({get:()=>n.modelValue,set:e=>u("update:modelValue",e)}),c={},m=t((()=>[{label:"食堂名称",key:"name",type:"input",placeholder:"请输入食堂名称",clearable:!0},{label:"餐饮公司",key:"company_id",type:"select",filterable:!0,props:{options:n.companyList.map((e=>({label:e.name,value:e.id})))}},{label:"学校",key:"school_id",type:"select",filterable:!0,props:{options:n.schoolList.map((e=>({label:e.name,value:e.id})))}}]));function d(){u("reset")}function h(){return e=this,a=null,l=function*(){yield i.value.validate(),u("search",p.value)},new Promise(((t,o)=>{var s=e=>{try{n(l.next(e))}catch(a){o(a)}},r=e=>{try{n(l.throw(e))}catch(a){o(a)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,r);n((l=l.apply(e,a)).next())}));var e,a,l}return(a,l)=>{const t=e;return s(),o(t,{ref_key:"searchBarRef",ref:i,modelValue:p.value,"onUpdate:modelValue":l[0]||(l[0]=e=>p.value=e),items:m.value,rules:c,onReset:d,onSearch:h},null,8,["modelValue","items"])}}});export{r as _};

+ 1 - 0
assets/user-search.vue_vue_type_script_setup_true_lang-URtE9-73.js

@@ -0,0 +1 @@
+import{_ as e}from"./index-qmIh3EzD.js";import{j as a,r as l,c as t,D as r,G as o}from"./vendor-C0fQtjEp.js";const s=a({__name:"user-search",props:{modelValue:{},roleList:{}},emits:["update:modelValue","search","reset"],setup(a,{emit:s}){const n=a,u=s,p=l(),c=t({get:()=>n.modelValue,set:e=>u("update:modelValue",e)}),i={};l([]);const m=t((()=>[{label:"用户名",key:"name",type:"input",placeholder:"请输入用户名",clearable:!0},{label:"手机号",key:"phone",type:"input",props:{placeholder:"请输入手机号",maxlength:"11"}},{label:"角色",key:"role_id",type:"select",props:{placeholder:"请选择角色",options:n.roleList.map((e=>({label:e.name,value:e.id})))}}]));function d(){u("reset")}function h(){return e=this,a=null,l=function*(){yield p.value.validate(),u("search",c.value)},new Promise(((t,r)=>{var o=e=>{try{n(l.next(e))}catch(a){r(a)}},s=e=>{try{n(l.throw(e))}catch(a){r(a)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(o,s);n((l=l.apply(e,a)).next())}));var e,a,l}return(a,l)=>{const t=e;return o(),r(t,{ref_key:"searchBarRef",ref:p,modelValue:c.value,"onUpdate:modelValue":l[0]||(l[0]=e=>c.value=e),items:m.value,rules:i,onReset:d,onSearch:h},null,8,["modelValue","items"])}}});export{s as _};

+ 1 - 1
index.html

@@ -9,7 +9,7 @@
       content="逐趣CRM - A modern admin dashboard template built with Vue 3, TypeScript, and Element Plus."
     />
     <link rel="shortcut icon" type="image/x-icon" href="/assets/favicon-B33nFcrs.ico" />
-    <script type="module" crossorigin src="/assets/index-LUnPR-eV.js"></script>
+    <script type="module" crossorigin src="/assets/index-Cf-Us86_.js"></script>
     <link rel="modulepreload" crossorigin href="/assets/vendor-C0fQtjEp.js">
     <link rel="stylesheet" crossorigin href="/assets/index-D7z-dQEN.css">
   </head>

+ 7 - 3
protected/components/DB.php

@@ -348,7 +348,7 @@ class DB
         }
         $condition = trim($condition, 'AND');
         $condition = trim($condition);
-
+        Logger::info($condition);
         return $command->delete($tableName, $condition, $params);
     }
 
@@ -437,7 +437,7 @@ class DB
         $retData['records'] = $build->queryAll() ?: [];
 
         // debug
-        if ($criteria->getDebugMode() || LWM_ENV != 'prod') {
+        if ($criteria->getDebugMode()) {
             Logger::info(
                 json_encode(
                     [
@@ -462,6 +462,9 @@ class DB
     public static function getInfoWithCriteria(string $table_name, DbCriteria $criteria)
     {
         $table_name = self::formTableName($table_name);
+        if ($criteria->alias) {
+            $table_name .= ' as '.$criteria->alias;
+        }
         // 指定索引
         if (!empty($criteria->forceIndex)) {
             $table_name .= " FORCE INDEX (`{$criteria->forceIndex}`)";
@@ -475,9 +478,10 @@ class DB
         !empty($criteria->group) && $build->group($criteria->group);
         !empty($criteria->having) && $build->having($criteria->having);
         !empty($criteria->order) && $build->order($criteria->order);
+        !empty($criteria->join) && $build->setJoin($criteria->join);
 
         // debug
-        if ($criteria->getDebugMode() || LWM_ENV != 'prod') {
+        if ($criteria->getDebugMode()) {
             Logger::info(
                 json_encode(
                     [

+ 34 - 10
protected/controllers/CanteenController.php

@@ -18,8 +18,13 @@ class CanteenController extends Controller
         }
         $data['stall_imgs'] = Helper::formatImgsFiled($data['stall_imgs']);
         $school = DB::getInfoById('school', $data['school_id'], 'name');
-        $company = DB::getInfoById('company', $data['company_id'], 'name');
-        $data['company_name'] = $company['name']?? '';
+        $cri = DbCriteria::simpleCompare(['t.canteen_id' => $id])
+            ->setSelect('c.name,c.id')
+            ->setAlias('t')
+            ->setJoin('left join wx_company c on c.id=t.company_id');
+        $companyInfo = DB::getInfoWithCriteria('company_canteen_relation', $cri);
+        $data['company_name'] = $companyInfo['name']?? '';
+        $data['company_id'] = $companyInfo['id']?? '';
         $data['school_name'] = $school['name']?? '';
         Helper::ok($data);
     }
@@ -57,18 +62,28 @@ class CanteenController extends Controller
         $data = DB::getListWithCriteria(self::$table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(
-                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare([])->setSelect('id, username')),
+                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare(['id' => array_column($data['records'], 'last_user_id')])->setSelect('id, username')),
                 'username',
                 'id'
             );
             $schools = Helper::arrayColumn(
-                DB::getListWithCriteria('school', DbCriteria::simpleCompare([])->setSelect('id, name')),
+                DB::getListWithCriteria('school', DbCriteria::simpleCompare(['id' => array_column($data['records'], 'school_id')])->setSelect('id, name')),
                 'name',
                 'id'
             );
-            $data['records'] = array_map(function ($item) use ($users, $schools) {
+            $cri = DbCriteria::simpleCompare([['t.canteen_id' => array_column($data['records'], 'id')]])
+                ->setSelect('c.name,t.canteen_id')
+                ->setAlias('t')
+                ->setJoin('left join wx_company c on c.id=t.company_id');
+            $relations = Helper::arrayColumn(
+                DB::getListWithCriteria('company_canteen_relation', $cri),
+                'name',
+                'canteen_id'
+            );
+            $data['records'] = array_map(function ($item) use ($users, $schools, $relations) {
                 $item['last_user_name'] = $users[$item['last_user_id']] ?? '-';
                 $item['school_name'] = $schools[$item['school_id']] ?? '-';
+                $item['company_name'] = $relations[$item['id']] ?? '-';
                 $item['stall_imgs'] = Helper::formatImgsFiled($item['stall_imgs']);
                 return $item;
             }, $data['records']);
@@ -123,7 +138,7 @@ class CanteenController extends Controller
         ];
 
         $notNullField = ["school_id","name","stall_num","is_direct","username","phone","weixin"];
-        $allowEmptyField = ["school_id","stall_num","is_direct"];
+        $allowEmptyField = ["stall_num","is_direct"];
 
         // 空字段检测
         if (!Helper::checkEmptyKey($data, $notNullField, $allowEmptyField)) {
@@ -141,10 +156,19 @@ class CanteenController extends Controller
         }
         $data['stall_imgs'] = $data['stall_imgs'] ? implode(',', $data['stall_imgs']) : '';
 
-        if ($id) {
-            DB::updateById(self::$table, $data, $id);
-        } else {
-            DB::addData(self::$table, $data);
+        $trans = \Yii::app()->db->beginTransaction();
+        try {
+            if ($id) {
+                DB::updateById(self::$table, $data, $id);
+            } else {
+                DB::addData(self::$table, $data);
+            }
+            Db::deleteByCondition('company_canteen_relation', ['canteen_id' => $id]);
+            Db::addData('company_canteen_relation', ['canteen_id' => $id, 'company_id' => $data['school_id'], 'school_id' => $data['school_id']]);
+            $trans->commit();
+        } catch (\Exception $e) {
+            $trans->rollback();
+            Helper::error($e->getMessage());
         }
         Helper::ok();
     }

+ 8 - 1
protected/controllers/CommonController.php

@@ -91,13 +91,20 @@ class CommonController extends Controller
                     break;
                 case 'school_canteen':
                     $filter = ['is_del' => 0, 'id' => $this->getSchoolFilter()];
+                    $company_id = Helper::getPostInt('company_id');
+                    $exclude_canteen_ids = [];
+                    if ($company_id) {
+                        $exclude_canteen_ids = Helper::arrayColumn(DB::getListWithCriteria('company_canteen_relation', DbCriteria::simpleCompare(['company_id' => '!=' . $company_id])), 'canteen_id');
+                    }
                     $cri = DbCriteria::simpleCompare($filter)->setSelect('id, name');
                     $schools = Helper::arrayColumn(DB::getListWithCriteria('school', $cri), null, 'id');
                     if (empty($schools)) {
                         $ret['school_canteen'] = [];
                         break;
                     }
-                    $cri1 = DbCriteria::simpleCompare(['is_del' => 0, 'school_id' => array_keys($schools)])->setSelect('id, name, school_id as parent_id');
+                    $cri1 = DbCriteria::simpleCompare(['is_del' => 0, 'school_id' => array_keys($schools)])
+                        ->setSelect('id, name, school_id as parent_id')
+                        ->addNotInCondition('id', $exclude_canteen_ids);
                     $relations = DB::getListWithCriteria('canteen', $cri1);
                     $ret['school_canteen'] = $this->formatRelationList($relations['records'], $schools);
                     break;

+ 2 - 2
web/src/api/commonApi.ts

@@ -45,10 +45,10 @@ export class commonApi {
   }
 
   // 下拉列表
-  static selectList(types: Api.SelectTypeArray) {
+  static selectList(types: Api.SelectTypeArray, selectListParams?:Api.Common.selectListParams) {
     return request.post<Api.Common.SelectList>({
       url: 'common/getSelectList',
-      params: { types },
+      params: { types, ...selectListParams },
       showErrorMessage: false // 不显示错误消息
     })
   }

+ 0 - 2
web/src/components/custom/ArtUploadImgs.vue

@@ -69,7 +69,6 @@
         url: item
       }
     })
-    console.log(`%c fileList == `, 'background:#41b883 ; padding:1px; color:#fff', fileList.value);
   }, { immediate: true })
   
   const dialogImageUrl = ref('')
@@ -78,7 +77,6 @@
   const handleRemove: UploadProps['onRemove'] = (uploadFile: UploadFile) => {
     const response = uploadFile.response as {data:any}
     let upName = response ? response.data.name : uploadFile.name
-    console.log(`%c upName == `, 'background:#41b883 ; padding:1px; color:#fff', upName);
     commonApi.delImg(upName)
     for (let i = 0; i < props.imgs.length; i++) {
       if (props.imgs[i] === upName) {

+ 6 - 0
web/src/typings/api.d.ts

@@ -47,6 +47,12 @@ declare namespace Api {
       total: number
     }
 
+    interface selectListParams {
+      company_id?: number
+      id?: number
+      school_id?: number
+    }
+
     interface relation {
       id: number
       name: string // 联系人名称

+ 1 - 0
web/src/typings/form.d.ts

@@ -90,6 +90,7 @@ declare namespace Form {
   interface Canteen {
     id: number
     school_id: number // 学校ID
+    company_id: number // 学校ID
     name: string // 名称
     stall_num: number // 档口数量
     is_direct: 0|1 // 是否直营

+ 0 - 1
web/src/utils/http/index.ts

@@ -219,7 +219,6 @@ function getSign(formData: FormData) {
       params[key] = value
     }
   });
-  console.log(`%c params == `, 'background:#41b883 ; padding:1px; color:#fff', params);
   const sortedKeys = Object.keys(params).sort()
   const queryString = sortedKeys.map((key) => {
     if (Array.isArray(params[key])) {

+ 1 - 1
web/src/views/auth/register/index.vue

@@ -158,7 +158,7 @@
         toLogin()
       }, 1000)
     } catch (error) {
-      console.log('验证失败', error)
+      console.error('验证失败', error)
     }
   }
 

+ 20 - 7
web/src/views/canteen/edit.vue

@@ -30,7 +30,7 @@
         <ElFormItem label="学校(校区)" prop="school_id">
           <ElSelect style="max-width: 200px" v-model="formData.school_id" placeholder="请选择" :empty-values="[0]" :value-on-clear="0">
             <ElOption
-              v-for="item in selectList"
+              v-for="item in schoolList"
               :key="item.id"
               :value="item.id"
               :label="item.name"
@@ -39,8 +39,15 @@
         </ElFormItem>
       </el-col>
       <el-col>
-        <ElFormItem label="餐饮公司" prop="school_id">
-          <ElInput style="max-width: 400px" v-model="formData.school_id" type="number" />
+        <ElFormItem label="餐饮公司" prop="company_id">
+          <ElSelect style="max-width: 200px" v-model="formData.company_id" placeholder="请选择" :empty-values="[0]" :value-on-clear="0">
+            <ElOption
+                v-for="item in companyList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+            />
+          </ElSelect>
         </ElFormItem>
       </el-col>
       <el-col>
@@ -91,6 +98,7 @@
   import { ElMessageBox } from 'element-plus'
   import { RoutesAlias } from '@/router/routesAlias'
   import {commonApi} from "@/api/commonApi";
+  import {useWorktabStore} from "@/store/modules/worktab";
 
   // 表单实例
   const formRef = ref<FormInstance>()
@@ -98,6 +106,7 @@
   const DefaultData = <Form.Canteen>{
     id: 0,
     school_id: 0,
+    company_id: 0,
     name: '',
     stall_num: 0,
     is_direct: 0,
@@ -115,7 +124,8 @@
 
   // 表单验证规则
   const rules: FormRules = {
-    school_id: [{ required: true, message: '请输入学校ID', trigger: 'blur' }],
+    school_id: [{ required: true, message: '请选择学校', trigger: 'blur' }],
+    company_id: [{ required: true, message: '请选择餐饮公司', trigger: 'blur' }],
     name: [
       { required: true, message: '请输入名称', trigger: 'blur' },
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }
@@ -154,10 +164,12 @@
     }
   }
 
-  const selectList = ref<Api.Common.SelectInfo[]>([])
+  const schoolList = ref<Api.Common.SelectInfo[]>([])
+  const companyList = ref<Api.Common.SelectInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['school']).then(res => {
-      selectList.value = res.school || []
+    await commonApi.selectList(['school', 'company']).then(res => {
+      schoolList.value = res.school || []
+      companyList.value = res.company || []
     })
   }
 
@@ -178,6 +190,7 @@
     })
       .then(() => {
         router.push({ path: RoutesAlias.CanteenList })
+        useWorktabStore().removeTab(route.path)
       })
       .catch(() => {
         // ... do nothing

+ 0 - 1
web/src/views/canteen/follow/info.vue

@@ -68,7 +68,6 @@ const info = reactive<Api.Follow.FollowInfo>({ ...DefaultData })
 onMounted(() => {
   followApi.canteenInfo(parseInt(useRoute().query.id as string)).then((res) => {
     Object.assign(info, res)
-    console.log(`%c info == `, 'background:#41b883 ; padding:1px; color:#fff', info);
   })
 })
 </script>

+ 0 - 2
web/src/views/canteen/follow/modules/user-search.vue

@@ -68,13 +68,11 @@ const formItems = computed(() => [
 
 // 事件
 function handleReset() {
-  console.log('重置表单')
   emit('reset')
 }
 
 async function handleSearch() {
   await searchBarRef.value.validate()
   emit('search', formData.value)
-  console.log('表单数据', formData.value)
 }
 </script>

+ 0 - 1
web/src/views/canteen/info.vue

@@ -79,7 +79,6 @@ const info = reactive<Api.Canteen.Info>({ ...DefaultData })
 onMounted(() => {
   canteenApi.info(parseInt(useRoute().query.id as string)).then((res) => {
     Object.assign(info, res)
-    console.log(`%c info == `, 'background:#41b883 ; padding:1px; color:#fff', info);
   })
 })
 </script>

+ 0 - 1
web/src/views/canteen/list/index.vue

@@ -310,7 +310,6 @@ onMounted(() => {
 })
 
 const doUpdateAttr = (scope: any) => {
-  console.log(`%c scope == `, 'background:#41b883 ; padding:1px; color:#fff', scope)
   if (!scope.row.id || !isMounted.value) {
     return
   }

+ 0 - 2
web/src/views/canteen/list/user-search.vue

@@ -79,13 +79,11 @@
 
   // 事件
   function handleReset() {
-    console.log('重置表单')
     emit('reset')
   }
 
   async function handleSearch() {
     await searchBarRef.value.validate()
     emit('search', formData.value)
-    console.log('表单数据', formData.value)
   }
 </script>

+ 3 - 2
web/src/views/company/edit.vue

@@ -73,6 +73,7 @@
   import { ElMessageBox } from 'element-plus'
   import { RoutesAlias } from '@/router/routesAlias'
   import {commonApi} from "@/api/commonApi";
+  import {useWorktabStore} from "@/store/modules/worktab";
 
   const casProps = { multiple: true }
 
@@ -128,7 +129,7 @@
   const selectList = ref<Api.Common.SelectVlaueRelationInfo[]>([])
   const users = ref<Api.Common.SelectInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['school_canteen', 'user']).then(res => {
+    await commonApi.selectList(['school_canteen', 'user'], {company_id:id}).then(res => {
       let list = res.school_canteen.map(item => ({
         value: item.id,
         label: item.name,
@@ -138,7 +139,6 @@
         }))
       }))
       selectList.value = list.filter(item => item.children?.length)
-      console.log(`%c selectList.value == `, 'background:#41b883 ; padding:1px; color:#fff', selectList.value);
       users.value = res.user || []
     })
   }
@@ -160,6 +160,7 @@
     })
       .then(() => {
         router.push({ path: RoutesAlias.CompanyList })
+        useWorktabStore().removeTab(route.path)
       })
       .catch(() => {
         // ... do nothing

+ 0 - 1
web/src/views/company/follow/info.vue

@@ -68,7 +68,6 @@ const info = reactive<Api.Follow.FollowInfo>({ ...DefaultData })
 onMounted(() => {
   followApi.companyInfo(parseInt(useRoute().query.id as string)).then((res) => {
     Object.assign(info, res)
-    console.log(`%c info == `, 'background:#41b883 ; padding:1px; color:#fff', info);
   })
 })
 </script>

Деякі файли не було показано, через те що забагато файлів було змінено