Browse Source

九方2.0版本

root 2 năm trước cách đây
mục cha
commit
993b6d36e7
46 tập tin đã thay đổi với 4173 bổ sung69 xóa
  1. 99 0
      .idea/php.xml
  2. 589 67
      .idea/workspace.xml
  3. 90 0
      app/Http/Controllers/Api/BaseController.php
  4. 87 0
      app/Http/Controllers/Api/BomController.php
  5. 347 0
      app/Http/Controllers/Api/EmployeeController.php
  6. 170 0
      app/Http/Controllers/Api/MaterialController.php
  7. 88 0
      app/Http/Controllers/Api/MeasureController.php
  8. 181 0
      app/Http/Controllers/Api/ProcessController.php
  9. 89 0
      app/Http/Controllers/Api/ProductController.php
  10. 87 0
      app/Http/Controllers/Api/SysMenuController.php
  11. 1 0
      app/Http/Kernel.php
  12. 19 0
      app/Model/BasicMaterial.php
  13. 27 0
      app/Model/BasicProcedure.php
  14. 27 0
      app/Model/BasicProcess.php
  15. 19 0
      app/Model/Bom.php
  16. 19 0
      app/Model/BomDetail.php
  17. 19 0
      app/Model/BomDetailMeasure.php
  18. 19 0
      app/Model/BomMaterial.php
  19. 19 0
      app/Model/Depart.php
  20. 19 0
      app/Model/Employee.php
  21. 19 0
      app/Model/EmployeeDepartPermission.php
  22. 19 0
      app/Model/EmployeeMenuPermission.php
  23. 19 0
      app/Model/EmployeeTeamPermission.php
  24. 19 0
      app/Model/Material.php
  25. 19 0
      app/Model/MaterialDetail.php
  26. 19 0
      app/Model/Measure.php
  27. 28 0
      app/Model/Procedure.php
  28. 27 0
      app/Model/Process.php
  29. 19 0
      app/Model/Product.php
  30. 19 0
      app/Model/ProductDetail.php
  31. 19 0
      app/Model/Role.php
  32. 19 0
      app/Model/SysMenu.php
  33. 19 0
      app/Model/Team.php
  34. 211 0
      app/Service/BomService.php
  35. 346 0
      app/Service/EmployeeService.php
  36. 232 0
      app/Service/MaterialService.php
  37. 94 0
      app/Service/MeasureService.php
  38. 148 0
      app/Service/ProcedureService.php
  39. 146 0
      app/Service/ProcessService.php
  40. 148 0
      app/Service/ProductService.php
  41. 204 0
      app/Service/Service.php
  42. 94 0
      app/Service/SysMenuService.php
  43. 1 0
      composer.json
  44. 148 1
      composer.lock
  45. 60 0
      config/cors.php
  46. 62 1
      routes/api.php

+ 99 - 0
.idea/php.xml

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PhpIncludePathManager">
+    <include_path>
+      <path value="$PROJECT_DIR$/vendor/symfony/http-kernel" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php73" />
+      <path value="$PROJECT_DIR$/vendor/symfony/translation" />
+      <path value="$PROJECT_DIR$/vendor/symfony/finder" />
+      <path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
+      <path value="$PROJECT_DIR$/vendor/vlucas/phpdotenv" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/inflector" />
+      <path value="$PROJECT_DIR$/vendor/phpoption/phpoption" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/diff" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
+      <path value="$PROJECT_DIR$/vendor/opis/closure" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/version" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/type" />
+      <path value="$PROJECT_DIR$/vendor/ramsey/uuid" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/environment" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/resource-operations" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
+      <path value="$PROJECT_DIR$/vendor/league/commonmark" />
+      <path value="$PROJECT_DIR$/vendor/league/flysystem" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
+      <path value="$PROJECT_DIR$/vendor/league/mime-type-detection" />
+      <path value="$PROJECT_DIR$/vendor/egulias/email-validator" />
+      <path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
+      <path value="$PROJECT_DIR$/vendor/mockery/mockery" />
+      <path value="$PROJECT_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
+      <path value="$PROJECT_DIR$/vendor/composer" />
+      <path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
+      <path value="$PROJECT_DIR$/vendor/nunomaduro/collision" />
+      <path value="$PROJECT_DIR$/vendor/dragonmantank/cron-expression" />
+      <path value="$PROJECT_DIR$/vendor/facade/ignition-contracts" />
+      <path value="$PROJECT_DIR$/vendor/facade/ignition" />
+      <path value="$PROJECT_DIR$/vendor/facade/flare-client-php" />
+      <path value="$PROJECT_DIR$/vendor/monolog/monolog" />
+      <path value="$PROJECT_DIR$/vendor/psr/log" />
+      <path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
+      <path value="$PROJECT_DIR$/vendor/psr/container" />
+      <path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
+      <path value="$PROJECT_DIR$/vendor/scrivo/highlight.php" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
+      <path value="$PROJECT_DIR$/vendor/php-parallel-lint/php-console-highlighter" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-token-stream" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
+      <path value="$PROJECT_DIR$/vendor/php-parallel-lint/php-console-color" />
+      <path value="$PROJECT_DIR$/vendor/swiftmailer/swiftmailer" />
+      <path value="$PROJECT_DIR$/vendor/filp/whoops" />
+      <path value="$PROJECT_DIR$/vendor/fakerphp/faker" />
+      <path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
+      <path value="$PROJECT_DIR$/vendor/nesbot/carbon" />
+      <path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/fideloper/proxy" />
+      <path value="$PROJECT_DIR$/vendor/symfony/mime" />
+      <path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/var-dumper" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-iconv" />
+      <path value="$PROJECT_DIR$/vendor/laravel/framework" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
+      <path value="$PROJECT_DIR$/vendor/psy/psysh" />
+      <path value="$PROJECT_DIR$/vendor/laravel/tinker" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-idn" />
+      <path value="$PROJECT_DIR$/vendor/symfony/routing" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-client-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/css-selector" />
+      <path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
+      <path value="$PROJECT_DIR$/vendor/symfony/error-handler" />
+      <path value="$PROJECT_DIR$/vendor/symfony/console" />
+      <path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
+      <path value="$PROJECT_DIR$/vendor/paragonie/random_compat" />
+      <path value="$PROJECT_DIR$/vendor/phar-io/version" />
+      <path value="$PROJECT_DIR$/vendor/symfony/debug" />
+      <path value="$PROJECT_DIR$/vendor/phar-io/manifest" />
+      <path value="$PROJECT_DIR$/vendor/symfony/process" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php72" />
+      <path value="$PROJECT_DIR$/vendor/asm89/stack-cors" />
+      <path value="$PROJECT_DIR$/vendor/fruitcake/laravel-cors" />
+    </include_path>
+  </component>
+  <component name="PhpUnit">
+    <phpunit_settings>
+      <PhpUnitSettings load_method="CUSTOM_LOADER" custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" />
+    </phpunit_settings>
+  </component>
+</project>

+ 589 - 67
.idea/workspace.xml

@@ -2,11 +2,52 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="ff358f50-3bf4-4e8f-b62d-63302d20ccc3" name="Default Changelist" comment="">
-      <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/jf_admin2.0.iml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/php.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/BaseController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/BomController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/EmployeeController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/MaterialController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/MeasureController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/ProcessController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/ProductController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/SysMenuController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/BasicMaterial.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/BasicProcedure.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/BasicProcess.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Bom.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/BomDetail.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/BomDetailMeasure.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/BomMaterial.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Depart.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Employee.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/EmployeeDepartPermission.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/EmployeeMenuPermission.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/EmployeeTeamPermission.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Material.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/MaterialDetail.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Measure.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Procedure.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Process.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Product.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/ProductDetail.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Role.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/SysMenu.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Model/Team.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/BomService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/EmployeeService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/MaterialService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/MeasureService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/ProcedureService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/ProcessService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/ProductService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/Service.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Service/SysMenuService.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/config/cors.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/Http/Kernel.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Kernel.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/composer.json" beforeDir="false" afterPath="$PROJECT_DIR$/composer.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/composer.lock" beforeDir="false" afterPath="$PROJECT_DIR$/composer.lock" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/routes/api.php" beforeDir="false" afterPath="$PROJECT_DIR$/routes/api.php" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -14,44 +55,62 @@
     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
-  <component name="ComposerSettings" synchronizationState="SYNCHRONIZE">
+  <component name="ComposerSettings" doNotAsk="true" synchronizationState="SYNCHRONIZE">
     <pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath>
   </component>
+  <component name="DatabaseView">
+    <option name="SHOW_INTERMEDIATE" value="true" />
+    <option name="GROUP_DATA_SOURCES" value="true" />
+    <option name="GROUP_SCHEMA" value="true" />
+    <option name="GROUP_CONTENTS" value="false" />
+    <option name="SORT_POSITIONED" value="false" />
+    <option name="SHOW_EMPTY_GROUPS" value="false" />
+    <option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
+    <option name="HIDDEN_KINDS">
+      <set />
+    </option>
+    <expand />
+    <select />
+  </component>
   <component name="FUSProjectUsageTrigger">
     <session id="846866044">
       <usages-collector id="statistics.lifecycle.project">
         <counts>
           <entry key="project.closed" value="1" />
           <entry key="project.open.time.1" value="2" />
-          <entry key="project.opened" value="2" />
+          <entry key="project.open.time.9" value="1" />
+          <entry key="project.opened" value="3" />
         </counts>
       </usages-collector>
       <usages-collector id="statistics.file.extensions.open">
         <counts>
-          <entry key="env" value="2" />
+          <entry key="env" value="6" />
           <entry key="gitignore" value="3" />
+          <entry key="json" value="3" />
           <entry key="md" value="1" />
-          <entry key="php" value="10" />
+          <entry key="php" value="85" />
         </counts>
       </usages-collector>
       <usages-collector id="statistics.file.types.open">
         <counts>
+          <entry key="JSON" value="3" />
           <entry key="Markdown" value="1" />
-          <entry key="PHP" value="10" />
-          <entry key="PLAIN_TEXT" value="5" />
+          <entry key="PHP" value="85" />
+          <entry key="PLAIN_TEXT" value="9" />
         </counts>
       </usages-collector>
       <usages-collector id="statistics.file.extensions.edit">
         <counts>
+          <entry key="dummy" value="24" />
           <entry key="env" value="15" />
-          <entry key="php" value="31" />
+          <entry key="php" value="6095" />
           <entry key="txt" value="9" />
         </counts>
       </usages-collector>
       <usages-collector id="statistics.file.types.edit">
         <counts>
-          <entry key="PHP" value="31" />
-          <entry key="PLAIN_TEXT" value="24" />
+          <entry key="PHP" value="6095" />
+          <entry key="PLAIN_TEXT" value="48" />
         </counts>
       </usages-collector>
       <usages-collector id="statistics.vcs.git.usages">
