bianjiang 1 year ago
parent
commit
71d7404fca

+ 4 - 4
package.json

@@ -20,11 +20,11 @@
     "@queenjs-modules/queditor": "^0.0.9",
     "@queenjs-modules/queentree": "^0.0.8",
     "@queenjs-modules/queentree-explorer": "^0.0.2",
-    "@queenjs/components": "^0.0.5",
-    "@queenjs/controllers": "^0.0.6",
+    "@queenjs/components": "0.0.23",
+    "@queenjs/controllers": "^0.0.8",
     "@queenjs/icons": "^0.0.20",
     "@queenjs/theme": "^0.0.8",
-    "@queenjs/ui": "^0.0.2",
+    "@queenjs/ui": "0.0.6",
     "@queenjs/use": "^0.0.4",
     "@queenjs/utils": "^0.0.2",
     "@simonwep/pickr": "^1.8.2",
@@ -49,7 +49,7 @@
     "proto.gl": "^1.0.0",
     "qrcode": "^1.5.1",
     "queen3d": "^0.0.80",
-    "queenjs": "^1.0.0-beta.69",
+    "queenjs": "1.0.0-beta.77",
     "queentree": "^0.1.86-nocheck",
     "rimraf": "^3.0.2",
     "rxjs": "^7.8.1",

+ 2 - 2
src/comm/controllers/deviceCtrl.ts