@@ -67,51 +126,127 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/routes/api.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="324">
-              <caret line="18" column="41" selection-start-line="18" selection-start-column="37" selection-end-line="18" selection-end-column="41" />
+            <state relative-caret-position="397">
+              <caret line="65" column="67" selection-start-line="65" selection-start-column="67" selection-end-line="65" selection-end-column="67" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/public/index.php">
+        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/ProductController.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="36">
-              <caret line="7" column="3" selection-start-line="7" selection-start-column="3" selection-end-line="7" selection-end-column="3" />
+            <state relative-caret-position="29">
+              <caret line="53" column="5" lean-forward="true" selection-start-line="53" selection-start-column="5" selection-end-line="53" selection-end-column="5" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Controller.php">
-          <provider selected="true" editor-type-id="text-editor" />
+        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/MaterialController.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="397">
+              <caret line="156" column="46" lean-forward="true" selection-start-line="156" selection-start-column="46" selection-end-line="156" selection-end-column="46" />
+              <folding>
+                <element signature="e#45#77#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Auth/LoginController.php">
-          <provider selected="true" editor-type-id="text-editor" />
+        <entry file="file://$PROJECT_DIR$/app/Service/ProductService.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="2232">
+              <caret line="135" column="32" lean-forward="true" selection-start-line="135" selection-start-column="32" selection-end-line="135" selection-end-column="32" />
+            </state>
+          </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/.env">
+        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/BaseController.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="774">
-              <caret line="43" selection-start-line="43" selection-end-line="43" />
+            <state relative-caret-position="270">
+              <caret line="20" column="30" selection-start-line="20" selection-start-column="30" selection-end-line="20" selection-end-column="30" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/.gitignore">
+        <entry file="file://$PROJECT_DIR$/app/Service/MaterialService.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="402">
+              <caret line="161" column="38" selection-start-line="161" selection-start-column="38" selection-end-line="161" selection-end-column="38" />
+              <folding>
+                <element signature="e#32#60#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/Service/BomService.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="3222">
+              <caret line="179" column="20" selection-start-line="179" selection-start-column="20" selection-end-line="179" selection-end-column="20" />
+              <folding>
+                <element signature="e#32#50#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/BomController.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="425">
+              <caret line="73" column="44" lean-forward="true" selection-start-line="73" selection-start-column="44" selection-end-line="73" selection-end-column="44" />
+              <folding>
+                <element signature="e#45#72#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/Model/BomDetailMeasure.php">
           <provider selected="true" editor-type-id="text-editor">
             <state relative-caret-position="180">
-              <caret line="10" column="13" lean-forward="true" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
+              <caret line="10" column="3" lean-forward="true" selection-start-line="10" selection-start-column="3" selection-end-line="10" selection-end-column="3" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/Service/Service.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="353">
+              <caret line="186" column="68" lean-forward="true" selection-start-line="186" selection-start-column="68" selection-end-line="186" selection-end-column="68" />
+              <folding>
+                <element signature="e#61#97#0#PHP" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
     </leaf>
   </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>$return</find>
+      <find>Del</find>
+      <find>try</find>
+      <find>departList</find>
+      <find>roleList</find>
+      <find>employeeDepart</find>
+      <find>measureEdit</find>
+      <find>basicMaterialDel</find>
+      <find>measure</find>
+      <find>materialDetail</find>
+    </findStrings>
+    <dirStrings>
+      <dir>$PROJECT_DIR$/app/Service</dir>
+    </dirStrings>
+  </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
     <option name="RECENT_BRANCH_BY_REPOSITORY">
@@ -126,9 +261,53 @@
         <option value="$PROJECT_DIR$/.env" />
         <option value="$PROJECT_DIR$/public/index.php" />
         <option value="$PROJECT_DIR$/app/Http/Controllers/TextController.php" />
-        <option value="$PROJECT_DIR$/routes/api.php" />
         <option value="$PROJECT_DIR$/app/Http/Controllers/Api/TextController.php" />
         <option value="$PROJECT_DIR$/.gitignore" />
+        <option value="$PROJECT_DIR$/Model/Http/Controllers/Controller.php" />
+        <option value="$PROJECT_DIR$/Service/Http/Controllers/Controller.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Controller.php" />
+        <option value="$PROJECT_DIR$/app/Model/SysMenu.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/AuthController.php" />
+        <option value="$PROJECT_DIR$/app/Model/Employee.php" />
+        <option value="$PROJECT_DIR$/app/Model/Depart.php" />
+        <option value="$PROJECT_DIR$/app/Model/role.php" />
+        <option value="$PROJECT_DIR$/app/Model/Role.php" />
+        <option value="$PROJECT_DIR$/app/Model/Team.php" />
+        <option value="$PROJECT_DIR$/app/Model/EmployeeMenuPermission.php" />
+        <option value="$PROJECT_DIR$/app/Model/EmployeeDepartPermission.php" />
+        <option value="$PROJECT_DIR$/app/Model/EmployeeTeamPermission.php" />
+        <option value="$PROJECT_DIR$/app/Model/Measure.php" />
+        <option value="$PROJECT_DIR$/app/Model/BasicMaterial.php" />
+        <option value="$PROJECT_DIR$/app/Model/Material.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/SysMenuController.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/EmployeeController.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/MeasureController.php" />
+        <option value="$PROJECT_DIR$/app/Http/Kernel.php" />
+        <option value="$PROJECT_DIR$/app/Service/Service.php" />
+        <option value="$PROJECT_DIR$/app/Model/MaterialDetail.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/MaterialController.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/ProcessController.php" />
+        <option value="$PROJECT_DIR$/app/Model/Process.php" />
+        <option value="$PROJECT_DIR$/app/Model/BasicProcess.php" />
+        <option value="$PROJECT_DIR$/app/Model/BasicProcedure.php" />
+        <option value="$PROJECT_DIR$/app/Service/SysMenuService.php" />
+        <option value="$PROJECT_DIR$/app/Service/ProcessService.php" />
+        <option value="$PROJECT_DIR$/app/Service/ProcedureService.php" />
+        <option value="$PROJECT_DIR$/app/Model/Bom.php" />
+        <option value="$PROJECT_DIR$/app/Model/BomDetail.php" />
+        <option value="$PROJECT_DIR$/app/Model/BomMaterial.php" />
+        <option value="$PROJECT_DIR$/app/Service/EmployeeService.php" />
+        <option value="$PROJECT_DIR$/app/Service/MeasureService.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/ProductController.php" />
+        <option value="$PROJECT_DIR$/app/Model/BomDetailMeasure.php" />
+        <option value="$PROJECT_DIR$/app/Service/BomService.php" />
+        <option value="$PROJECT_DIR$/app/Model/Product.php" />
+        <option value="$PROJECT_DIR$/app/Model/ProductDetail.php" />
+        <option value="$PROJECT_DIR$/app/Service/ProductService.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/BomController.php" />
+        <option value="$PROJECT_DIR$/routes/api.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/Api/BaseController.php" />
+        <option value="$PROJECT_DIR$/app/Service/MaterialService.php" />
       </list>
     </option>
   </component>
@@ -144,7 +323,10 @@
       <path value="$PROJECT_DIR$/vendor/facade/ignition/package.json" />
     </packageJsonPaths>
   </component>
-  <component name="PhpWorkspaceProjectConfiguration">
+  <component name="PhpServers">
+    <servers />
+  </component>
+  <component name="PhpWorkspaceProjectConfiguration" interpreter_name="PHP 7.1">
     <include_path>
       <path value="$PROJECT_DIR$/vendor/symfony/http-kernel" />
       <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php73" />
@@ -231,18 +413,22 @@
       <path value="$PROJECT_DIR$/vendor/symfony/process" />
       <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
       <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php72" />
+      <path value="$PROJECT_DIR$/vendor/asm89/stack-cors" />
+      <path value="$PROJECT_DIR$/vendor/fruitcake/laravel-cors" />
     </include_path>
   </component>
   <component name="ProjectFrameBounds" extendedState="6">
-    <option name="y" value="23" />
+    <option name="y" value="27" />
     <option name="width" value="1680" />
     <option name="height" value="928" />
   </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
   <component name="ProjectView">
     <navigator proportions="" version="1">
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="Scope" />
       <pane id="ProjectPane">
         <subPane>
           <expand>
@@ -259,34 +445,44 @@
               <item name="jf_admin2.0" type="b2602c69:ProjectViewProjectNode" />
               <item name="jf_admin2.0" type="462c0819:PsiDirectoryNode" />
               <item name="app" type="462c0819:PsiDirectoryNode" />
-              <item name="Http" type="462c0819:PsiDirectoryNode" />
+              <item name="Model" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
               <item name="jf_admin2.0" type="b2602c69:ProjectViewProjectNode" />
               <item name="jf_admin2.0" type="462c0819:PsiDirectoryNode" />
               <item name="app" type="462c0819:PsiDirectoryNode" />
-              <item name="Http" type="462c0819:PsiDirectoryNode" />
-              <item name="Controllers" type="462c0819:PsiDirectoryNode" />
+              <item name="Service" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="jf_admin2.0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="jf_admin2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="routes" type="462c0819:PsiDirectoryNode" />
             </path>
           </expand>
           <select />
         </subPane>
       </pane>
-      <pane id="Scope" />
     </panes>
   </component>
   <component name="PropertiesComponent">
     <property name="WebServerToolWindowFactoryState" value="true" />
+    <property name="WebServerToolWindowPanel.toolwindow.highlight.mappings" value="true" />
+    <property name="WebServerToolWindowPanel.toolwindow.highlight.symlinks" value="true" />
+    <property name="WebServerToolWindowPanel.toolwindow.show.date" value="false" />
+    <property name="WebServerToolWindowPanel.toolwindow.show.permissions" value="false" />
+    <property name="WebServerToolWindowPanel.toolwindow.show.size" value="false" />
     <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
     <property name="nodejs_npm_path_reset_for_default_project" value="true" />
     <property name="nodejs_package_manager_path" value="npm" />
+    <property name="settings.editor.selected.configurable" value="reference.webide.settings.project.settings.php" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
       <recent name="$PROJECT_DIR$/app/Http/Controllers/Api" />
+      <recent name="$PROJECT_DIR$/app/Model" />
+      <recent name="$PROJECT_DIR$/app/Service" />
+      <recent name="$PROJECT_DIR$/config" />
       <recent name="$PROJECT_DIR$/app/Http/Controllers" />
-      <recent name="$PROJECT_DIR$" />
-      <recent name="$PROJECT_DIR$/vendor" />
     </key>
   </component>
   <component name="RunDashboard">
@@ -312,7 +508,8 @@
       <option name="presentableId" value="Default" />
       <updated>1675653840336</updated>
       <workItem from="1675653842373" duration="1729000" />
-      <workItem from="1675655986085" duration="2251000" />
+      <workItem from="1675655986085" duration="9483000" />
+      <workItem from="1675701017210" duration="72529000" />
     </task>
     <task id="LOCAL-00001" summary="九方2.0版本">
       <created>1675657293693</created>
@@ -335,18 +532,26 @@
       <option name="project" value="LOCAL" />
       <updated>1675658248119</updated>
     </task>
-    <option name="localTasksCounter" value="4" />
+    <task id="LOCAL-00004" summary="九方2.0版本">
+      <created>1675658364685</created>
+      <option name="number" value="00004" />
+      <option name="presentableId" value="LOCAL-00004" />
+      <option name="project" value="LOCAL" />
+      <updated>1675658364685</updated>
+    </task>
+    <option name="localTasksCounter" value="5" />
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="3980000" />
+    <option name="totallyTimeSpent" value="83741000" />
   </component>
   <component name="ToolWindowManager">
-    <frame x="0" y="23" width="1680" height="936" extended-state="6" />
+    <frame x="0" y="23" width="1680" height="924" extended-state="6" />
     <layout>
-      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25274727" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.23199023" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info id="Favorites" order="2" side_tool="true" />
+      <window_info anchor="bottom" id="File Transfer" weight="0.3297619" />
       <window_info anchor="bottom" id="Message" order="0" />
       <window_info anchor="bottom" id="Find" order="1" />
       <window_info anchor="bottom" id="Run" order="2" />
@@ -363,8 +568,8 @@
       <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info anchor="right" id="Remote Host" order="3" />
-      <window_info anchor="right" id="Database" order="4" />
+      <window_info anchor="right" id="Remote Host" order="3" weight="0.11294261" />
+      <window_info anchor="right" id="Database" order="4" weight="0.32967034" />
     </layout>
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -379,59 +584,376 @@
     <option name="LAST_COMMIT_MESSAGE" value="九方2.0版本" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/TextController.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="324">
-          <caret line="18" lean-forward="true" selection-start-line="18" selection-end-line="18" />
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="SPLIT">
+          <first_editor />
+          <second_editor />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/TextController.php">
+    <entry file="file://$PROJECT_DIR$/app/Model/SysMenu.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="306">
-          <caret line="17" lean-forward="true" selection-start-line="17" selection-end-line="17" />
+        <state relative-caret-position="72">
+          <caret line="4" column="39" selection-start-line="4" selection-start-column="39" selection-end-line="4" selection-end-column="39" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/routes/api.php">
+    <entry file="file://$PROJECT_DIR$/public/index.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="324">
-          <caret line="18" column="41" selection-start-line="18" selection-start-column="37" selection-end-line="18" selection-end-column="41" />
+        <state relative-caret-position="126">
+          <caret line="7" column="3" selection-start-line="7" selection-start-column="3" selection-end-line="7" selection-end-column="3" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Controller.php">
       <provider selected="true" editor-type-id="text-editor" />
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Auth/LoginController.php">
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="234">
+          <caret line="13" selection-start-line="13" selection-end-line="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../jiufang_admin/.env">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Employee.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="126">
+          <caret line="7" column="7" lean-forward="true" selection-start-line="7" selection-start-column="7" selection-end-line="7" selection-end-column="7" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Depart.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="126">
+          <caret line="7" column="5" selection-start-line="7" selection-start-column="5" selection-end-line="7" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Role.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="234">
+          <caret line="13" column="28" selection-start-line="13" selection-start-column="28" selection-end-line="13" selection-end-column="28" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Team.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="198">
+          <caret line="11" column="24" lean-forward="true" selection-start-line="11" selection-start-column="24" selection-end-line="11" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/BasicMaterial.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="234">
+          <caret line="13" column="38" selection-start-line="13" selection-start-column="24" selection-end-line="13" selection-end-column="38" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/EmployeeTeamPermission.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="342">
+          <caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="19" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/EmployeeDepartPermission.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="198">
+          <caret line="11" column="30" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Measure.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="15" column="34" lean-forward="true" selection-start-line="15" selection-start-column="34" selection-end-line="15" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Material.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="342">
+          <caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="19" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/EmployeeMenuPermission.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="15" column="28" lean-forward="true" selection-start-line="15" selection-start-column="28" selection-end-line="15" selection-end-column="28" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/EmployeeController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="499">
+          <caret line="333" column="47" selection-start-line="333" selection-start-column="47" selection-end-line="333" selection-end-column="47" />
+          <folding>
+            <element signature="e#45#77#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Middleware/CheckForMaintenanceMode.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="6" column="6" selection-start-line="6" selection-start-column="6" selection-end-line="6" selection-end-column="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Middleware/TrustProxies.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="108">
+          <caret line="7" column="6" selection-start-line="7" selection-start-column="6" selection-end-line="7" selection-end-column="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/composer.json">
       <provider selected="true" editor-type-id="text-editor" />
     </entry>
+    <entry file="file://$PROJECT_DIR$/config/cors.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-395" />
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/.env">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="774">
-          <caret line="43" selection-start-line="43" selection-end-line="43" />
+        <state relative-caret-position="504">
+          <caret line="28" column="15" lean-forward="true" selection-start-line="28" selection-start-column="15" selection-end-line="28" selection-end-column="15" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/README.md">
-      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
-        <state split_layout="SPLIT">
-          <first_editor />
-          <second_editor />
+    <entry file="file://$PROJECT_DIR$/app/Http/Kernel.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="713">
+          <caret line="43" column="4" selection-start-line="43" selection-start-column="4" selection-end-line="43" selection-end-column="4" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/public/index.php">
+    <entry file="file://$PROJECT_DIR$/app/Model/MaterialDetail.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="36">
-          <caret line="7" column="3" selection-start-line="7" selection-start-column="3" selection-end-line="7" selection-end-column="3" />
+        <state relative-caret-position="234">
+          <caret line="13" column="39" selection-start-line="13" selection-start-column="39" selection-end-line="13" selection-end-column="39" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/.gitignore">
+    <entry file="file://$PROJECT_DIR$/app/Model/BasicProcedure.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="17" column="32" lean-forward="true" selection-start-line="17" selection-start-column="32" selection-end-line="17" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/BasicProcess.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="234">
+          <caret line="14" column="45" lean-forward="true" selection-start-line="14" selection-start-column="45" selection-end-line="14" selection-end-column="45" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/SysMenuController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="430">
+          <caret line="56" column="42" selection-start-line="56" selection-start-column="42" selection-end-line="56" selection-end-column="42" />
+          <folding>
+            <element signature="e#45#76#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/ProcessController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-1753">
+          <caret line="46" column="48" lean-forward="true" selection-start-line="46" selection-start-column="48" selection-end-line="46" selection-end-column="48" />
+          <folding>
+            <element signature="e#45#76#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/ProcessService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="609">
+          <caret line="134" column="25" selection-start-line="134" selection-start-column="25" selection-end-line="134" selection-end-column="25" />
+          <folding>
+            <element signature="e#32#54#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/ProcedureService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="287">
+          <caret line="23" lean-forward="true" selection-start-line="23" selection-end-line="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Procedure.php">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Process.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="126">
+          <caret line="8" column="7" selection-start-line="8" selection-start-column="7" selection-end-line="8" selection-end-column="7" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/SysMenuService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-61">
+          <caret line="55" lean-forward="true" selection-start-line="55" selection-end-line="55" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/BomDetail.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="15" column="34" lean-forward="true" selection-start-line="14" selection-start-column="3" selection-end-line="15" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Bom.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="252">
+          <caret line="14" column="32" selection-start-line="14" selection-start-column="24" selection-end-line="14" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/Service.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="353">
+          <caret line="186" column="68" lean-forward="true" selection-start-line="186" selection-start-column="68" selection-end-line="186" selection-end-column="68" />
+          <folding>
+            <element signature="e#61#97#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/BomMaterial.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="15" column="34" selection-start-line="15" selection-start-column="34" selection-end-line="15" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/EmployeeService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="394">
+          <caret line="305" lean-forward="true" selection-start-line="305" selection-end-line="305" />
+          <folding>
+            <element signature="e#32#53#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/MeasureService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="430">
+          <caret line="69" column="11" lean-forward="true" selection-start-line="69" selection-start-column="11" selection-end-line="69" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/MeasureController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="401">
+          <caret line="74" column="46" selection-start-line="74" selection-start-column="46" selection-end-line="74" selection-end-column="46" />
+          <folding>
+            <element signature="e#45#76#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/BomDetailMeasure.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="180">
-          <caret line="10" column="13" lean-forward="true" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
+          <caret line="10" column="3" lean-forward="true" selection-start-line="10" selection-start-column="3" selection-end-line="10" selection-end-column="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/Product.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="342">
+          <caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="19" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Model/ProductDetail.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="16" column="32" lean-forward="true" selection-start-line="16" selection-start-column="32" selection-end-line="16" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/BomController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="425">
+          <caret line="73" column="44" lean-forward="true" selection-start-line="73" selection-start-column="44" selection-end-line="73" selection-end-column="44" />
+          <folding>
+            <element signature="e#45#72#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/BomService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="3222">
+          <caret line="179" column="20" selection-start-line="179" selection-start-column="20" selection-end-line="179" selection-end-column="20" />
+          <folding>
+            <element signature="e#32#50#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/ProductController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="29">
+          <caret line="53" column="5" lean-forward="true" selection-start-line="53" selection-start-column="5" selection-end-line="53" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/routes/api.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="397">
+          <caret line="65" column="67" selection-start-line="65" selection-start-column="67" selection-end-line="65" selection-end-column="67" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/BaseController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="20" column="30" selection-start-line="20" selection-start-column="30" selection-end-line="20" selection-end-column="30" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/ProductService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2232">
+          <caret line="135" column="32" lean-forward="true" selection-start-line="135" selection-start-column="32" selection-end-line="135" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Http/Controllers/Api/MaterialController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="397">
+          <caret line="156" column="46" lean-forward="true" selection-start-line="156" selection-start-column="46" selection-end-line="156" selection-end-column="46" />
+          <folding>
+            <element signature="e#45#77#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/Service/MaterialService.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="402">
+          <caret line="161" column="38" selection-start-line="161" selection-start-column="38" selection-end-line="161" selection-end-column="38" />
+          <folding>
+            <element signature="e#32#60#0#PHP" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>

+ 90 - 0
app/Http/Controllers/Api/BaseController.php