@@ -22,7 +22,7 @@ export class DeviceController extends Controller {
   ipc: any;
 
   profile = { wsPort: "", appGuid: "" };
-
+  appDataDir = "";
   isEnvOk = false;
 
   constructor() {
@@ -92,7 +92,7 @@ export class DeviceController extends Controller {
       wsPort: "",
       appGuid: "",
     };
-
+    this.appDataDir = await this.GetAppDataDir();
     console.log("current app profile=>", this.profile);
   }
 

+ 1 - 3
src/comm/controllers/index.ts

@@ -1,13 +1,11 @@
 import { DeviceController } from "./deviceCtrl";
 import { NatsController } from "./natsCtrl";
-import { ProjectController } from "./lancherPrjCtrl";
 import { AppMsgRecvController } from "./appMsgRecvCtrl";
 import { AppScreenMsgController } from "./appScreenMsgCtrl";
 
 export {
   DeviceController,
-  ProjectController,
   NatsController,
   AppMsgRecvController,
-  AppScreenMsgController
+  AppScreenMsgController,
 };

+ 0 - 128
src/comm/controllers/lancherPrjCtrl.ts

@@ -1,128 +0,0 @@
-import { useCtx } from "../ctx";
-import { Controller } from "../core/controller";
-import { Base64 } from "js-base64";
-
-type GetAssetPathFunc = (ext: string) => string;
-
-export class ProjectController extends Controller {
-  RootDir = "";
-  DataDir = "";
-  HostURL = "";
-  _swiftLocal = true;
-  _spu3dFile: any;
-  UserId = "spu3d";
-  NatsProfile = { apiPort: "", wsPort: "", ip: "" };
-
-  async onReady() {
-    // const params = new URLSearchParams(location.search);
-    // const projectPath = params.get("path") as string;
-    // this.RootDir = projectPath;
-    const deviceCtrl = useCtx().deviceCtrl;
-
-    deviceCtrl.GetAppDataDir().then((dir) => {
-      this.DataDir = dir;
-      this.RootDir = dir;
-    });
-
-    // if (!projectPath) {
-    //   deviceCtrl.SetMainTitle("spu3d");
-    //   return;
-    // }
-    // deviceCtrl.SetMainTitle("项目:" + projectPath);
-    // this.HostURL = await deviceCtrl.StartHttpServer(this.RootDir);
-    // console.log("host url=>", this.HostURL);
-    this.NatsProfile = await deviceCtrl.GetNatsProfile();
-
-    console.log("nats profile=>", this.NatsProfile);
-  }
-
-  getOutputDir() {
-    return this.RootDir + "/" + "outputs";
-  }
-  getAppDataDir() {
-    return this.DataDir;
-  }
-  getAppInstallDir() {
-    return this.createPath("installDir");
-  }
-
-  getDefaultLogo() {
-    return this.DataDir + "/static/thumbnail.png";
-  }
-  createPath(fpath: string) {
-    return this.RootDir + "/" + fpath;
-  }
-
-  createBase64Path(fpath: string) {
-    const str = Base64.encode(this.createPath(fpath));
-    console.log("str", str);
-    return str;
-  }
-
-  getSwiftUri(assetPath: string) {
-    if (this._swiftLocal) return this.getLocalAbsoluteUri(assetPath);
-    return this.getHttpAbsoluteUri(assetPath);
-  }
-
-  getHttpAbsoluteUri(url: string) {
-    if (!url) return "";
-    if (url.substring(0, 2) == "//") return "http://" + url;
-    if (url.substring(0, 4) == "http") return url;
-    if (url.charAt(0) == "/") return this.HostURL + url.substring(1);
-    return this.HostURL + url;
-  }
-
-  getLocalAbsoluteUri(url: string) {
-    if (!url) return "";
-    if (url.substring(0, 2) == "//") return "http://" + url;
-    if (url.substring(0, 4) == "http") return url;
-    if (url.charAt(0) == "/") return this.RootDir + url;
-    return this.RootDir + "/" + url;
-  }
-
-  getRelativeUri(url: string) {
-    let s = this.HostURL.length;
-    let pre = url.substring(0, s);
-    if (pre == this.HostURL) return url.substring(s + 1);
-
-    s = this.RootDir.length;
-    pre = url.substring(0, s);
-    if (pre == this.RootDir) return url.substring(s + 1);
-
-    return "";
-  }
-
-  async pickProject() {
-    const deviceCtrl = useCtx().deviceCtrl;
-    const projectDir = await deviceCtrl.SelectDir();
-    if (await this.isProjectExit(projectDir)) {
-      return projectDir;
-    } else {
-      return Promise.reject();
-    }
-  }
-
-  async isProjectExit(dir: string) {
-    const deviceCtrl = useCtx().deviceCtrl;
-    return await deviceCtrl.IsFileExit(`${dir}/project.spu3d`);
-  }
-
-  isProjectFile(fpath: string) {
-    const r = fpath.substring(0, this.RootDir.length);
-    return r == this.RootDir;
-  }
-
-  async copy2Project(fpath: string, getAssetPath: GetAssetPathFunc) {
-    if (this.isProjectFile(fpath)) {
-      return fpath.substring(this.RootDir.length + 1);
-    }
-
-    const ext = fpath.substring(fpath.lastIndexOf("."));
-
-    const assetfpath = getAssetPath(ext);
-
-    await useCtx().deviceCtrl.CopyFile(fpath, this.createPath(assetfpath));
-
-    return assetfpath;
-  }
-}

+ 0 - 1
src/comm/ctx/config.ts

@@ -1,7 +1,6 @@
 import * as Controls from "../controllers";
 const ctx = {
   deviceCtrl: new Controls.DeviceController(),
-  prjCtrl: new Controls.ProjectController(),
   natsCtrl: new Controls.NatsController(),
   recvCtrl: new Controls.AppMsgRecvController(),
   msgCtrl:new Controls.AppScreenMsgController(),

+ 1 - 1
src/comm/ctx/index.ts

@@ -1,6 +1,6 @@
 import { ctx } from "./config";
 
-let initOrder = ["deviceCtrl", "natsCtrl", "prjCtrl", "recvCtrl", "msgCtrl"];
+let initOrder = ["deviceCtrl", "natsCtrl", "recvCtrl", "msgCtrl"];
 export async function SetInitOrder<K extends keyof typeof ctx>(ctrls: K[]) {
   initOrder = ctrls;
 }

+ 1 - 2
src/modules/list/actions/index.ts

@@ -4,6 +4,5 @@ import list from "./list";
 
 import canvas from "./canvas";
 import animate from "./animate";
-import storage from "./storage";
 
-export default [load, dialog, canvas, animate, list, storage];
+export default [load, dialog, canvas, animate, list];

+ 17 - 12
src/modules/list/actions/list.ts

@@ -3,18 +3,23 @@ import ListModule from "..";
 
 export default ListModule.action({
   async getAssetList() {
-    const { deviceCtrl, prjCtrl } = useCtx();
-    const installdir = prjCtrl.getAppInstallDir();
-    const jsonDir=`${installdir}/screen/assets.json`
-    try {
-      const listConfig = await deviceCtrl.ReadFileText(jsonDir);
-      if (!listConfig.error && listConfig.text) {
-        const list = JSON.parse(listConfig.text);
-        this.store.list = list;
-      }
-    } catch (e) {
-      console.error(e);
+    const { deviceCtrl } = useCtx();
+    const appDataDir = deviceCtrl.appDataDir;
+    const currentCategory = localStorage.getItem("category") || "default";
+    const assetsJson = await deviceCtrl.ReadFileText(
+      `${appDataDir}/screen/assets_${currentCategory}.json`
+    );
+
+    if (assetsJson.error) {
+      const res = await deviceCtrl.WriteFileText(
+        `${appDataDir}/screen/assets_${currentCategory}.json`,
+        "[]"
+      );
+      this.store.list = [];
+    }
+    if (assetsJson.text) {
+      const assets = JSON.parse(assetsJson.text);
+      this.store.list = assets;
     }
   },
-  
 });

+ 0 - 47
src/modules/list/actions/storage.ts

@@ -1,47 +0,0 @@
-import { Exp_Storage } from "@queenjs-modules/queentree-explorer/dicts/storage";
-import {
-  HostRootItem,
-  NodeRootItem,
-} from "@queenjs-modules/queentree-explorer/typings";
-
-import ListModule from "..";
-
-export default ListModule.action({
-  initExpStorage(baseURL: string) {
-    Exp_Storage.setVersion("1.0.5").setDefaultValue(() => {
-      const expHosts: { [name: string]: HostRootItem } = {};
-
-      const localNodeRoot: NodeRootItem = {
-        names: ["本地"],
-        ids: [Math.random().toString()],
-        nodeType: "host",
-        tabPerms: ["rename"],
-        nodePerms: ["editable", "saveAs"],
-      };
-
-      expHosts[localNodeRoot.ids[0]] = {
-        baseURL: baseURL,
-        authURL: "",
-        authKey: "queentreesku3d",
-      };
-
-      const expNodeRoots = [localNodeRoot];
-
-      return {
-        expHosts,
-        expWindows: [
-          {
-            groupName: "我的资源",
-            rootNodeIds: expNodeRoots.map(
-              (rootNode) => rootNode.ids.at(-1) || ""
-            ),
-          },
-        ],
-        expNodeRoots,
-        expActiveState: {
-          currWindowName: "我的资源",
-        },
-      };
-    });
-  },
-});

+ 0 - 3
src/modules/list/stores.ts

@@ -1,4 +1,3 @@
-import { StateRoot } from "queenjs";
 import ListModule from ".";
 import { ColDataType, DialogItem } from "./objects/item";
 
@@ -28,5 +27,3 @@ export const stores = ListModule.store({
   }),
   getters: {},
 });
-
-export default class extends StateRoot {}

+ 28 - 6
src/pages/App.tsx

@@ -1,20 +1,42 @@
-import { defineComponent } from "vue";
+import { defineComponent, reactive } from "vue";
 import { Provider } from "queenjs/adapter/vue";
 import { Router } from "vue-router";
 import { createApp } from "vue";
 import { queenApi } from "queenjs";
 import "windi.css";
 import "@/styles/global.less";
+import { InitControllers } from "@/comm/ctx";
+import { Spin } from "ant-design-vue";
 let setModuleHooks: any[] = [];
 
 const App = defineComponent(() => {
+  const state = reactive({
+    loading: true,
+  });
+  try {
+    InitControllers().then(() => {
+      state.loading = false;
+    });
+  } catch (error) {
+    console.error(error);
+    state.loading = true;
+  }
   setModuleHooks.forEach((hook) => hook());
   setModuleHooks = [];
-  return () => (
-    <Provider>
-      <router-view></router-view>
-    </Provider>
-  );
+  return () => {
+    if (state.loading) {
+      return (
+        <div class={"text-center mt-20px"}>
+          <Spin tip={"初始加载中..."}></Spin>
+        </div>
+      );
+    }
+    return (
+      <Provider>
+        <router-view></router-view>
+      </Provider>
+    );
+  };
 });
 
 export function startApp(router: Router, hooks: any[] = []) {

+ 65 - 44
src/pages/website/routes/backend/List.tsx

@@ -1,14 +1,24 @@
+import { useCtx } from "@/comm/ctx";
 import { useList } from "@/modules/list";
 import { css } from "@linaria/core";
-import { setQueentreeExplorer } from "@queenjs-modules/queentree-explorer";
 import { Image } from "@queenjs/ui";
-import { Button, Space, Table } from "ant-design-vue";
-import { defineComponent } from "vue";
+import { Button, Select, Space, Table } from "ant-design-vue";
+
+import { defineComponent, reactive } from "vue";
+import CategoryModal from "./categoryModal";
 
 export default defineComponent({
   setup() {
     const { store, showModal, actions } = useList();
-    setQueentreeExplorer({});
+    const state = reactive({
+      select: "default",
+      optsions: [
+        {
+          label: "默认",
+          value: "default",
+        },
+      ],
+    });
     const columns = [
       {
         title: "封面图",
@@ -19,62 +29,70 @@ export default defineComponent({
         },
       },
       {
-        title: "模型名称",
+        title: "名称",
         dataIndex: "name",
         key: "name",
       },
     ];
-
-    const showFiles = async () => {
-      // showModal(
-      //   <PickNodeSteps
-      //     onSubmit={(branchArr: any) => {
-      //       const branch = branchArr[0][0];
-      //       const dbId = branch.parent?.state.id;
-      //       const defineId = branch.state.id;
-      //       localStorage.setItem("dbId", dbId);
-      //       localStorage.setItem("defineId", defineId);
-      //       console.log("xxxxxxxxxxxxxxxxx", dbId, defineId);
-      //       actions.getAssetList(dbId, defineId);
-      //       Modal.clear();
-      //     }}
-      //     lastStepText="选择"
-      //     steps={[
-      //       {
-      //         title: "选择模型库",
-      //         content: () => {
-      //           return (
-      //             <PickNodeSteps.PickNodeStep
-      //               options={{
-      //                 nodeType: "branch",
-      //                 childNodeType: "pack",
-      //               }}
-      //             />
-      //           );
-      //         },
-      //       },
-      //     ]}
-      //     expConfig={{ showNodeToolbar: false, nodeListColumns: 6 }}
-      //   />,
-      //   {
-      //     width: "600px",
-      //   }
-      // );
+    const initShowCategory = async () => {
+      const { deviceCtrl } = useCtx();
+      const appDataDir = deviceCtrl.appDataDir;
+      const category = await deviceCtrl.ReadFileText(
+        `${appDataDir}/screen/category.json`
+      );
+      const currentCategory = localStorage.getItem("category") || "default";
+      state.select = currentCategory;
+      if (!category.error && category.text) {
+        const assets = JSON.parse(category.text);
+        state.optsions = assets;
+      }
+    };
+    initShowCategory();
+    const setShowCategory = (value: any) => {
+      localStorage.setItem("category", value || "default");
+      state.select = value;
+      actions.getAssetList();
+    };
+    const createShowCategory = async () => {
+      const { deviceCtrl } = useCtx();
+      const res: any = await showModal(<CategoryModal />, {
+        title: "新建分类",
+      });
+      const options = [...state.optsions];
+      const optionItem = options.find((e) => {
+        return e.value == res.value;
+      });
+      if (optionItem) {
+        return;
+      }
+      options.push(res);
+      state.optsions = options;
+      const appDataDir = deviceCtrl.appDataDir;
+      await deviceCtrl.WriteFileText(
+        `${appDataDir}/screen/category.json`,
+        JSON.stringify(options)
+      );
     };
     return () => (
       <div class={ViewStyle}>
         <div class="table_header">
-          <div class="title">模型列表</div>
+          <div class="title">展示列表</div>
           <div>
             <Space>
+              <Select
+                class={"select"}
+                value={state.select}
+                options={state.optsions}
+                onChange={setShowCategory}
+              ></Select>
               <Button
                 type="primary"
                 ghost
                 onClick={() => {
-                  showFiles();
+                  createShowCategory();
                 }}
               >
-                导入模型
+                新建展示分类
               </Button>
             </Space>
           </div>
@@ -101,6 +119,9 @@ const ViewStyle = css`
       font-size: 18px;
       font-weight: bold;
     }
+    .select {
+      width: 150px;
+    }
   }
   .ant-table-thead > tr > th,
   .ant-table-tbody > tr > td {

+ 53 - 0
src/pages/website/routes/backend/categoryModal.tsx

@@ -0,0 +1,53 @@
+import { css } from "@linaria/core";
+import { defineComponent, reactive } from "vue";
+
+import { Button, Form, Input } from "ant-design-vue";
+
+import { useModal } from "queenjs";
+const layout = {
+  labelCol: { span: 6 },
+  wrapperCol: { span: 18 },
+};
+export default defineComponent({
+  setup() {
+    const modal = useModal();
+    const formState = reactive({
+      label: "",
+      value: "",
+    });
+    const rules = {
+      label: [
+        { required: true, message: "分类名称不能为空", trigger: "change" },
+      ],
+      value: [{ required: true, message: "分类值不能为空", trigger: "change" }],
+    };
+
+    const { validate, validateInfos } = Form.useForm(formState, rules);
+    const submit = () => {
+      validate().then(() => {
+        modal.submit(formState);
+      });
+    };
+    return () => (
+      <div class={ViewStyle}>
+        <Form {...layout}>
+          <Form.Item label="分类名称" {...validateInfos.label}>
+            <Input v-model={[formState.label, "value"]} />
+          </Form.Item>
+          <Form.Item label="分类值" {...validateInfos.value}>
+            <Input v-model={[formState.value, "value"]} />
+          </Form.Item>
+          <Form.Item wrapperCol={{ offset: 6, span: 18 }}>
+            <Button type="primary" onClick={submit}>
+              保存
+            </Button>
+          </Form.Item>
+        </Form>
+      </div>
+    );
+  },
+});
+
+const ViewStyle = css`
+  width: 400px;
+`;

+ 3 - 17
src/pages/website/routes/backend/components/layout/BasicLayout.tsx

@@ -20,23 +20,14 @@ export default defineComponent({
     };
 
     onMounted(() => {
-      try {
-        InitControllers().then(() => {
-          state.loading = false;
-        });
-      } catch (error) {
-        console.error(error);
-        state.loading = true;
-      }
+     
 
       const data = useRoute();
       state.menuKey = [data.path];
     });
 
     return () => {
-      if (state.loading) {
-        return <Spin class={SpinStyle} tip={"初始加载中..."}></Spin>;
-      }
+      
       return (
         <Layout class={HomeStyle}>
           <Sider width={200} trigger={null} collapsible>
@@ -78,12 +69,7 @@ export default defineComponent({
     };
   },
 });
-const SpinStyle = css`
-  position: absolute;
-  top: 50px;
-  left: 50%;
-  transform: translateX(-50%);
-`;
+
 const HomeStyle = css`
   width: 100%;
   min-height: 100vh;

+ 25 - 23
yarn.lock

@@ -1239,17 +1239,17 @@
   resolved "http://124.70.149.18:4873/@queenjs-modules%2fqueentree/-/queentree-0.0.8.tgz#2a471100a1d09e72dcbc54daa453fc4c275a71b7"
   integrity sha512-+B9WbIUgm656hR9bougNDLAq2p7foaEhybfyjLHu2DIqmyNooKkzNth8e/R/R4QjbCI6Who6Pg6q0H9txnjLcA==
 
-"@queenjs/components@^0.0.5":
-  version "0.0.5"
-  resolved "http://124.70.149.18:4873/@queenjs%2fcomponents/-/components-0.0.5.tgz"
-  integrity sha512-w9QsH0qsvJcVeYo3gCQqXyqtBsn+hSGoUeajs7a2ShFu4BW9232qlYLXV023Jqx1WlvaVgwqoMVd9GNae99bSQ==
+"@queenjs/components@0.0.23":
+  version "0.0.23"
+  resolved "http://124.70.149.18:4873/@queenjs%2fcomponents/-/components-0.0.23.tgz#2451ddc94a99d19d37baf2d1a6d371131aa07485"
+  integrity sha512-D8d5WokiUTjnHt1wZEAoRJKp5nRECIkrrAfAn0MkBgNF8fK2l5PLWMqvKRngzk8X5PWLI/eTjv3S4uFuI82JOw==
   dependencies:
     "@queenjs/utils" "^0.0.1"
 
-"@queenjs/controllers@^0.0.6":
-  version "0.0.6"
-  resolved "http://124.70.149.18:4873/@queenjs%2fcontrollers/-/controllers-0.0.6.tgz#c77a34c0878f757efea89be3351edae9b0dcd66a"
-  integrity sha512-oAVDDiPSDesIVOIIaJpFEto7QPTJ5a2ZyBg+dluGn7BDQdNDKDDcml4gvqA0x8fzuwxJd3pTVb0HIYwI+o/lDQ==
+"@queenjs/controllers@^0.0.8":
+  version "0.0.8"
+  resolved "http://124.70.149.18:4873/@queenjs%2fcontrollers/-/controllers-0.0.8.tgz#5ce115c618148305fc12fc6bd2265cfbfc7b457a"
+  integrity sha512-YZ9wrbw14j+7EA62vvDvF18aavGGey9jlesaGceQfYqvSRhSajp8sAp4glxucl0GDsI9nd+k0DMumgyr40Qoyg==
 
 "@queenjs/icons@^0.0.20":
   version "0.0.20"
@@ -1263,10 +1263,12 @@
   dependencies:
     color-convert "^2.0.1"
 
-"@queenjs/ui@^0.0.2":
-  version "0.0.2"
-  resolved "http://124.70.149.18:4873/@queenjs%2fui/-/ui-0.0.2.tgz"
-  integrity sha512-bRO1MZ4uu8B/XQEtv+zd/GNzLM9Np3U/FbWxbR/C0GF8uAsaWgx9tZjGGju2ZTPQP2Hg27M2AvvGh3EmhXJFGw==
+"@queenjs/ui@0.0.6":
+  version "0.0.6"
+  resolved "http://124.70.149.18:4873/@queenjs%2fui/-/ui-0.0.6.tgz#d9acc23271c26a391ef9ff0484d71aeb098ee74c"
+  integrity sha512-c9b5kmmjhsj4j5nuaj492QElyt3ySiydfieyc8J7gXNwwuh8G3nQUJdSmsD7jA1B3hB0raPVOarNZVlpye3NrA==
+  dependencies:
+    swiper "^8.4.4"
 
 "@queenjs/use@^0.0.4":
   version "0.0.4"
@@ -5397,7 +5399,7 @@ module-alias@^2.2.2:
 
 moduse@^0.0.7:
   version "0.0.7"
-  resolved "http://124.70.149.18:4873/moduse/-/moduse-0.0.7.tgz"
+  resolved "http://124.70.149.18:4873/moduse/-/moduse-0.0.7.tgz#1dbd1cbf1277e8bbdb3839e4671aa266913cccc5"
   integrity sha512-9FyEh/sg4pObHbF79BHA2ZvUOzlOkFMcvn798U7YrpDAgFMXtS4HY1CNYEgB75MpdNr8ryeDVEdAHw1AQkzlgg==
   dependencies:
     lodash "^4.17.21"
@@ -6375,19 +6377,19 @@ queen3d@^0.0.80:
   resolved "http://124.70.149.18:4873/queen3d/-/queen3d-0.0.80.tgz"
   integrity sha512-GaBzki+vcjC4JDN4olh/UI3oW6BRc1qbk1+pwUlbBN0oC+ilKNn9C64tLSEio0zWZikEtGb6A9jrUXntX1no4A==
 
-queenjs@^1.0.0-beta.69:
-  version "1.0.0-beta.69"
-  resolved "http://124.70.149.18:4873/queenjs/-/queenjs-1.0.0-beta.69.tgz#ee348103035562ab0943564a30c66c7314c26789"
-  integrity sha512-PrEzn48RiuI7gbAhMhWL0zVF9Yp1w9fgHCahEPTDW2LUozyhL7rMA4Q6g7IuGy3H4ydxj3SHVl1KhqmYMI1IeQ==
+queenjs@1.0.0-beta.77:
+  version "1.0.0-beta.77"
+  resolved "http://124.70.149.18:4873/queenjs/-/queenjs-1.0.0-beta.77.tgz#2e6f4dff612ab0a0c870d6aa62b2d9313e99efaf"
+  integrity sha512-zeVrTF7W9CSZ65/mZqoWHoTGCb+cHioI3PpIYm7OVHVe3koYSiB8tC3fR2xRroYot8iG4IqLXC5EKTcsLarc8Q==
   dependencies:
     axios "^0.27.2"
     eventemitter3 "^4.0.7"
     moduse "^0.0.7"
-    vue-moduse "^0.0.8"
+    vue-moduse "^0.0.10"
 
 queentree@^0.1.86-nocheck:
   version "0.1.86-nocheck"
-  resolved "http://124.70.149.18:4873/queentree/-/queentree-0.1.86-nocheck.tgz"
+  resolved "http://124.70.149.18:4873/queentree/-/queentree-0.1.86-nocheck.tgz#89625e52ccc46ab3a2b70f021dc1ab01579c0689"
   integrity sha512-Yf1NWOonvTl3BACgyfF8jqRFq926VIFhcChmy39h1siigJ4/LvX0LpK3XeX5YxzquCaqq1R23GOuvZlmoka5uw==
 
 queue-microtask@^1.2.2:
@@ -7625,10 +7627,10 @@ vue-loader@^17.0.0:
     hash-sum "^2.0.0"
     loader-utils "^2.0.0"
 
-vue-moduse@^0.0.8:
-  version "0.0.8"
-  resolved "http://124.70.149.18:4873/vue-moduse/-/vue-moduse-0.0.8.tgz"
-  integrity sha512-5MdR2/ZJ6FeALmg+cK+FOzjfqFU/hnHaatNDRtbic3mCHDy/XQiFxTZFre7Yuck6VD1Jdl1sLPhv3Exg0iMYgA==
+vue-moduse@^0.0.10:
+  version "0.0.10"
+  resolved "http://124.70.149.18:4873/vue-moduse/-/vue-moduse-0.0.10.tgz#03d0f5fa21d7db909f9162dc12bfd5c514db397e"
+  integrity sha512-lS0tf4kvJKw+sohwuObujk90NGD024H+pOulVRv73q+75+pccKz6R6VnENMM11AgygOmYK0fioUlgOGYMFYgrw==
 
 vue-router@^4.0.3:
   version "4.1.5"