@@ -0,0 +1,90 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Http\Controllers\Controller;
+use App\Models\SystemL;
+use App\Service\DisPatchAppService;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Storage;
+
+class BaseController extends Controller
+{
+    public $user_info;
+    public function __construct()
+    {
+    }
+
+    // 返回json数据
+    protected function json_return($code=200,$msg="Success",$data=[]){
+        if(!is_array($data)&&!is_object($data)) {
+            $msg = $data;
+            $data = '';
+        }
+        if(empty($msg)) $msg = '操作成功';
+        return ['code'=>$code,'msg'=>$msg,'data'=>$data];
+    }
+
+
+    //用户行为记录,暂时放这里具体用不用后期再加
+    public function user_log($data,$user,$id,$perm_id,$remark){
+
+    }
+
+
+
+
+    //用于保存图片
+    public function save_pic(Request $request){
+        // 获取文件相关信息
+        $file = $request->file('file');
+        $ext = $file->getClientOriginalExtension();     // 扩展名
+        $realPath = $file->getRealPath();   //临时文件的绝对路径
+
+        $ext = strtolower($ext);
+        $rule = ['jpg', 'png', 'gif', "jpeg"];
+        if (!in_array($ext, $rule)) {
+            return '图片格式为jpg,png,gif';
+        }
+
+        // 上传文件
+        $file_name = time().rand(1000,9999);
+        $filename =  $file_name.'.' . $ext;
+        // 使用我们新建的uploads本地存储空间(目录)
+        Storage::disk('public')->put('pic/'.$filename, file_get_contents($realPath));
+
+        return $this->json_return(200,'上传成功' ,['url'=>'/api/pic/'.$file_name]);
+    }
+
+    public function get_pic($file_name){
+
+        if(file_exists(storage_path().'/app/public/pic/'.$file_name.'.png')){
+            $ext = 'png';
+        }elseif(file_exists(storage_path().'/app/public/pic/'.$file_name.'.jpeg')){
+            $ext = 'jpeg';
+        }elseif(file_exists(storage_path().'/app/public/pic/'.$file_name.'.jpg')){
+            $ext = 'jpg';
+        }elseif(file_exists(storage_path().'/app/public/pic/'.$file_name.'.gif')){
+            $ext = 'gif';
+        }else{
+            $ext = 'xlsx';
+//            if(file_exists(storage_path().'/app/public/pic/basic/'.$file_name.'.gif')){
+//                return response()->file(storage_path().'/app/public/pic/'.$file_name.'.'.$ext);
+//            }else{
+//                return response()->file(storage_path().'/app/public/pic/'.$file_name.'.'.$ext);
+//            }
+        }
+        return response()->file(storage_path().'/app/public/pic/'.$file_name.'.'.$ext);
+    }
+
+    public function get_basic_pic($file_name){
+        return response()->file(storage_path().'/app/public/pic/basic/'.$file_name.'.png');
+
+    }
+
+
+
+
+
+}

+ 87 - 0
app/Http/Controllers/Api/BomController.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\BomService;
+use Illuminate\Http\Request;
+
+
+class BomController extends BaseController
+{
+
+
+
+
+
+    public function add(Request $request)
+    {
+
+
+        $service = new BomService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->add($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function edit(Request $request)
+    {
+
+
+        $service = new BomService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->edit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function del(Request $request)
+    {
+
+
+        $service = new BomService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->del($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function bomList(Request $request)
+    {
+
+
+        $service = new BomService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->bomList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+}

+ 347 - 0
app/Http/Controllers/Api/EmployeeController.php

@@ -0,0 +1,347 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\EmployeeService;
+use App\Service\SysMenuService;
+use Illuminate\Http\Request;
+
+
+class EmployeeController extends BaseController
+{
+
+
+
+
+
+    public function employeeEdit(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeEdit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function employeeAdd(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function employeeDel(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function employeeList(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+    public function roleEdit(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->roleEdit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function roleAdd(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->roleAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function roleDel(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->roleDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function roleList(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->roleList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+    public function departEdit(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->departEdit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function departAdd(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->departAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function departDel(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->departDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function departList(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->departList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function teamEdit(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->teamEdit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function teamAdd(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->teamAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function teamDel(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->teamDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function teamList(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->teamList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function employeeDepart(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeDepart($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+    public function employeeTeam(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeTeam($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+    public function employeeRole(Request $request)
+    {
+
+
+        $service = new EmployeeService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->employeeRole($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+}

+ 170 - 0
app/Http/Controllers/Api/MaterialController.php

@@ -0,0 +1,170 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\MaterialService;
+use App\Service\MeasureService;
+use App\Service\SysMenuService;
+use Illuminate\Http\Request;
+
+
+class MaterialController extends BaseController
+{
+
+
+
+
+
+    public function basicMaterialList(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicMaterialList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function basicMaterialEdit(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicMaterialEdit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function basicMaterialDel(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicMaterialDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function basicMaterialAdd(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicMaterialAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function materialList(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->materialList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }    public function materialDetail(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->materialDetail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function materialEdit(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->materialEdit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function materialDel(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->materialDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function materialAdd(Request $request)
+    {
+
+
+        $service = new MaterialService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->materialAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+}

+ 88 - 0
app/Http/Controllers/Api/MeasureController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\MeasureService;
+use App\Service\SysMenuService;
+use Illuminate\Http\Request;
+
+
+class MeasureController extends BaseController
+{
+
+
+
+
+
+    public function add(Request $request)
+    {
+
+
+        $service = new MeasureService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->add($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function edit(Request $request)
+    {
+
+
+        $service = new MeasureService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->edit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function del(Request $request)
+    {
+
+
+        $service = new MeasureService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->del($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function measureList(Request $request)
+    {
+
+
+        $service = new MeasureService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->measureList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+}

+ 181 - 0
app/Http/Controllers/Api/ProcessController.php

@@ -0,0 +1,181 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\ProcessService;
+use Illuminate\Http\Request;
+
+
+class ProcessController extends BaseController
+{
+
+
+
+
+
+    public function basicProcessList(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicProcessList($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+    public function basicProcessEdit(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicProcessEdit($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+    public function basicProcessAdd(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicProcessAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+    public function basicProcessDel(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->basicProcessDel($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function processList(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->processList($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+    public function processEdit(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->processEdit($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+    public function processAdd(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->processAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+    public function processDel(Request $request)
+    {
+
+
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->processDel($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+
+
+}

+ 89 - 0
app/Http/Controllers/Api/ProductController.php

@@ -0,0 +1,89 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\MeasureService;
+use App\Service\ProductService;
+use App\Service\SysMenuService;
+use Illuminate\Http\Request;
+
+
+class ProductController extends BaseController
+{
+
+
+
+
+
+    public function add(Request $request)
+    {
+
+
+        $service = new ProductService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->add($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function edit(Request $request)
+    {
+
+
+        $service = new ProductService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->edit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function del(Request $request)
+    {
+
+
+        $service = new ProductService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->del($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function productList(Request $request)
+    {
+
+
+        $service = new ProductService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->productList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+}

+ 87 - 0
app/Http/Controllers/Api/SysMenuController.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\SysMenuService;
+use Illuminate\Http\Request;
+
+
+class SysMenuController extends BaseController
+{
+
+
+
+
+
+    public function add(Request $request)
+    {
+
+
+        $service = new SysMenuService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->add($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function edit(Request $request)
+    {
+
+
+        $service = new SysMenuService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->edit($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function del(Request $request)
+    {
+
+
+        $service = new SysMenuService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->del($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+    public function menuList(Request $request)
+    {
+
+
+        $service = new SysMenuService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->menuList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+
+
+
+}

+ 1 - 0
app/Http/Kernel.php

@@ -19,6 +19,7 @@ class Kernel extends HttpKernel
         \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
         \App\Http\Middleware\TrimStrings::class,
         \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+        \Fruitcake\Cors\HandleCors::class,
     ];
 
     /**

+ 19 - 0
app/Model/BasicMaterial.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 物料分类
+ * Class Unit
+ * @package App\Models
+ */
+class BasicMaterial extends Model
+{
+    protected $table = "basic_material"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 27 - 0
app/Model/BasicProcedure.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use PhpParser\Builder;
+
+/**
+ * 工艺属性
+ * Class Unit
+ * @package App\Models
+ */
+class BasicProcedure extends Model
+{
+    protected $table = "basic_procedure"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+
+    public function scopeWhereUnDel($query,$name='')
+    {
+        if(empty($name)) return $query->where('del_time', '=', 0);
+        else return $query->where($name, '=', 0);
+    }
+}
+

+ 27 - 0
app/Model/BasicProcess.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use PhpParser\Builder;
+
+/**
+ * 工艺属性
+ * Class Unit
+ * @package App\Models
+ */
+class BasicProcess extends Model
+{
+    protected $table = "basic_process"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+
+    public function scopeWhereUnDel($query,$name='')
+    {
+        if(empty($name)) return $query->where('del_time', '=', 0);
+        else return $query->where($name, '=', 0);
+    }
+}
+

+ 19 - 0
app/Model/Bom.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * bom
+ * Class Unit
+ * @package App\Models
+ */
+class Bom extends Model
+{
+    protected $table = "bom"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/BomDetail.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * bom
+ * Class Unit
+ * @package App\Models
+ */
+class BomDetail extends Model
+{
+    protected $table = "bom_detail"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/BomDetailMeasure.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * bom
+ * Class Unit
+ * @package App\Models
+ */
+class BomDetailMeasure extends Model
+{
+    protected $table = "bom_detail_measure"; //指定表
+    const CREATED_AT = null;
+    const UPDATED_AT = null;
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/BomMaterial.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * bom
+ * Class Unit
+ * @package App\Models
+ */
+class BomMaterial extends Model
+{
+    protected $table = "bom_material"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/Depart.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 部门管理
+ * Class Unit
+ * @package App\Models
+ */
+class Depart extends Model
+{
+    protected $table = "depart"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/Employee.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 菜单管理
+ * Class Unit
+ * @package App\Models
+ */
+class Employee extends Model
+{
+    protected $table = "employee"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/EmployeeDepartPermission.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 菜单管理
+ * Class Unit
+ * @package App\Models
+ */
+class EmployeeDepartPermission extends Model
+{
+    protected $table = "employee_depart_permission"; //指定表
+    const CREATED_AT = null;
+    const UPDATED_AT = null;
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/EmployeeMenuPermission.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 菜单管理
+ * Class Unit
+ * @package App\Models
+ */
+class EmployeeMenuPermission extends Model
+{
+    protected $table = "employee_menu_permission"; //指定表
+    const CREATED_AT = null;
+    const UPDATED_AT = null;
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/EmployeeTeamPermission.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 菜单管理
+ * Class Unit
+ * @package App\Models
+ */
+class EmployeeTeamPermission extends Model
+{
+    protected $table = "employee_team_permission"; //指定表
+    const CREATED_AT = null;
+    const UPDATED_AT = null;
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/Material.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 物料
+ * Class Unit
+ * @package App\Models
+ */
+class Material extends Model
+{
+    protected $table = "material"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/MaterialDetail.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 物料
+ * Class Unit
+ * @package App\Models
+ */
+class MaterialDetail extends Model
+{
+    protected $table = "material_detail"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/Measure.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 测量字段
+ * Class Unit
+ * @package App\Models
+ */
+class Measure extends Model
+{
+    protected $table = "measure"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 28 - 0
app/Model/Procedure.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use PhpParser\Builder;
+
+/**
+ * 产品管理
+ * Class Unit
+ * @package App\Models
+ */
+class Procedure extends Model
+{
+    protected $table = "procedure"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+
+    public function scopeWhereUnDel($query,$name='')
+    {
+        if(empty($name)) return $query->where('del_time', '=', 0);
+        else return $query->where($name, '=', 0);
+    }
+
+}
+

+ 27 - 0
app/Model/Process.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use PhpParser\Builder;
+
+/**
+ * 工艺属性
+ * Class Unit
+ * @package App\Models
+ */
+class Process extends Model
+{
+    protected $table = "process"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+
+    public function scopeWhereUnDel($query,$name='')
+    {
+        if(empty($name)) return $query->where('del_time', '=', 0);
+        else return $query->where($name, '=', 0);
+    }
+}
+

+ 19 - 0
app/Model/Product.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 物料
+ * Class Unit
+ * @package App\Models
+ */
+class Product extends Model
+{
+    protected $table = "product"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/ProductDetail.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 物料
+ * Class Unit
+ * @package App\Models
+ */
+class ProductDetail extends Model
+{
+    protected $table = "product_detail"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/Role.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 角色管理
+ * Class Unit
+ * @package App\Models
+ */
+class Role extends Model
+{
+    protected $table = "role"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/SysMenu.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 菜单管理
+ * Class Unit
+ * @package App\Models
+ */
+class SysMenu extends Model
+{
+    protected $table = "sys_menu"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/Team.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 班组管理
+ * Class Unit
+ * @package App\Models
+ */
+class Team extends Model
+{
+    protected $table = "team"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 211 - 0
app/Service/BomService.php

@@ -0,0 +1,211 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\Bom;
+use App\Model\BomDetail;
+use App\Model\BomDetailMeasure;
+use App\Model\BomMaterial;
+use App\Model\SysMenu;
+use Illuminate\Support\Facades\DB;
+
+/**
+ * bom相关
+ * @package App\Models
+ */
+class BomService extends Service
+{
+
+    public function edit($data){
+        list($status,$msg) = $this->bomRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+        $id = $data['id'];
+        $first = Bom::where('title',$data['title'])->where('id','<>',$id)->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+        try{
+            DB::beginTransaction();
+            $model = Bom::where('id',$id)->first();
+            $model->title = $data['title'];
+            $model->formula = $data['formula'] ?? '';
+            $model->unit = $data['unit'];
+            $model->label = $data['label'] ?? 0;
+            $model->label_type = $data['label_type'] ?? 0;
+            $model->save();
+            $material_insert = [];
+            $detail_insert = [];
+            $bom_id = $model->id;
+            BomDetail::where('bom_id',$bom_id)->update([
+                'del_time' => time()
+            ]);
+            BomMaterial::where('bom_id',$bom_id)->update([
+                'del_time' => time()
+            ]);
+            if(isset($data['detail'])){
+                foreach ($data['detail'] as $v){
+                    $bom_detail = new BomDetail();
+                    $bom_detail->bom_id = $bom_id;
+                    $bom_detail->sub_bom_id = $v['sub_bom_id'];
+                    $bom_detail->formula = $v['formula']??'';
+                    $bom_detail->num = $v['num'];
+                    $bom_detail->save();
+                    $bom_detail_id = $bom_detail->id;
+                    $bom_detail_insert = [];
+                    foreach ($v['measure'] as $vv){
+                        $bom_detail_insert[] = [
+                            'bom_id' => $bom_id,
+                            'bom_detail_id' => $bom_detail_id,
+                            'measure_id' => $vv['measure_id'],
+                            'value' => $vv['value'],
+                        ];
+                    }
+                    BomDetailMeasure::insert($bom_detail_insert);
+                }
+                BomDetail::insert($detail_insert);
+            }
+
+            if(isset($data['material'])){
+                foreach ($data['detail'] as $v){
+                    $material_insert[] = [
+                        'bom_id' => $v['bom_id'],
+                        'formula' => $v['formula'],
+                        'num' => $v['bom_id'],
+                        'material_id' => $v['material_id'],
+                        'crt_time' => $v['bom_id'],
+                        'upd_time' => $v['bom_id'],
+                    ];
+                }
+                BomMaterial::insert($detail_insert);
+            }
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function add($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->bomRule($data);
+//        if($this->isEmpty($data,'id')) return [false,'ID不存在!'];
+        if(!$status) return [$status,$msg];
+        $first = Bom::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+        try{
+            DB::beginTransaction();
+            $model = new Bom();
+
+            $model->title = $data['title'];
+            $model->formula = $data['formula'] ?? '';
+            $model->unit = $data['unit'];
+            $model->label = $data['label'] ?? 0;
+            $model->label_type = $data['label_type'] ?? 0;
+            $model->save();
+
+            $bom_id = $model->id;
+            $material_insert = [];
+            $detail_insert = [];
+            if(isset($data['detail'])){
+                foreach ($data['detail'] as $v){
+                    $detail_insert[] = [
+                        'bom_id' => $bom_id,
+                        'sub_bom_id' => $v['sub_bom_id'],
+                        'formula' => $v['bom_id'],
+                        'num' => $v['bom_id'],
+                        'crt_time' => $v['bom_id'],
+                        'upd_time' => $v['bom_id'],
+                    ];
+                }
+                BomDetail::insert($detail_insert);
+            }
+
+            if(isset($data['material'])){
+                foreach ($data['detail'] as $v){
+                    $bom_detail = new BomDetail();
+                    $bom_detail->bom_id = $bom_id;
+                    $bom_detail->sub_bom_id = $v['sub_bom_id'];
+                    $bom_detail->formula = $v['formula']??'';
+                    $bom_detail->num = $v['num'];
+                    $bom_detail->save();
+                    $bom_detail_id = $bom_detail->id;
+
+                    $bom_detail = new BomDetail();
+                    $bom_detail->bom_id = $bom_id;
+                    $bom_detail->sub_bom_id = $bom_detail_id;
+                    $bom_detail->formula = $v['formula']??'';
+                    $bom_detail->num = $v['num'];
+                    $bom_detail->save();
+                    $bom_detail_id = $bom_detail->id;
+                    $bom_detail_insert = [];
+                    foreach ($v['measure'] as $vv){
+                        $bom_detail_insert[] = [
+                            'bom_id' => $bom_id,
+                            'bom_detail_id' => $bom_detail_id,
+                            'measure_id' => $vv['measure_id'],
+                            'value' => $vv['value'],
+                        ];
+                    }
+                    BomDetailMeasure::insert($bom_detail_insert);
+                }
+                BomMaterial::insert($detail_insert);
+            }
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+        $id = $data['id'];
+        Bom::where('id',$id)->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function bomList($data){
+        $id = $data['id'];
+        $return = Bom::where('id',$id)->first()->toArray();
+
+        $return['bom_detail'] = Bom::from('bom_detail as bd')
+            ->leftJoin('bom as b','b.id','bd.bom_id')
+            ->where('bd.del_time',0)
+            ->select('title','bd.*')->get()->toArray();
+
+
+        $return['material'] = Bom::from('bom_material as bm')
+            ->leftJoin('material as m','m.id','bm.bom_id')
+            ->where('bm.del_time',0)
+            ->select('m.title','bm.*')->get()->toArray();
+
+
+        return [200,$return];
+    }
+
+    public function bomRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+        if($this->isEmpty($data,'unit')) return [false,'单位不存在!'];
+        if($this->isEmpty($data,'label')) return [false,'芯片设置不存在!'];
+//        if($this->isEmpty($data,'icon')) return [201,'d不存在!'];
+//        if($this->isEmpty($data,'uri')) return [false,'路由不存在!'];
+
+
+        return [true,''];
+    }
+
+
+}

+ 346 - 0
app/Service/EmployeeService.php

@@ -0,0 +1,346 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
+use App\Model\EmployeeMenuPermission;
+use App\Model\EmployeeTeamPermission;
+use App\Model\Role;
+use App\Model\SysMenu;
+use App\Model\Team;
+use Illuminate\Support\Facades\Hash;
+
+/**
+ * 人员相关
+ * @package App\Models
+ */
+class EmployeeService extends Service
+{
+
+    public function employeeEdit($data){
+        list($status,$msg) = $this->employeeRule($data);
+        if(!$status) return [$status,$msg];
+        $first = SysMenu::where('emp_id',$data['emp_id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'工号已存在!'];
+
+        $model = new Employee();
+        $model = $model->where('id',$data['id'])->first();
+
+        $model->id_card = $data['id_card']??'';
+        $model->emp_id = $data['emp_id'] ;
+        $model->mobile = $data['mobile'];
+        $model->emp_name = $data['emp_name'];
+        $model->state = 1;
+//        $model->crt_id = $user->id;
+//        $model->crt_time = time();
+        $model->is_admin = $data['is_admin'];
+        if($model->is_admin == 1){
+            $model->account = $data['account'];
+            if($data['password'] !== '********'){
+                $model->password   = Hash::make($data['password']);
+            }
+
+        }
+        $model->save();
+        return [true,'保存成功!'];
+
+    }
+
+    public function employeeAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->employeeRule($data);
+        if(!$status) return [$status,$msg];
+//        $first = SysMenu::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Employee();
+
+        $model->id_card = $data['id_card']??'';
+        $model->emp_id = $data['emp_id'] ;
+        $model->mobile = $data['mobile'];
+        $model->emp_name = $data['emp_name'];
+        $model->state = 1;
+//        $model->crt_id = $user->id;
+        $model->crt_id = 1;
+//        $model->crt_time = time();
+        $model->is_admin = $data['is_admin'];
+        if($model->is_admin == 1){
+            $model->account = $data['account'];
+            $model->password   = Hash::make($data['password']);
+        }
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function employeeDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Employee::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function employeeList($data){
+        $list = Employee::where('del_time',0)->select('id_card','emp_id','mobile','emp_name','crt_time','account','is_admin','upd_time','id')->orderBy('id','desc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function employeeRule($data){
+        if($this->isEmpty($data,'emp_id')) return [false,'工号不存在!'];
+//        if($this->isEmpty($data,'icon')) return [201,'d不存在!'];
+        if($this->isEmpty($data,'mobile')) return [false,'手机号不存在!'];
+        if($this->isEmpty($data,'emp_name')) return [false,'姓名不存在!'];
+
+        return [true,''];
+    }
+
+
+    public function roleEdit($data){
+        list($status,$msg) = $this->roleRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Role::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Role();
+        $model = $model->where('id',$data['id'])->first();
+
+        $model->title = $data['title'];
+        $model->save();
+        return [true,'保存成功!'];
+
+    }
+
+    public function roleAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->roleRule($data);
+        if(!$status) return [$status,$msg];
+        $first = SysMenu::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Role();
+
+        $model->title = $data['title'] ;
+
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function roleDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Role::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function roleList($data){
+        $list = Role::where('del_time',0)->select('title','title','crt_time','id','upd_time')->orderBy('id','desc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function roleRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+
+        return [true,''];
+    }
+
+
+    public function departEdit($data){
+        list($status,$msg) = $this->departRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Depart::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Depart();
+        $model = $model->where('id',$data['id'])->first();
+
+        $model->title = $data['title'];
+        $model->code = $data['code']??'';
+        $model->save();
+        return [true,'保存成功!'];
+
+    }
+
+    public function departAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->departRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Depart::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Depart();
+
+        $model->title = $data['title'] ;
+        $model->code = $data['code'] ?? '' ;
+
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function departDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Depart::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function departList($data){
+        $list = Depart::where('del_time',0)->select('title','crt_time','id','upd_time','code')->orderBy('id','desc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function departRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+
+        return [true,''];
+    }
+
+
+    public function teamEdit($data){
+        list($status,$msg) = $this->teamRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Team::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Team();
+        $model = $model->where('id',$data['id'])->first();
+
+        $model->title = $data['title'];
+        $model->code = $data['code'] ?? '';
+        $model->save();
+        return [true,'保存成功!'];
+
+    }
+
+    public function teamAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->teamRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Team::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Team();
+
+        $model->title = $data['title'] ;
+        $model->code = $data['code'] ?? '' ;
+
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function teamDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Team::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function teamList($data){
+        $list = Team::where('del_time',0)->select('title','id','crt_time','upd_time','code')->orderBy('id','desc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function teamRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+
+        return [true,''];
+    }
+
+    public function employeeRole($data){
+        $role_ids = [];
+        $employee_ids = [];
+        foreach ($data as $v){
+            if(isset($v['role_id'])){
+                if(!in_array($v['role_id'],$role_ids)){
+                    $role_ids[] = $v['role_id'];
+                }
+            }
+
+            if(isset($v['employee_id'])){
+                if(!in_array($v['employee_id'],$employee_ids)){
+                    $employee_ids[] = $v['employee_id'];
+                }
+            }
+        }
+
+        EmployeeMenuPermission::wherein('role_id',$role_ids)->delete();
+        EmployeeMenuPermission::wherein('employee_id',$employee_ids)->delete();
+
+
+        EmployeeMenuPermission::insert($data);
+
+        return [200,'保存成功!'];
+
+    }
+
+    public function employeeDepart($data){
+        $type = $data['type'];
+
+        if($type == 1){
+            EmployeeDepartPermission::where('depart_id',$data['id'])->delete();
+        }else{
+            EmployeeDepartPermission::where('employee_id',$data['id'])->delete();
+        }
+
+        EmployeeDepartPermission::insert($data['insert']);
+
+        return [200,'保存成功!'];
+    }
+
+    public function employeeTeam($data){
+        $type = $data['type'];
+
+        if($type == 1){
+            EmployeeTeamPermission::where('team_id',$data['id'])->delete();
+        }else{
+            EmployeeTeamPermission::where('employee_id',$data['id'])->delete();
+        }
+
+        EmployeeTeamPermission::insert($data['insert']);
+
+        return [200,'保存成功!'];
+    }
+
+
+}

+ 232 - 0
app/Service/MaterialService.php

@@ -0,0 +1,232 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\BasicMaterial;
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
+use App\Model\EmployeeMenuPermission;
+use App\Model\EmployeeTeamPermission;
+use App\Model\Material;
+use App\Model\MaterialDetail;
+use App\Model\Role;
+use App\Model\SysMenu;
+use App\Model\Team;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Hash;
+
+/**
+ * 人员相关
+ * @package App\Models
+ */
+class MaterialService extends Service
+{
+
+    public function basicMaterialEdit($data){
+        if($this->isEmpty($data,'id')) return [201,'ID不存在!'];
+        list($status,$msg) = $this->basicMaterialRule($data);
+        if(!$status) return [$status,$msg];
+        $first = BasicMaterial::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'工号已存在!'];
+
+        $model = new BasicMaterial();
+        $model = $model->where('id',$data['id'])->first();
+
+        $model->id_card = $data['title'];
+
+        $model->save();
+        return [true,'保存成功!'];
+
+    }
+
+    public function basicMaterialAdd($data,$user){
+
+        list($status,$msg) = $this->basicMaterialRule($data);
+        if(!$status) return [$status,$msg];
+        $first = BasicMaterial::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new BasicMaterial();
+
+        $model->title = $data['title'];
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function basicMaterialDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        BasicMaterial::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function basicMaterialList($data){
+        $list = BasicMaterial::where('del_time',0)->select('title','crt_time','upd_time','id')->orderBy('id','desc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function basicMaterialRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+
+        return [true,''];
+    }
+
+
+    public function MaterialEdit($data){
+        list($status,$msg) = $this->MaterialRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID必传'];
+        $first = Material::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $first = Material::where('abbreviation_title',$data['abbreviation_title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'简称已存在!'];
+        DB::beginTransaction();
+        try{
+
+            $model = new Material();
+            $model = $model->where('id',$data['id'])->first();
+            $model->b_m_id = $data['b_m_id'] ;
+            $model->title = $data['title'] ;
+            $model->abbreviation_title = $data['abbreviation_title'] ;
+            $model->unit = $data['unit'] ;
+            $model->remark = $data['remark'] ?? '' ;
+            $model->img_url = $data['img_url'] ?? '' ;
+
+            $model->save();
+
+            $detail_insert = [];
+            MaterialDetail::where('material_id',$model->id)->update([
+                'del_time' => time()
+            ]);
+            if(isset($data['children'])){
+                foreach ($data['children'] as $v){
+                    $detail_insert[] = [
+                        'material_id' => $model->id,
+                        'price' => $v['price'],
+                        'long' => $v['long'],
+                        'width' => $v['width'],
+                        'high' => $v['high'],
+                        'code' => $v['code'],
+                        'brand' => $v['brand'],
+                    ];
+                }
+            }
+            MaterialDetail::insert($detail_insert);
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+        return [true,'保存成功!'];
+
+    }
+
+    public function MaterialAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->MaterialRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Material::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $first = Material::where('abbreviation_title',$data['abbreviation_title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'简称已存在!'];
+        DB::beginTransaction();
+        try{
+
+            $model = new Material();
+
+            $model->b_m_id = $data['b_m_id'] ;
+            $model->title = $data['title'] ;
+            $model->abbreviation_title = $data['abbreviation_title'] ;
+            $model->unit = $data['unit'] ;
+            $model->remark = $data['remark'] ?? '' ;
+            $model->img_url = $data['img_url'] ?? '' ;
+
+            $model->save();
+
+            $detail_insert = [];
+            if(isset($data['detail'])){
+                foreach ($data['detail'] as $v){
+                    $detail_insert[] = [
+                        'material_id' => $model->id,
+                        'price' => $v['price'],
+                        'long' => $v['long'],
+                        'width' => $v['width'],
+                        'high' => $v['high'],
+                        'code' => $v['code'],
+                        'brand' => $v['brand'],
+                    ];
+                }
+            }
+            MaterialDetail::insert($detail_insert);
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function MaterialDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Material::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        MaterialDetail::where('material_id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function MaterialList($data){
+        $list = Material::where('del_time',0)->select('title','b_m_id','abbreviation_title','unit','crt_time','upd_time','id')->orderBy('id','desc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [true,$list];
+    }
+    public function MaterialDetail($data){
+
+        if($this->isEmpty($data,'id')) return [false,'ID必传'];
+        $id = $data['id'];
+        $detail = Material::where('del_time',0)->where('id',$id)->select('title','b_m_id','abbreviation_title','unit','crt_time','upd_time','id')->first();
+        if(empty($detail)) return [false,'数据不存在!'];
+        $detail['detail'] = MaterialDetail::where('material_id',$id)->select('price','long','width','high','crt_time','upd_time','code','brand')->get()->toArray();
+
+
+
+        return [true,$detail];
+    }
+
+    public function MaterialRule($data){
+        if($this->isEmpty($data,'b_m_id')) return [false,'物料分类不存在!'];
+        if($this->isEmpty($data,'title')) return [false,'物料名称不存在!'];
+        if($this->isEmpty($data,'abbreviation_title')) return [false,'物料简称不存在!'];
+        if($this->isEmpty($data,'unit')) return [false,'物料单位不存在!'];
+
+        return [true,''];
+    }
+
+
+
+
+
+}

+ 94 - 0
app/Service/MeasureService.php

@@ -0,0 +1,94 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
+use App\Model\EmployeeMenuPermission;
+use App\Model\EmployeeTeamPermission;
+use App\Model\Measure;
+use App\Model\Role;
+use App\Model\SysMenu;
+use App\Model\Team;
+use Illuminate\Support\Facades\Hash;
+
+/**
+ * 测量相关
+ * @package App\Models
+ */
+class MeasureService extends Service
+{
+
+    public function edit($data){
+        if($this->isEmpty($data,'id')) return [201,'ID不存在!'];
+        list($status,$msg) = $this->rule($data);
+        if(!$status) return [$status,$msg];
+        $first = Measure::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Measure();
+        $model = $model->where('id',$data['id'])->first();
+        $model->title = $data['title'];
+        $model->e_title = $data['e_title'] ;
+        $model->sort = $data['sort'] ?? 0;
+
+        $model->save();
+
+        return [true,'保存成功!'];
+
+
+    }
+
+    public function add($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->rule($data);
+        if(!$status) return [$status,$msg];
+        $first = Measure::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Measure();
+
+        $model->title = $data['title'];
+        $model->e_title = $data['e_title'] ;
+        $model->sort = $data['sort'] ?? 0;
+
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Measure::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function measureList($data){
+        $list = Measure::where('del_time',0)->select('title','e_title','crt_time','upd_time','id')->orderBy('sort','asc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function rule($data){
+        if($this->isEmpty($data,'title')) return [false,'中文名称不存在!'];
+//        if($this->isEmpty($data,'icon')) return [201,'d不存在!'];
+        if($this->isEmpty($data,'e_title')) return [false,'英文名称不存在!'];
+
+        return [true,''];
+    }
+
+
+
+
+}

+ 148 - 0
app/Service/ProcedureService.php

@@ -0,0 +1,148 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\SysMenu;
+use App\Models\BasicProcedure;
+use App\Models\BasicProcess;
+use App\Models\Procedure;
+
+/**
+ * 工序相关
+ * @package App\Models
+ */
+class ProcedureService extends Service
+{
+
+    public function basicProcedureEdit($data){
+        list($status,$msg) = $this->basicProcedureRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID不存在'];
+        $first = BasicProcedure::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+
+        $model = new BasicProcedure();
+        $model = $model->where('id',$data['id'])->first();
+        $model->title = $data['title'];
+        $model->parent_id = $data['parent_id'] ;
+        $model->save();
+
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function basicProcedureAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->basicProcedureRule($data);
+        if(!$status) return [$status,$msg];
+        $first = BasicProcedure::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new BasicProcedure();
+
+        $model->title = $data['title'];
+        $model->parent_id = $data['parent_id'] ;
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function basicProcedureDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        BasicProcedure::where('id',$data['id'])->update([
+            'del_time',time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function basicProcedureList($data){
+        $list = BasicProcedure::where('del_time',0)->select('title','parent_id','crt_time','upd_time')->get()->toArray();
+        $return = $this->makeTree(0,$list);
+        $return = $this->set_sort_circle($return);
+
+
+        return [200,$return];
+    }
+
+    public function basicProcedureRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+        if($this->isEmpty($data,'parent_id')) return [false,'父级不存在!'];
+
+        return [true,''];
+    }
+
+
+    public function procedureEdit($data){
+        list($status,$msg) = $this->procedureRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID不存在'];
+        $first = Procedure::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+
+        $model = new Procedure();
+        $model = $model->where('id',$data['id'])->first();
+        $model->title = $data['title'];
+        $model->p_id = $data['p_id'] ;
+        $model->save();
+
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function procedureAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->procedureRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Procedure::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Procedure();
+
+        $model->title = $data['title'];
+        $model->p_id = $data['p_id'] ;
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function procedureDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Procedure::where('id',$data['id'])->update([
+            'del_time',time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function procedureList($data){
+        $list = Procedure::where('del_time',0)->select('title','p_id','crt_time','upd_time')->get()->toArray();
+
+        $list = $this->limit($list,'',$data);
+
+
+        return [200,$list];
+    }
+
+    public function procedureRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+        if($this->isEmpty($data,'p_id')) return [false,'分类不存在!'];
+
+        return [true,''];
+    }
+
+
+}

+ 146 - 0
app/Service/ProcessService.php

@@ -0,0 +1,146 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\SysMenu;
+use App\Models\BasicProcess;
+use App\Models\Process;
+
+/**
+ * 工艺相关
+ * @package App\Models
+ */
+class ProcessService extends Service
+{
+
+    public function basicProcessEdit($data){
+        list($status,$msg) = $this->basicProcessRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID不存在'];
+        $first = BasicProcess::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+
+        $model = new BasicProcess();
+        $model = $model->where('id',$data['id'])->first();
+        $model->title = $data['title'];
+        $model->parent_id = $data['parent_id'] ;
+        $model->save();
+
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function basicProcessAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->basicProcessRule($data);
+        if(!$status) return [$status,$msg];
+        $first = BasicProcess::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new BasicProcess();
+
+        $model->title = $data['title'];
+        $model->parent_id = $data['parent_id'] ;
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function basicProcessDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        BasicProcess::where('id',$data['id'])->update([
+            'del_time',time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function basicProcessList($data){
+        $list = BasicProcess::where('del_time',0)->select('title','parent_id','crt_time','upd_time')->get()->toArray();
+        $return = $this->makeTree(0,$list);
+        $return = $this->set_sort_circle($return);
+
+
+        return [200,$return];
+    }
+
+    public function basicProcessRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+        if($this->isEmpty($data,'parent_id')) return [false,'父级不存在!'];
+
+        return [true,''];
+    }
+
+    public function processEdit($data){
+        list($status,$msg) = $this->processRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID不存在'];
+        $first = Process::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+
+        $model = new Process();
+        $model = $model->where('id',$data['id'])->first();
+        $model->title = $data['title'];
+        $model->p_id = $data['p_id'] ;
+        $model->save();
+
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function processAdd($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->processRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Process::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Process();
+
+        $model->title = $data['title'];
+        $model->p_id = $data['p_id'] ;
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function processDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Process::where('id',$data['id'])->update([
+            'del_time',time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function processList($data){
+        $list = Process::where('del_time',0)->select('title','p_id','crt_time','upd_time');
+//        $return = $this->makeTree(0,$list);
+//        $return = $this->set_sort_circle($return);
+        $list = $this->limit($list,'',$list);
+
+        return [200,$list];
+    }
+
+    public function processRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+        if($this->isEmpty($data,'p_id')) return [false,'分类不存在!'];
+
+        return [true,''];
+    }
+
+
+}

+ 148 - 0
app/Service/ProductService.php

@@ -0,0 +1,148 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
+use App\Model\EmployeeMenuPermission;
+use App\Model\EmployeeTeamPermission;
+use App\Model\Measure;
+use App\Model\Product;
+use App\Model\ProductDetail;
+use App\Model\Role;
+use App\Model\SysMenu;
+use App\Model\Team;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Hash;
+
+/**
+ * 产品相关
+ * @package App\Models
+ */
+class ProductService extends Service
+{
+
+    public function edit($data){
+        if($this->isEmpty($data,'id')) return [201,'ID不存在!'];
+        list($status,$msg) = $this->rule($data);
+        if(!$status) return [$status,$msg];
+        $first = Product::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+        DB::beginTransaction();
+        try{
+
+            $model = new Product();
+            $model = $model->where('id',$data['id'])->first();
+            $model->title = $data['title'];
+            $model->unit = $data['unit'] ;
+            $model->model = $data['model'] ?? '';
+            $model->save();
+            $product_id = $model->id;
+            $product_detail_insert = [];
+            foreach ($data['product_detail'] as $v) {
+
+                $product_detail_insert[] = [
+                    'bom_id' => $v['bom_id'],
+                    'num' => $v['num'],
+                    'product_id' => $product_id,
+                ];
+            }
+            ProductDetail::insert($product_detail_insert);
+            DB::commit();
+            return [true,'保存成功'];
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+
+
+    }
+
+    public function add($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->rule($data);
+        if(!$status) return [$status,$msg];
+        $first = Product::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+        DB::beginTransaction();
+        try{
+
+            $model = new Product();
+            $model->title = $data['title'];
+            $model->unit = $data['unit'] ;
+            $model->model = $data['model'] ?? '';
+            $model->save();
+            $product_id = $model->id;
+            $product_detail_insert = [];
+            foreach ($data['product_detail'] as $v) {
+
+                $product_detail_insert[] = [
+                    'bom_id' => $v['bom_id'],
+                    'num' => $v['num'],
+                    'product_id' => $product_id,
+                ];
+            }
+            ProductDetail::insert($product_detail_insert);
+            DB::commit();
+            return [true,'保存成功'];
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+
+
+
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Product::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function productList($data){
+        $list = Product::where('del_time',0)->select('title','unit','model','crt_time','upd_time','id')->orderBy('sort','asc');
+
+        $list = $this->limit($list,'',$data);
+
+        return [200,$list];
+    }
+
+    public function productDetail($data){
+
+        $first = Product::where('del_time',0)->where('id',$data['id'])->select('title','unit','model','crt_time','upd_time','id')->first();
+
+        if(empty($first)) return [false,'err'];
+
+
+
+        $first = $first->toArray();
+        $first['detail'] = ProductDetail::from('product_detail as pd')
+            ->leftJoin('bom as m','m.id','pd.bom_id')
+            ->select('title','unit','num')->get()->toArray();
+        return [200,$first];
+    }
+
+    public function rule($data){
+        if($this->isEmpty($data,'title')) return [false,'中文名称不存在!'];
+//        if($this->isEmpty($data,'icon')) return [201,'d不存在!'];
+        if($this->isEmpty($data,'unit')) return [false,'单位不存在!'];
+        if($this->isEmpty($data,'model')) return [false,'型号不存在!'];
+
+        return [true,''];
+    }
+
+
+
+
+}

+ 204 - 0
app/Service/Service.php

@@ -0,0 +1,204 @@
+<?php
+
+namespace App\Service;
+
+//use App\Service\LogService;
+use Illuminate\Support\Facades\File;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Storage;
+
+/**
+ * 公用的公共服务
+ * @package App\Models
+ */
+class Service
+{
+
+    public $log;
+    public $total = 0;
+
+    public function __construct()
+    {
+
+    }
+
+    //分页共用
+    public function limit($db, $columns, $request)
+    {
+        $per_page = $request['page_size'] ?? 9999;
+        $page = $request['page_index'] ?? 1;
+        $return = $db->paginate($per_page, $columns, 'page', $page)->toArray();
+
+        $data['total'] = $return['total'];
+        $data['data'] = $return['data'];
+        return $data;
+    }
+
+
+    //抽象一个查询条件,省的每天写很多行
+    protected function is_exist_db($data, $word, $words, $db, $formula = '=', $type = '')
+    {
+        if (isset($data[$word]) && ($data[$word] !== null && $data[$word] !== '' && $data[$word] !== [])) {
+            switch ($type) {
+                case 'time':
+                    $data[$word] = ctype_digit($data[$word]) ? $data[$word] : strtotime($data[$word]);
+                    if ($formula == '<'||$formula == '<=') $data[$word] += 86400;
+                    $db = $db->where($words, $formula, $data[$word]);
+                    break;
+                case 'like':
+                    $db = $db->where($words, $type, '%' . $data[$word] . '%');
+                    break;
+                case 'in':
+                    if (is_array($data[$word])) {
+                        $db = $db->wherein($words, $data[$word]);
+                    } else {
+                        $db = $db->wherein($words, explode(',', $data[$word]));
+                    }
+
+                    break;
+                default:
+                    $db = $db->where($words, $formula, $data[$word]);
+                    break;
+            }
+
+            return $db;
+        }
+        return $db;
+    }
+
+
+    //判断是否为空
+    protected function isEmpty($data, $word)
+    {
+        if (isset($data[$word]) && (!empty($data[$word]) || $data[$word] === '0'|| $data[$word] === 0)) return false;
+        return true;
+    }
+
+
+    //递归处理数据成子父级关系
+    public function makeTree($parentId, &$node)
+    {
+        $tree = [];
+        foreach ($node as $key => $value) {
+            if ($value['parent_id'] == $parentId) {
+                $tree[$value['id']] = $value;
+                unset($node[$key]);
+                if (isset($tree[$value['id']]['children'])) {
+                    $tree[$value['id']]['children'] = array_merge($tree[$value['id']]['children'], $this->makeTree($value['id'], $node));
+                } else {
+                    $tree[$value['id']]['children'] = $this->makeTree($value['id'], $node);
+                }
+            }
+        }
+        return $tree;
+    }
+
+    //进行递归处理数组的排序问题
+    public function set_sort_circle($data){
+        foreach ($data as $k=>$v){
+//            var_dump($v);die;
+            if(isset($v['children'])&&!empty($v['children'])){
+                $data[$k]['children'] =  $this->set_sort_circle($v['children']);
+            }
+        }
+        $data = array_merge($data);
+
+        return $data;
+    }
+
+
+    //根据编码规则获取每一级的code
+    public function get_rule_code($code, $rule)
+    {
+        $rules = [];
+        $num = 0;
+        foreach ($rule as $v) {
+            $num += $v['num'];
+            $code = substr($code, 0, $num);
+            if (strlen($code) != $num) continue;
+            $rules[] = $code;
+
+        }
+
+        return $rules;
+    }
+
+
+
+    function curlOpen($url, $config = array())
+    {
+        $arr = array('post' => false,'referer' => $url,'cookie' => '', 'useragent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; customie8)', 'timeout' => 100, 'return' => true, 'proxy' => '', 'userpwd' => '', 'nobody' => false,'header'=>array(),'gzip'=>true,'ssl'=>true,'isupfile'=>false,'returnheader'=>false,'request'=>'post');
+        $arr = array_merge($arr, $config);
+        $ch = curl_init();
+
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);
+        curl_setopt($ch, CURLOPT_NOBODY, $arr['nobody']);
+        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+        curl_setopt($ch, CURLOPT_USERAGENT, $arr['useragent']);
+        curl_setopt($ch, CURLOPT_REFERER, $arr['referer']);
+        curl_setopt($ch, CURLOPT_TIMEOUT, $arr['timeout']);
+
+
+        curl_setopt($ch, CURLOPT_HEADER, $arr['returnheader']);//��ȡheader
+        if($arr['gzip']) curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
+        if($arr['ssl'])
+        {
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        }
+        if(!empty($arr['cookie']))
+        {
+            curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);
+            curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);
+        }
+
+        if(!empty($arr['proxy']))
+        {
+            //curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+            curl_setopt ($ch, CURLOPT_PROXY, $arr['proxy']);
+            if(!empty($arr['userpwd']))
+            {
+                curl_setopt($ch,CURLOPT_PROXYUSERPWD,$arr['userpwd']);
+            }
+        }
+
+        //ip�Ƚ����⣬�ü�ֵ��ʾ
+        if(!empty($arr['header']['ip']))
+        {
+            array_push($arr['header'],'X-FORWARDED-FOR:'.$arr['header']['ip'],'CLIENT-IP:'.$arr['header']['ip']);
+            unset($arr['header']['ip']);
+        }
+        $arr['header'] = array_filter($arr['header']);
+
+        if(!empty($arr['header']))
+        {
+            curl_setopt($ch, CURLOPT_HTTPHEADER, $arr['header']);
+        }
+
+        if($arr['request'] === 'put'){
+            curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
+            curl_setopt($ch, CURLOPT_POSTFIELDS,$arr['post']);
+        }elseif($arr['post'] != false)
+        {
+            curl_setopt($ch, CURLOPT_POST, true);
+            if(is_array($arr['post']) && $arr['isupfile'] === false)
+            {
+                $post = http_build_query($arr['post']);
+            }
+            else
+            {
+                $post = $arr['post'];
+            }
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
+        }
+
+        $result = curl_exec($ch);
+        curl_close($ch);
+
+        return $result;
+    }
+
+}

+ 94 - 0
app/Service/SysMenuService.php

@@ -0,0 +1,94 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\SysMenu;
+
+/**
+ * 菜单相关
+ * @package App\Models
+ */
+class SysMenuService extends Service
+{
+
+    public function edit($data){
+        list($status,$msg) = $this->menuRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+        $id = $data['id'];
+        $first = SysMenu::where('title',$data['title'])->where('id','<>',$id)->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = SysMenu::where('id',$id)->first();
+        $model->title = $data['title'];
+        $model->icon = $data['icon'] ??  '';
+        $model->uri = $data['uri'];
+        $model->parent_id = $data['parent_id'];
+        $model->sort = $data['sort'] ?? 0;
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function add($data,$user){
+
+
+//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
+        list($status,$msg) = $this->menuRule($data);
+        if(!$status) return [$status,$msg];
+        $first = SysMenu::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new SysMenu();
+
+        $model->title = $data['title'];
+        $model->icon = $data['icon'] ??  '';
+        $model->uri = $data['uri'];
+        $model->parent_id = $data['parent_id'];
+        $model->sort = $data['sort'] ?? 0;
+//        $model->crt_id = $user->id;
+        $model->crt_id = 1;
+        $model->save();
+
+        return [true,'保存成功!'];
+
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        SysMenu::where('id',$data['id'])->update([
+            'del_time'=>time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function menuList($data){
+        if(isset($data['type'])) $type = $data['type'];
+        else $type = '1';
+        if($type === '1'){
+            $return  = SysMenu::where('del_time',0)->select('title','icon','uri','parent_id','sort','crt_time','id')->orderBy('sort','desc')->get()->toArray();
+        }else{
+            $list = SysMenu::where('del_time',0)->where('state',1)->select('title','icon','uri','parent_id','sort','crt_time','id')->orderBy('sort','desc')->get()->toArray();
+            $return = $this->makeTree(0,$list);
+            $return = $this->set_sort_circle($return);
+        }
+
+
+        return [200,$return];
+    }
+
+    public function menuRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+//        if($this->isEmpty($data,'icon')) return [201,'d不存在!'];
+//        if($this->isEmpty($data,'uri')) return [false,'路由不存在!'];
+        if($this->isEmpty($data,'parent_id')) return [false,'父级不存在!'];
+
+        return [true,''];
+    }
+
+
+}

+ 1 - 0
composer.json

@@ -10,6 +10,7 @@
     "require": {
         "php": "^7.2.5|^8.0",
         "fideloper/proxy": "^4.4",
+        "fruitcake/laravel-cors": "^2.2",
         "laravel/framework": "^6.20.26",
         "laravel/tinker": "^2.5"
     },

+ 148 - 1
composer.lock

@@ -4,9 +4,71 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "6e4a9dd2476552506dba12be3b05aeec",
+    "content-hash": "2102e15cdb84f6ebdc1ab56ee86aab9a",
     "packages": [
         {
+            "name": "asm89/stack-cors",
+            "version": "v2.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/asm89/stack-cors.git",
+                "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+                "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2|^8.0",
+                "symfony/http-foundation": "^4|^5|^6",
+                "symfony/http-kernel": "^4|^5|^6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7|^9",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Asm89\\Stack\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Alexander",
+                    "email": "iam.asm89@gmail.com"
+                }
+            ],
+            "description": "Cross-origin resource sharing library and stack middleware",
+            "homepage": "https://github.com/asm89/stack-cors",
+            "keywords": [
+                "cors",
+                "stack"
+            ],
+            "support": {
+                "issues": "https://github.com/asm89/stack-cors/issues",
+                "source": "https://github.com/asm89/stack-cors/tree/v2.1.1"
+            },
+            "time": "2022-01-18T09:12:03+00:00"
+        },
+        {
             "name": "doctrine/inflector",
             "version": "2.0.4",
             "source": {
@@ -394,6 +456,91 @@
             "time": "2022-02-09T13:33:34+00:00"
         },
         {
+            "name": "fruitcake/laravel-cors",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/fruitcake/laravel-cors.git",
+                "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534",
+                "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "asm89/stack-cors": "^2.0.1",
+                "illuminate/contracts": "^6|^7|^8|^9",
+                "illuminate/support": "^6|^7|^8|^9",
+                "php": ">=7.2"
+            },
+            "require-dev": {
+                "laravel/framework": "^6|^7.24|^8",
+                "orchestra/testbench-dusk": "^4|^5|^6|^7",
+                "phpunit/phpunit": "^6|^7|^8|^9",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Fruitcake\\Cors\\CorsServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Fruitcake\\Cors\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fruitcake",
+                    "homepage": "https://fruitcake.nl"
+                },
+                {
+                    "name": "Barry vd. Heuvel",
+                    "email": "barryvdh@gmail.com"
+                }
+            ],
+            "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application",
+            "keywords": [
+                "api",
+                "cors",
+                "crossdomain",
+                "laravel"
+            ],
+            "support": {
+                "issues": "https://github.com/fruitcake/laravel-cors/issues",
+                "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://fruitcake.nl",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/barryvdh",
+                    "type": "github"
+                }
+            ],
+            "time": "2022-02-23T14:25:13+00:00"
+        },
+        {
             "name": "laravel/framework",
             "version": "v6.20.44",
             "source": {

+ 60 - 0
config/cors.php

@@ -0,0 +1,60 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Laravel CORS Options
+    |--------------------------------------------------------------------------
+    |
+    | The allowed_methods and allowed_headers options are case-insensitive.
+    |
+    | You don't need to provide both allowed_origins and allowed_origins_patterns.
+    | If one of the strings passed matches, it is considered a valid origin.
+    |
+    | If array('*') is provided to allowed_methods, allowed_origins or allowed_headers
+    | all methods / origins / headers are allowed.
+    |
+    */
+
+    /*
+     * You can enable CORS for 1 or multiple paths.
+     * Example: ['api/*']
+     */
+    'paths' => ['api/*'],
+
+    /*
+    * Matches the request method. `[*]` allows all methods.
+    */
+    'allowed_methods' => ['*'],
+
+    /*
+     * Matches the request origin. `[*]` allows all origins. Wildcards can be used, eg `*.mydomain.com`
+     */
+    'allowed_origins' => ['*'],
+
+    /*
+     * Patterns that can be used with `preg_match` to match the origin.
+     */
+    'allowed_origins_patterns' => [],
+
+    /*
+     * Sets the Access-Control-Allow-Headers response header. `[*]` allows all headers.
+     */
+    'allowed_headers' => ['*'],
+
+    /*
+     * Sets the Access-Control-Expose-Headers response header with these headers.
+     */
+    'exposed_headers' => [],
+
+    /*
+     * Sets the Access-Control-Max-Age response header when > 0.
+     */
+    'max_age' => 0,
+
+    /*
+     * Sets the Access-Control-Allow-Credentials header.
+     */
+    'supports_credentials' => false,
+];

+ 62 - 1
routes/api.php

@@ -16,4 +16,65 @@ use Illuminate\Http\Request;
 Route::middleware('auth:api')->get('/user', function (Request $request) {
     return $request->user();
 });
-Route::any('tt', 'Api\TextController@test');
+Route::any('menuAdd', 'Api\SysMenuController@add');
+Route::any('menuEdit', 'Api\SysMenuController@edit');
+Route::any('menuDel', 'Api\SysMenuController@del');
+Route::any('menuList', 'Api\SysMenuController@menuList');
+
+Route::any('employeeAdd', 'Api\EmployeeController@employeeAdd');
+Route::any('employeeEdit', 'Api\EmployeeController@employeeEdit');
+Route::any('employeeDel', 'Api\EmployeeController@employeeDel');
+Route::any('employeeList', 'Api\EmployeeController@employeeList');
+
+
+Route::any('departAdd', 'Api\EmployeeController@departAdd');
+Route::any('departEdit', 'Api\EmployeeController@departEdit');
+Route::any('departDel', 'Api\EmployeeController@departDel');
+Route::any('departList', 'Api\EmployeeController@departList');
+
+
+Route::any('roleAdd', 'Api\EmployeeController@roleAdd');
+Route::any('roleEdit', 'Api\EmployeeController@roleEdit');
+Route::any('roleDel', 'Api\EmployeeController@roleDel');
+Route::any('roleList', 'Api\EmployeeController@roleList');
+
+
+
+Route::any('teamAdd', 'Api\EmployeeController@teamAdd');
+Route::any('teamEdit', 'Api\EmployeeController@teamEdit');
+Route::any('teamDel', 'Api\EmployeeController@teamDel');
+Route::any('teamList', 'Api\EmployeeController@teamList');
+
+Route::any('employeeDepart', 'Api\EmployeeController@employeeDepart');
+Route::any('employeeTeam', 'Api\EmployeeController@employeeTeam');
+Route::any('employeeRole', 'Api\EmployeeController@employeeRole');
+
+
+Route::any('measureAdd', 'Api\MeasureController@Add');
+Route::any('measureEdit', 'Api\MeasureController@Edit');
+Route::any('measureDel', 'Api\MeasureController@Del');
+Route::any('measureList', 'Api\MeasureController@measureList');
+
+
+
+Route::any('basicMaterialList', 'Api\MaterialController@basicMaterialList');
+Route::any('basicMaterialEdit', 'Api\MaterialController@basicMaterialEdit');
+Route::any('basicMaterialAdd', 'Api\MaterialController@basicMaterialAdd');
+Route::any('basicMaterialDel', 'Api\MaterialController@basicMaterialDel');
+
+Route::any('materialList', 'Api\MaterialController@materialList');
+Route::any('materialDetail', 'Api\MaterialController@materialDetail');
+Route::any('materialEdit', 'Api\MaterialController@materialEdit');
+Route::any('materialAdd', 'Api\MaterialController@materialAdd');
+Route::any('materialDel', 'Api\MaterialController@materialDel');
+
+
+Route::any('productList', 'Api\MaterialController@productList');
+Route::any('productEdit', 'Api\MaterialController@edit');
+Route::any('productAdd', 'Api\MaterialController@edd');
+Route::any('productDel', 'Api\MaterialController@del');
+
+Route::any('bomList', 'Api\bomController@bomList');
+Route::any('bomEdit', 'Api\bomController@edit');
+Route::any('bomAdd', 'Api\bomController@edd');
+Route::any('bomDel', 'Api\bomController@del');