jabin 3 年之前
父節點
當前提交
4827230e8c

+ 3 - 1
.env.development

@@ -1,2 +1,4 @@
 VUE_APP_API_BASE_URL=/api
-#VUE_APP_API_BASE_URL=http://localhost:8081/api
+#VUE_APP_API_BASE_URL=http://localhost:8080/api
+
+VUE_APP_PORT=8080

+ 1 - 0
.gitignore

@@ -22,3 +22,4 @@ yarn-error.log*
 *.sln
 *.sw?
 vue.config.js
+package-lock.json

+ 2 - 2
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "ele-admin-template",
+  "name": "page-main-data",
   "version": "1.11.2",
   "private": true,
   "scripts": {
@@ -69,4 +69,4 @@
     "vue-template-compiler": "^2.7.10",
     "webpack": "^5.74.0"
   }
-}
+}

+ 21 - 0
qiankun_config/store.js

@@ -0,0 +1,21 @@
+import store from '../src/store';
+
+export default function (state) {
+  if (!state) {
+    return;
+  }
+  // 主题
+  if (state.theme) {
+    for (const key in state.theme) {
+      store.commit('theme/SET', { key, value: state.theme[key] });
+    }
+
+    store.dispatch('theme/setColor', state.theme.color);
+    store.dispatch('theme/setWeakMode', state.theme.weakMode);
+    store.dispatch('theme/setStyleResponsive', state.theme.styleResponsive);
+  }
+  //   用户信息
+  if (state.user?.info) {
+    store.commit('user/setUserInfo', state.user.info);
+  }
+}

+ 5 - 4
src/App.vue

@@ -9,13 +9,14 @@
 
   export default {
     name: 'App',
-    created() {
+    created () {
+      console.log('我是子应用------------------------------------');
       // 恢复主题
       this.$store.dispatch('theme/recoverTheme');
     },
     methods: {
       /* 路由切换更新浏览器标题 */
-      setDocumentTitle() {
+      setDocumentTitle () {
         updateDocumentTitle(
           this.$route,
           (key) => this.$t(key),
@@ -24,10 +25,10 @@
       }
     },
     watch: {
-      '$i18n.locale'() {
+      '$i18n.locale' () {
         this.setDocumentTitle();
       },
-      $route() {
+      $route () {
         this.setDocumentTitle();
       }
     }

+ 11 - 0
src/api/ledgerAssets/index.js

@@ -55,3 +55,14 @@ export async function saveOrEdit (data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+
+// 根据类别统计位置数量 
+export async function getCount (data) {
+  let par = new URLSearchParams(data);
+  const res = await request.get(`/main/asset/countPosition?` + par, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 43 - 0
src/components/header-title/index.vue

@@ -0,0 +1,43 @@
+<template>
+  <div class="divider">
+    <div class="title">
+      <div class="ele-bg-primary"></div>
+      <span :style="{ 'font-size': size }">{{ title }}</span>
+    </div>
+    <div class="ele-bg-primary" style="width: 100%; height: 2px"></div>
+  </div>
+</template>
+
+<script>
+  export default {
+    props: {
+      title: {
+        typeof: String,
+        default: '信息'
+      },
+      size: {
+        typeof: String,
+        default: '16px'
+      }
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .divider {
+    margin-bottom: 20px;
+
+    .title {
+      display: flex;
+      align-items: center;
+      margin-bottom: 10px;
+      div {
+        width: 8px;
+        height: 20px;
+        margin-right: 10px;
+      }
+      span {
+        font-size: 20px;
+      }
+    }
+  }
+</style>

+ 5 - 0
src/layout/index.vue

@@ -1,5 +1,7 @@
 <template>
+  <router-layout v-if="isQianKun" />
   <ele-pro-layout
+    v-else
     :menus="menus"
     :tabs="theme.tabs"
     :collapse="theme.collapse"
@@ -134,6 +136,9 @@
       };
     },
     computed: {
+      isQianKun () {
+        return window.__POWERED_BY_QIANKUN__;
+      },
       // 当前语言
       locale () {
         return this.$i18n.locale;

+ 55 - 6
src/main.js

@@ -1,4 +1,6 @@
 import Vue from 'vue';
+import './public-path';
+import initParentStore from '../qiankun_config/store';
 import App from './App.vue';
 import store from './store';
 import router from './router';
@@ -13,6 +15,8 @@ import DictSelection from '@/components/Dict/DictSelection';
 // import tinymce from '@/components/FormGenerator/components/tinymce/index.js';
 import TinymceEditor from '@/components/TinymceEditor/index.vue';
 // import SvgIcon from '@/components/FormGenerator/components/SvgIcon'; // svg component
+import HeaderTitle from '@/components/header-title';
+Vue.component('HeaderTitle', HeaderTitle);
 
 // // register globally
 Vue.component('tinymce', TinymceEditor);
@@ -31,10 +35,55 @@ Vue.use(EleAdmin, {
 });
 Vue.use(permission);
 Vue.use(VueClipboard);
+// new Vue({
+//   router,
+//   store,
+//   i18n,
+//   render: (h) => h(App)
+// }).$mount('#app');
 
-new Vue({
-  router,
-  store,
-  i18n,
-  render: (h) => h(App)
-}).$mount('#app');
+let instance = null;
+
+function render (props = {}) {
+  console.log(router, 2222);
+  const { container, routerBase } = props;
+  // const router = new VueRouter({
+  //   base: window.__POWERED_BY_QIANKUN__ ? routerBase : process.env.BASE_URL,
+  //   mode: 'history',
+  //   routes
+  // });
+
+  instance = new Vue({
+    router,
+    store,
+    i18n,
+    render: (h) => h(App)
+  }).$mount(container ? container.querySelector('#app') : '#app');
+}
+
+if (!window.__POWERED_BY_QIANKUN__) {
+  // 这里是子应用独立运行的环境,实现子应用的登录逻辑
+  render();
+}
+
+export async function bootstrap () {
+  console.log('[vue] vue app bootstraped');
+}
+
+export async function mount (props) {
+  console.log('[vue] props from main framework', props);
+
+  initParentStore(props.store);
+  props.onGlobalStateChange((state, prev) => {
+    // state: 变更后的状态; prev 变更前的状态
+    initParentStore(state);
+  });
+
+  render(props);
+}
+
+export async function unmount () {
+  instance.$destroy();
+  instance.$el.innerHTML = '';
+  instance = null;
+}

+ 13 - 0
src/public-path.js

@@ -0,0 +1,13 @@
+(function () {
+  if (window.__POWERED_BY_QIANKUN__) {
+    if (process.env.NODE_ENV === 'development') {
+      // eslint-disable-next-line
+      __webpack_public_path__ = `//localhost:${process.env.VUE_APP_PORT}/`;
+      console.log('__webpack_public_path__', __webpack_public_path__);
+      return;
+    }
+    // eslint-disable-next-line
+    __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
+    // __webpack_public_path__ = `${process.env.BASE_URL}/`
+  }
+})();

+ 1 - 1
src/router/index.js

@@ -12,13 +12,13 @@ import { routes, getMenuRoutes } from './routes';
 Vue.use(VueRouter);
 
 const router = new VueRouter({
+  base: window.__POWERED_BY_QIANKUN__ ? '/page-main-data/' : '/main-data/',
   routes,
   mode: 'history',
   scrollBehavior () {
     return { y: 0 };
   }
 });
-
 /**
  * 路由守卫
  */

+ 1 - 1
src/store/getters.js

@@ -14,7 +14,7 @@ export default {
   // 根据字典enumName  和 dictCode 获取字典 值(名称
   getDictValue: (state) => (enumName, dictCode) => {
     const obj = (state.dict[dictEnum[enumName]] || []).find((item) => {
-      return item.dictCode === dictCode;
+      return item.dictCode == dictCode;
     });
 
     return obj && obj.dictValue;

+ 45 - 45
src/store/modules/theme.js

@@ -86,7 +86,7 @@ let disableTransitionTimer, updateContentSizeTimer;
 /**
  * 读取缓存配置
  */
-function getCacheSetting() {
+function getCacheSetting () {
   try {
     const value = localStorage.getItem(THEME_STORE_NAME);
     if (value) {
@@ -104,7 +104,7 @@ function getCacheSetting() {
 /**
  * 缓存配置
  */
-function cacheSetting(key, value) {
+function cacheSetting (key, value) {
   const cache = getCacheSetting();
   if (cache[key] !== value) {
     cache[key] = value;
@@ -115,7 +115,7 @@ function cacheSetting(key, value) {
 /**
  * 开关响应式布局
  */
-function changeStyleResponsive(styleResponsive) {
+function changeStyleResponsive (styleResponsive) {
   if (styleResponsive) {
     document.body.classList.remove(BODY_LIMIT_CLASS);
   } else {
@@ -126,7 +126,7 @@ function changeStyleResponsive(styleResponsive) {
 /**
  * 切换色弱模式
  */
-function changeWeakMode(weakMode) {
+function changeWeakMode (weakMode) {
   if (weakMode) {
     document.body.classList.add(WEAK_CLASS);
   } else {
@@ -137,7 +137,7 @@ function changeWeakMode(weakMode) {
 /**
  * 切换主题
  */
-function changeTheme(value, dark) {
+function changeTheme (value, dark) {
   return new Promise((resolve, reject) => {
     try {
       changeColor(value, dark);
@@ -151,7 +151,7 @@ function changeTheme(value, dark) {
 /**
  * 切换布局时禁用过渡动画
  */
-function disableTransition() {
+function disableTransition () {
   disableTransitionTimer && clearTimeout(disableTransitionTimer);
   document.body.classList.add(DISABLES_CLASS);
   disableTransitionTimer = setTimeout(() => {
@@ -173,7 +173,7 @@ export default {
   })(),
   getters: {
     // 需要 keep-alive 的组件
-    keepAliveInclude(state) {
+    keepAliveInclude (state) {
       if (!TAB_KEEP_ALIVE || !state.showTabs) {
         return [];
       }
@@ -202,100 +202,100 @@ export default {
     }
   },
   mutations: {
-    SET(state, { key, value }) {
+    SET (state, { key, value }) {
       state[key] = value;
     }
   },
   actions: {
-    setTabs({ commit }, value) {
+    setTabs ({ commit }, value) {
       commit('SET', { key: 'tabs', value });
       //cacheSetting('tabs', value);
     },
-    setCollapse({ commit, dispatch }, value) {
+    setCollapse ({ commit, dispatch }, value) {
       commit('SET', { key: 'collapse', value });
       dispatch('delayUpdateContentSize', 800);
     },
-    setSideNavCollapse({ commit, dispatch }, value) {
+    setSideNavCollapse ({ commit, dispatch }, value) {
       commit('SET', { key: 'sideNavCollapse', value });
       dispatch('delayUpdateContentSize', 800);
     },
-    setBodyFullscreen({ commit, dispatch }, value) {
+    setBodyFullscreen ({ commit, dispatch }, value) {
       disableTransition();
       commit('SET', { key: 'bodyFullscreen', value });
       dispatch('delayUpdateContentSize', 800);
     },
-    setShowTabs({ commit, dispatch }, value) {
+    setShowTabs ({ commit, dispatch }, value) {
       commit('SET', { key: 'showTabs', value });
       cacheSetting('showTabs', value);
       dispatch('delayUpdateContentSize');
     },
-    setShowFooter({ commit, dispatch }, value) {
+    setShowFooter ({ commit, dispatch }, value) {
       commit('SET', { key: 'showFooter', value });
       cacheSetting('showFooter', value);
       dispatch('delayUpdateContentSize');
     },
-    setHeadStyle({ commit }, value) {
+    setHeadStyle ({ commit }, value) {
       commit('SET', { key: 'headStyle', value });
       cacheSetting('headStyle', value);
     },
-    setSideStyle({ commit }, value) {
+    setSideStyle ({ commit }, value) {
       commit('SET', { key: 'sideStyle', value });
       cacheSetting('sideStyle', value);
     },
-    setLayoutStyle({ commit, dispatch }, value) {
+    setLayoutStyle ({ commit, dispatch }, value) {
       disableTransition();
       commit('SET', { key: 'layoutStyle', value });
       cacheSetting('layoutStyle', value);
       dispatch('delayUpdateContentSize');
     },
-    setSideMenuStyle({ commit, dispatch }, value) {
+    setSideMenuStyle ({ commit, dispatch }, value) {
       disableTransition();
       commit('SET', { key: 'sideMenuStyle', value });
       cacheSetting('sideMenuStyle', value);
       dispatch('delayUpdateContentSize');
     },
-    setTabStyle({ commit }, value) {
+    setTabStyle ({ commit }, value) {
       commit('SET', { key: 'tabStyle', value });
       cacheSetting('tabStyle', value);
     },
-    setTransitionName({ commit }, value) {
+    setTransitionName ({ commit }, value) {
       commit('SET', { key: 'transitionName', value });
       cacheSetting('transitionName', value);
     },
-    setFixedHeader({ commit }, value) {
+    setFixedHeader ({ commit }, value) {
       disableTransition();
       commit('SET', { key: 'fixedHeader', value });
       cacheSetting('fixedHeader', value);
     },
-    setFixedSidebar({ commit }, value) {
+    setFixedSidebar ({ commit }, value) {
       disableTransition();
       commit('SET', { key: 'fixedSidebar', value });
       cacheSetting('fixedSidebar', value);
     },
-    setFixedBody({ commit }, value) {
+    setFixedBody ({ commit }, value) {
       disableTransition();
       commit('SET', { key: 'fixedBody', value });
       cacheSetting('fixedBody', value);
     },
-    setBodyFull({ commit, dispatch }, value) {
+    setBodyFull ({ commit, dispatch }, value) {
       commit('SET', { key: 'bodyFull', value });
       cacheSetting('bodyFull', value);
       dispatch('delayUpdateContentSize');
     },
-    setLogoAutoSize({ commit }, value) {
+    setLogoAutoSize ({ commit }, value) {
       disableTransition();
       commit('SET', { key: 'logoAutoSize', value });
       cacheSetting('logoAutoSize', value);
     },
-    setColorfulIcon({ commit }, value) {
+    setColorfulIcon ({ commit }, value) {
       commit('SET', { key: 'colorfulIcon', value });
       cacheSetting('colorfulIcon', value);
     },
-    setSideUniqueOpen({ commit }, value) {
+    setSideUniqueOpen ({ commit }, value) {
       commit('SET', { key: 'sideUniqueOpen', value });
       cacheSetting('sideUniqueOpen', value);
     },
-    setStyleResponsive({ commit }, value) {
+    setStyleResponsive ({ commit }, value) {
       changeStyleResponsive(value);
       commit('SET', { key: 'styleResponsive', value });
       cacheSetting('styleResponsive', value);
@@ -304,7 +304,7 @@ export default {
      * 切换色弱模式
      * @param value 是否是色弱模式
      */
-    setWeakMode({ commit }, value) {
+    setWeakMode ({ commit }, value) {
       return new Promise((resolve) => {
         changeWeakMode(value);
         commit('SET', { key: 'weakMode', value });
@@ -316,7 +316,7 @@ export default {
      * 切换暗黑模式
      * @param value 是否是暗黑模式
      */
-    setDarkMode({ commit, state }, value) {
+    setDarkMode ({ commit, state }, value) {
       return new Promise((resolve, reject) => {
         changeTheme(state.color, value)
           .then(() => {
@@ -333,7 +333,7 @@ export default {
      * 切换主题色
      * @param value 主题色
      */
-    setColor({ commit, state }, value) {
+    setColor ({ commit, state }, value) {
       return new Promise((resolve, reject) => {
         changeTheme(value, state.darkMode)
           .then(() => {
@@ -350,20 +350,20 @@ export default {
      * 设置主页路由对应的组件名称
      * @param components 组件名称
      */
-    setHomeComponents({ commit }, value) {
+    setHomeComponents ({ commit }, value) {
       commit('SET', { key: 'homeComponents', value });
     },
     /**
      * 设置刷新路由信息
      * @param option 路由刷新参数
      */
-    setRouteReload({ commit }, value) {
+    setRouteReload ({ commit }, value) {
       commit('SET', { key: 'routeReload', value });
     },
     /**
      * 更新屏幕尺寸
      */
-    updateScreenSize({ commit, dispatch }) {
+    updateScreenSize ({ commit, dispatch }) {
       commit('SET', { key: 'screenWidth', value: screenWidth() });
       commit('SET', { key: 'screenHeight', value: screenHeight() });
       dispatch('updateContentSize');
@@ -371,7 +371,7 @@ export default {
     /**
      * 更新内容区域尺寸
      */
-    updateContentSize({ commit }) {
+    updateContentSize ({ commit }) {
       commit('SET', { key: 'contentWidth', value: contentWidth() });
       commit('SET', { key: 'contentHeight', value: contentHeight() });
     },
@@ -379,7 +379,7 @@ export default {
      * 延时更新内容区域尺寸
      * @param delay 延迟时间
      */
-    delayUpdateContentSize({ dispatch }, delay) {
+    delayUpdateContentSize ({ dispatch }, delay) {
       updateContentSizeTimer && clearTimeout(updateContentSizeTimer);
       updateContentSizeTimer = setTimeout(() => {
         dispatch('updateContentSize');
@@ -388,7 +388,7 @@ export default {
     /**
      * 重置设置
      */
-    resetSetting({ commit, state }) {
+    resetSetting ({ commit, state }) {
       return new Promise((resolve, reject) => {
         disableTransition();
         [
@@ -431,7 +431,7 @@ export default {
     /**
      * 恢复主题
      */
-    recoverTheme({ state }) {
+    recoverTheme ({ state }) {
       // 关闭响应式布局
       if (!state.styleResponsive) {
         changeStyleResponsive(false);
@@ -451,7 +451,7 @@ export default {
      * 添加页签或更新相同 key 的页签数据
      * @param data 页签数据
      */
-    tabAdd({ dispatch, state }, data) {
+    tabAdd ({ dispatch, state }, data) {
       if (Array.isArray(data)) {
         data.forEach((d) => {
           dispatch('tabAdd', d);
@@ -475,7 +475,7 @@ export default {
      * 关闭页签
      * @param key 页签 key
      */
-    async tabRemove({ dispatch, state }, { key, active }) {
+    async tabRemove ({ dispatch, state }, { key, active }) {
       const i = state.tabs.findIndex(
         (t) => t.key === key || t.fullPath === key
       );
@@ -496,7 +496,7 @@ export default {
     /**
      * 关闭左侧页签
      */
-    async tabRemoveLeft({ dispatch, state }, { key, active }) {
+    async tabRemoveLeft ({ dispatch, state }, { key, active }) {
       let index = -1; // 选中页签的 index
       for (let i = 0; i < state.tabs.length; i++) {
         if (state.tabs[i].key === active) {
@@ -520,7 +520,7 @@ export default {
     /**
      * 关闭右侧页签
      */
-    async tabRemoveRight({ dispatch, state }, { key, active }) {
+    async tabRemoveRight ({ dispatch, state }, { key, active }) {
       if (state.tabs.length) {
         let index = -1; // 选中页签的 index
         for (let i = 0; i < state.tabs.length; i++) {
@@ -557,7 +557,7 @@ export default {
     /**
      * 关闭其它页签
      */
-    async tabRemoveOther({ dispatch, state }, { key, active }) {
+    async tabRemoveOther ({ dispatch, state }, { key, active }) {
       let index = -1; // 选中页签的 index
       let path; // 关闭后跳转的 path
       const temp = state.tabs.filter((d, i) => {
@@ -582,7 +582,7 @@ export default {
      * 关闭全部页签
      * @param active 选中页签的 key
      */
-    async tabRemoveAll({ dispatch, state }, active) {
+    async tabRemoveAll ({ dispatch, state }, active) {
       const t = state.tabs.find((d) => d.key === active);
       const home = typeof t !== 'undefined' && t.closable === true; // 是否跳转主页
       const temp = state.tabs.filter((d) => !d.closable);
@@ -596,7 +596,7 @@ export default {
      * 修改页签
      * @param data 页签数据
      */
-    tabSetItem({ dispatch, state }, data) {
+    tabSetItem ({ dispatch, state }, data) {
       let i = -1;
       if (data.key) {
         i = state.tabs.findIndex((d) => d.key === data.key);

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

@@ -105,11 +105,12 @@ export default {
     //动态路由
     async fetchUserInfo ({ commit }) {
       const result = await getResourcesTree().catch(() => {});
-      if (!result) {
+      const list = result.filter((i) => i.path === '/page-main-data');
+      if (!list.length) {
         return {};
       }
 
-      const { menuList, authorities } = formatRouter(result);
+      const { menuList, authorities } = formatRouter(list[0].children);
 
       // 用户权限
       // const authorities =

+ 2 - 2
src/views/flowable/form/index.vue

@@ -168,10 +168,10 @@
         },
         rules: {
           formKey: [
-            { required: true, message: '该项不能为空', trigger: 'change' }
+            { required: true, message: '表单KEY不能为空', trigger: 'blur' }
           ],
           formName: [
-            { required: true, message: '该项不能为空', trigger: 'change' }
+            { required: true, message: '表单名称不能为空', trigger: 'blur' }
           ]
         }
       };

+ 21 - 6
src/views/flowable/startMyProcess/index.vue

@@ -25,7 +25,7 @@
         </el-dropdown>
       </div>
 
-      <el-row>
+      <el-row :gutter="15">
         <el-col :span="12" v-for="row in records" :key="row.name">
           <div
             class="filter-container"
@@ -59,12 +59,16 @@
           </div>
         </el-col>
       </el-row>
-      <pagination
-        v-show="total > 0"
+      <el-pagination
+        :current-page="listQuery.current"
+        :page-size="listQuery.size"
         :total="total"
-        :current.sync="listQuery.current"
-        :size.sync="listQuery.size"
-        @pagination="list"
+        :background="true"
+        @size-change="(d) => (page.limit = d) && query()"
+        @current-change="(d) => (page.page = d) && query()"
+        layout="total, prev, pager, next, jumper"
+        :pager-count="5"
+        class="ele-pagination-circle"
       />
     </el-card>
 
@@ -201,3 +205,14 @@
     }
   };
 </script>
+<style scoped>
+  .filter-container .filter-item {
+    display: inline-block;
+    vertical-align: middle;
+    margin-bottom: 5px;
+    margin-right: 4px;
+  }
+  .filter-container {
+    padding-bottom: 5px;
+  }
+</style>

+ 103 - 0
src/views/flowable/taskDone/done-search.vue

@@ -0,0 +1,103 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 6 }">
+        <el-form-item label="任务名称:">
+          <el-input clearable v-model="where.taskName" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 6 }">
+        <el-form-item label="业务主键Key:">
+          <el-input
+            clearable
+            v-model="where.processInstanceBusinessKey"
+            placeholder="请输入"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="到期日开始:">
+          <el-date-picker
+            v-model="where.taskDueAfter"
+            value-format="yyyy-MM-dd"
+            placeholder="到期日开始"
+            type="date"
+            style="width: 200px"
+            class="filter-item"
+          ></el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="到期日开始:">
+          <el-date-picker
+            v-model="where.taskDueBefore"
+            value-format="yyyy-MM-dd"
+            placeholder="到期日结束"
+            type="date"
+            style="width: 200px"
+            class="filter-item"
+          ></el-date-picker>
+        </el-form-item>
+      </el-col>
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="备注:">
+          <el-input clearable v-model="where.comments" placeholder="请输入" />
+        </el-form-item>
+      </el-col> -->
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 6 }">
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+          >
+            查询
+          </el-button>
+          <el-button @click="reset">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  export default {
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+        taskName: undefined,
+        processInstanceBusinessKey: undefined,
+        taskDueAfter: undefined,
+        taskDueBefore: undefined
+      };
+      return {
+        // 表单数据
+        where: { ...defaultWhere }
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    methods: {
+      /* 搜索 */
+      search() {
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+        this.where = { ...this.defaultWhere };
+        this.search();
+      }
+    }
+  };
+</script>

+ 157 - 103
src/views/flowable/taskDone/index.vue

@@ -77,96 +77,43 @@
           </el-dropdown-menu>
         </el-dropdown>
       </div>
-      <el-table
-        :data="records"
-        border
-        fit
-        highlight-current-row
-        style="width: 99%"
-        :cell-style="{ padding: '3px' }"
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        cache-key="systemRoleTable"
       >
-        <el-table-column
-          label="流程实例名称"
-          prop="processInstanceName"
-          align="center"
-        >
-          <template slot-scope="scope"
-            ><span>{{ scope.row.processInstanceName }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="任务名称" prop="name" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.name }}</span></template
-          >
-        </el-table-column>
-        <el-table-column
-          label="开始时间"
-          prop="createTime"
-          align="center"
-          width="165px"
-        >
-          <template slot-scope="scope"
-            ><span>{{ scope.row.createTime }}</span></template
-          >
-        </el-table-column>
-        <el-table-column
-          label="完成时间"
-          prop="endTime"
-          align="center"
-          width="165px"
-        >
-          <template slot-scope="scope"
-            ><span>{{ scope.row.endTime }}</span></template
-          >
-        </el-table-column>
-        <el-table-column
-          label="工作耗时"
-          prop="workTimeInMillis"
-          align="center"
-        >
-          <template slot-scope="scope"
-            ><span>{{ scope.row.workTimeInMillis }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="总耗时" prop="durationInMillis" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.durationInMillis }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="所有人" prop="owner" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.owner }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="执行人" prop="assignee" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.assignee }}</span></template
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <!-- <el-button
+            icon="el-icon-plus"
+            type="primary"
+            @click="btnImport"
+            class="ele-btn-icon"
+            >导入
+          </el-button> -->
+        </template>
+        <!-- 工作耗时 -->
+        <template v-slot:workTimeInMillis="{ row }">
+          {{ getTime(row.workTimeInMillis) }}
+        </template>
+        <!-- 总耗时 -->
+        <template v-slot:durationInMillis="{ row }">
+          {{ getTime(row.durationInMillis) }}
+        </template>
+
+        <!-- 操作列 -->
+        <template v-slot:action="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            icon="el-icon-view"
+            @click="btnView(null, row.id)"
           >
-        </el-table-column>
-        <el-table-column label="操作" align="center">
-          <template slot-scope="{ row }">
-            <el-dropdown>
-              <span class="el-dropdown-link"
-                >操作<i class="el-icon-arrow-down el-icon--right"></i
-              ></span>
-              <el-dropdown-menu slot="dropdown">
-                <el-dropdown-item
-                  icon="el-icon-view"
-                  @click.native="btnView(row.processInstanceId)"
-                  >查看详情
-                </el-dropdown-item>
-              </el-dropdown-menu>
-            </el-dropdown>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :current.sync="listQuery.current"
-        :size.sync="listQuery.size"
-        @pagination="list"
-      />
+            查看详情
+          </el-link>
+        </template>
+      </ele-pro-table>
     </el-card>
 
     <process-detail
@@ -187,13 +134,84 @@
     components: { ProcessDetail, Pagination },
     data() {
       return {
+        columns: [
+          {
+            type: 'index',
+            label: '序号',
+            width: 50,
+            align: 'center',
+            fixed: 'left'
+          },
+
+          {
+            prop: 'processInstanceName',
+            label: '流程实例名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'name',
+            label: '任务名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'createTime',
+            label: '开始时间',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+
+          {
+            prop: 'endTime',
+            label: '完成时间',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'workTimeInMillis',
+            label: '工作耗时',
+            align: 'center',
+            slot: 'workTimeInMillis',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'durationInMillis',
+            label: '总耗时',
+            align: 'center',
+            slot: 'durationInMillis',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'owner',
+            label: '所有人',
+            align: 'center',
+
+            showOverflowTooltip: true
+          },
+
+          {
+            prop: 'assignee',
+            label: '执行人',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 230,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true
+          }
+        ],
         dicts: [],
         records: null,
         selectedRecords: [],
         total: 0,
         listQuery: {
-          current: 1,
-          size: 10,
           processInstanceId: undefined,
           taskName: undefined,
           processInstanceBusinessKey: undefined,
@@ -209,25 +227,47 @@
         dialogViewVisible: false
       };
     },
-    created() {
-      this.list();
-    },
+
     methods: {
-      list() {
-        getAction('/flowable/task/listDone', this.listQuery).then((res) => {
-          const { data } = res.data;
-          this.records = data.records;
-          this.total = data.total;
+      reload(where) {
+        this.$refs.table.reload({ page: 1, where: this.listQuery });
+      },
+      async datasource({ page, limit, where }) {
+        const res = await getAction('/flowable/task/listDone', {
+          ...where,
+          current: page,
+          size: limit
         });
+        const { data } = res.data;
+        return {
+          list: data.records,
+          count: data.total
+        };
+      },
+      getTime(time) {
+        if (time == '' || time == null) {
+          return '';
+        }
+        let h = parseInt((time / 60 / 60) % 24);
+
+        let m = parseInt((time / 60) % 60);
+
+        let s = parseInt(time % 60);
+
+        if (time >= 3600) {
+          return `${h}时${m}分${s}秒`;
+        } else if (time >= 60) {
+          return `${m}分${s}秒`;
+        } else {
+          return `${time}秒`;
+        }
       },
+
       btnQuery() {
-        this.listQuery.current = 1;
-        this.list();
+        this.reload();
       },
       btnReset() {
         this.listQuery = {
-          current: 1,
-          size: 10,
           processInstanceId: undefined,
           taskName: undefined,
           processInstanceBusinessKey: undefined,
@@ -238,7 +278,7 @@
           processUnfinished: false,
           processFinished: false
         };
-        this.list();
+        this.reload();
       },
       btnView(processInstanceId) {
         this.processInstanceId = processInstanceId;
@@ -247,3 +287,17 @@
     }
   };
 </script>
+<style scoped>
+  .app-container {
+    padding: 10px;
+  }
+  .filter-container .filter-item {
+    display: inline-block;
+    vertical-align: middle;
+    margin-bottom: 5px;
+    margin-right: 4px;
+  }
+  .filter-container {
+    padding-bottom: 5px;
+  }
+</style>

+ 155 - 164
src/views/flowable/taskTodo/index.vue

@@ -1,147 +1,73 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never">
-      <div class="filter-container">
-        <!--<el-input v-model="listQuery.processInstanceId" placeholder="流程实例ID" style="width: 200px;"
-                      class="filter-item" @keyup.enter.native="btnQuery"/>-->
-        <el-input
-          v-model="listQuery.taskName"
-          placeholder="任务名称"
-          style="width: 200px"
-          class="filter-item"
-          @keyup.enter.native="btnQuery"
-        />
-        <el-input
-          v-model="listQuery.processInstanceBusinessKey"
-          placeholder="业务主键Key"
-          style="width: 200px"
-          class="filter-item"
-          @keyup.enter.native="btnQuery"
-        />
-        <el-date-picker
-          v-model="listQuery.taskDueAfter"
-          value-format="yyyy-MM-dd"
-          placeholder="到期日开始"
-          type="date"
-          style="width: 200px"
-          class="filter-item"
-        ></el-date-picker>
-        <el-date-picker
-          v-model="listQuery.taskDueBefore"
-          value-format="yyyy-MM-dd"
-          placeholder="到期日结束"
-          type="date"
-          style="width: 200px"
-          class="filter-item"
-        ></el-date-picker>
-        <el-dropdown
-          split-button
-          type="primary"
-          @click="btnQuery"
-          class="filter-item"
-        >
-          <i class="el-icon-search el-icon--left"></i>查询
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item icon="el-icon-zoom-out" @click.native="btnReset"
-              >重置</el-dropdown-item
-            >
-          </el-dropdown-menu>
-        </el-dropdown>
-      </div>
-      <el-table
-        :data="records"
-        border
-        fit
-        highlight-current-row
-        style="width: 100%"
-        :cell-style="{ padding: '3px' }"
+      <todo-search @search="reload" />
+
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        cache-key="systemRoleTable"
       >
-        <el-table-column
-          label="流程实例名称"
-          prop="processInstanceName"
-          align="center"
-        >
-          <template slot-scope="scope"
-            ><span>{{ scope.row.processInstanceName }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="任务名称" prop="name" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.name }}</span></template
-          >
-        </el-table-column>
-        <el-table-column
-          label="开始时间"
-          prop="createTime"
-          align="center"
-          width="165px"
-        >
-          <template slot-scope="scope"
-            ><span>{{ scope.row.createTime }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="到期日期" prop="dueDate" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.dueDate }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="所有人" prop="owner" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.owner }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="执行人" prop="assignee" align="center">
-          <template slot-scope="scope"
-            ><span>{{ scope.row.assignee }}</span></template
-          >
-        </el-table-column>
-        <el-table-column label="操作" align="center">
-          <template slot-scope="{ row }">
-            <el-dropdown>
-              <span class="el-dropdown-link"
-                >操作<i class="el-icon-arrow-down el-icon--right"></i
-              ></span>
-              <el-dropdown-menu slot="dropdown">
-                <el-dropdown-item
-                  icon="el-icon-view"
-                  @click.native="btnView(row.processInstanceId)"
-                  >查看详情
-                </el-dropdown-item>
-                <el-dropdown-item
-                  v-if="row.assignee == null || row.assignee == ''"
-                  icon="el-icon-edit"
-                  divided
-                  @click.native="btnClaim(row)"
-                  >认领并执行
-                </el-dropdown-item>
-                <!-- v-if="
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <!-- <el-button
+            icon="el-icon-plus"
+            type="primary"
+            @click="btnImport"
+            class="ele-btn-icon"
+            >导入
+          </el-button> -->
+        </template>
+
+        <!-- 操作列 -->
+        <template v-slot:action="{ row }">
+          <el-dropdown>
+            <span class="el-dropdown-link"
+              >操作<i class="el-icon-arrow-down el-icon--right"></i
+            ></span>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item
+                icon="el-icon-view"
+                @click.native="btnView(row.processInstanceId)"
+                >查看详情
+              </el-dropdown-item>
+              <el-dropdown-item
+                v-if="row.assignee == null || row.assignee == ''"
+                icon="el-icon-edit"
+                divided
+                @click.native="btnClaim(row)"
+                >认领并执行
+              </el-dropdown-item>
+              <!-- v-if="
                   row.assignee === $store.getters.sysUser.userId &&
                   row.endTime == null
                 " -->
-                <el-dropdown-item
-                  icon="el-icon-edit"
-                  divided
-                  @click.native="btnUnclaim(row)"
-                  >取消签收
-                </el-dropdown-item>
-                <el-dropdown-item
-                  icon="el-icon-edit"
-                  divided
-                  @click.native="btnExcuteTask(row)"
-                  >执行
-                </el-dropdown-item>
-              </el-dropdown-menu>
-            </el-dropdown>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :current.sync="listQuery.current"
-        :size.sync="listQuery.size"
-        @pagination="list"
-      />
+              <el-dropdown-item
+                icon="el-icon-edit"
+                v-if="
+                  (row.endTime == null || row.endTime == '') &&
+                  row.assignee == userId
+                "
+                divided
+                @click.native="btnUnclaim(row)"
+                >取消签收
+              </el-dropdown-item>
+              <el-dropdown-item
+                icon="el-icon-edit"
+                v-if="
+                  (row.endTime == null || row.endTime == '') &&
+                  (row.assignee != null || row.assignee != '') &&
+                  row.assignee == userId
+                "
+                divided
+                @click.native="btnExcuteTask(row)"
+                >执行
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+      </ele-pro-table>
     </el-card>
 
     <!-- 执行任务 -->
@@ -160,7 +86,6 @@
 </template>
 
 <script>
-  import Pagination from '@/components/Pagination';
   import {
     deleteAction,
     getAction,
@@ -170,20 +95,75 @@
   import { Message } from 'element-ui';
   import ExecuteTask from '../components/ExecuteTask';
   import ProcessDetail from '../components/ProcessDetail';
+  import TodoSearch from '@/views/flowable/taskTodo/todo-search';
 
   export default {
     name: 'FlowableTaskTodo',
-    components: { Pagination, ExecuteTask, ProcessDetail },
+    components: { ExecuteTask, ProcessDetail, TodoSearch },
     data() {
       return {
-        dicts: [],
-        records: null,
-        selectedRecords: [],
-        total: 0,
+        columns: [
+          {
+            type: 'index',
+            label: '序号',
+            width: 50,
+            align: 'center',
+            fixed: 'left'
+          },
+
+          {
+            prop: 'processInstanceName',
+            label: '流程实例名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'name',
+            label: '任务名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+
+          {
+            prop: 'dueDate',
+            label: '到期日期',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'owner',
+            label: '所有人',
+            align: 'center',
+
+            showOverflowTooltip: true
+          },
+
+          {
+            prop: 'assignee',
+            label: '执行人',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 230,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true
+          }
+        ],
+        userId: localStorage.getItem('userId'),
+
         listQuery: {
-          current: 1,
-          size: 10,
-          processInstanceId: undefined,
           taskName: undefined,
           processInstanceBusinessKey: undefined,
           taskDueAfter: undefined,
@@ -196,51 +176,62 @@
         dialogViewVisible: false
       };
     },
-    created() {
-      this.list();
-      console.log(this.$store.getters);
-    },
+
     methods: {
-      list() {
-        getAction('/flowable/task/listTodo', this.listQuery).then((res) => {
-          const { data } = res;
-          console.log(data);
-          this.records = data.data.records;
-          this.total = data.data.total;
+      async datasource({ page, limit, where }) {
+        const res = await getAction('/flowable/task/listTodo', {
+          ...where,
+          current: page,
+          size: limit
         });
+        const { data } = res.data;
+        return {
+          list: data.records,
+          count: data.total
+        };
+      },
+      reload(where) {
+        this.$refs.table.reload({ page: 1, where });
       },
+      // list() {
+      //   this.$refs.table.reload({ page: 1 });
+
+      // getAction('/flowable/task/listTodo', this.listQuery).then((res) => {
+      //   const { data } = res;
+      //   console.log(data);
+      //   this.records = data.data.records;
+      //   this.total = data.data.total;
+      // });
+      // },
       btnQuery() {
         this.listQuery.current = 1;
-        this.list();
+        this.reload();
       },
       btnReset() {
         this.listQuery = {
-          current: 1,
-          size: 10,
-          processInstanceId: undefined,
           taskName: undefined,
           processInstanceBusinessKey: undefined,
           taskDueAfter: undefined,
           taskDueBefore: undefined
         };
-        this.list();
+        this.reload();
       },
       btnClaim(row) {
         putAction('/flowable/task/claim', { taskId: row.id })
           .then(({ data }) => {
             Message.success('认领' + data.message + ',请编辑执行');
-            this.list();
+            this.reload();
             this.btnExcuteTask(row);
           })
           .catch((response) => {
-            this.list();
+            this.reload();
           });
       },
       btnUnclaim(row) {
         putAction('/flowable/task/unclaim', { taskId: row.id }).then(
           ({ data }) => {
             Message.success(data.message);
-            this.list();
+            this.reload();
           }
         );
       },

+ 103 - 0
src/views/flowable/taskTodo/todo-search.vue

@@ -0,0 +1,103 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 6 }">
+        <el-form-item label="任务名称:">
+          <el-input clearable v-model="where.taskName" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 6 }">
+        <el-form-item label="业务主键Key:">
+          <el-input
+            clearable
+            v-model="where.processInstanceBusinessKey"
+            placeholder="请输入"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="到期日开始:">
+          <el-date-picker
+            v-model="where.taskDueAfter"
+            value-format="yyyy-MM-dd"
+            placeholder="到期日开始"
+            type="date"
+            style="width: 200px"
+            class="filter-item"
+          ></el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="到期日开始:">
+          <el-date-picker
+            v-model="where.taskDueBefore"
+            value-format="yyyy-MM-dd"
+            placeholder="到期日结束"
+            type="date"
+            style="width: 200px"
+            class="filter-item"
+          ></el-date-picker>
+        </el-form-item>
+      </el-col>
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="备注:">
+          <el-input clearable v-model="where.comments" placeholder="请输入" />
+        </el-form-item>
+      </el-col> -->
+      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 6 }">
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+          >
+            查询
+          </el-button>
+          <el-button @click="reset">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  export default {
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+        taskName: undefined,
+        processInstanceBusinessKey: undefined,
+        taskDueAfter: undefined,
+        taskDueBefore: undefined
+      };
+      return {
+        // 表单数据
+        where: { ...defaultWhere }
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    methods: {
+      /* 搜索 */
+      search() {
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+        this.where = { ...this.defaultWhere };
+        this.search();
+      }
+    }
+  };
+</script>

+ 8 - 9
src/views/ledgerAssets/boat/components/baseInfo.vue

@@ -46,19 +46,19 @@
         class="basic-tab"
       >
         <el-tab-pane
-          :label="`在用(${countInfo.inUseSum ? countInfo.inUseSum : '0'})`"
+          :label="`在用(${countInfo.useCount ? countInfo.useCount : '0'})`"
           name="inUse"
         >
         </el-tab-pane>
         <el-tab-pane
           :label="`在库(${
-            countInfo.inLibrarySum ? countInfo.inLibrarySum : '0'
+            countInfo.libraryCount ? countInfo.libraryCount : '0'
           })`"
           name="inLibrary"
         >
         </el-tab-pane>
         <el-tab-pane
-          :label="`消耗(${countInfo.consumeSum ? countInfo.consumeSum : '0'})`"
+          :label="`消耗(${countInfo.consumeCount ? countInfo.consumeCount : '0'})`"
           name="hasConsume"
         >
         </el-tab-pane>
@@ -115,7 +115,7 @@
 </template>
 
 <script>
-  import { getPageSingle } from '@/api/ledgerAssets';
+  import { getPageSingle , getCount } from '@/api/ledgerAssets';
   import { getDetails } from '@/api/classifyManage/itemInformation.js';
   export default {
     props: {
@@ -146,7 +146,7 @@
     created () {
       this.getDetilInfo();
       this.handleList();
-      // this.getCountNum()
+      this.getCountNum()
     },
     methods: {
       getDetilInfo () {
@@ -204,12 +204,11 @@
 
       getCountNum () {
         const params = {
-          assetType: 'ZHOUMIN',
-          informationId: this.rowInfo.id
+          categoryId:  this.rowId
         };
         getCount(params).then((res) => {
-          if (res?.success) {
-            this.countInfo = res.data;
+          if (res) {
+            this.countInfo = res;
           }
         });
       }

+ 8 - 0
src/views/ledgerAssets/boat/detail.vue

@@ -39,6 +39,14 @@ export default {
   },
   created () {
      this.rowId = this.$route.query.id
+     // const Array = [
+     //   {key:'参数1',value:'值1'},
+     //   {key:'参数2',value:'值2'},
+     //   {key:'参数3',value:'值3'},
+     //   {key:'参数4',value:'值4'}
+     // ]
+     // const obj = Object.assign({},Array)
+     // console.log('obj',obj)
   },
   methods:{
      // async getDetilInfo(id){

+ 10 - 11
src/views/ledgerAssets/material/components/baseInfo.vue

@@ -77,28 +77,28 @@
       <div class="tabbox">
         <el-tabs v-model="activeName" type="card" @tab-click="tabClick" class="basic-tab">
           <el-tab-pane
-            :label="`在用(${countInfo.inUseSum ? countInfo.inUseSum : '0'})`"
+            :label="`在用(${countInfo.useCount ? countInfo.useCount : '0'})`"
             name="inUse"
           >
           </el-tab-pane>
           <el-tab-pane
             :label="`在库(${
-              countInfo.inLibrarySum ? countInfo.inLibrarySum : '0'
+              countInfo.libraryCount ? countInfo.libraryCount : '0'
             })`"
             name="inLibrary"
           >
           </el-tab-pane>
           <el-tab-pane
             :label="`消耗(${
-              countInfo.consumeSum ? countInfo.consumeSum : '0'
+              countInfo.consumeCount ? countInfo.consumeCount : '0'
             })`"
             name="hasConsume"
           >
           </el-tab-pane>
         </el-tabs>
-        <el-button icon="el-icon-printer" size="small" @click="handlPrint"
+       <!-- <el-button icon="el-icon-printer" size="small" @click="handlPrint"
           >打印条码</el-button
-        >
+        > -->
       </div>
       <el-table
         :data="tableData"
@@ -169,7 +169,7 @@
 // import { getAssetPage, getCount } from '@/api/ledgerAssets/asset'
 // import { batchBarPrint } from '@/api/ledgerAssets/booksList'
 // import QrPrint from '@/components/print/printPDF.vue'
-  import { getPageSingle } from '@/api/ledgerAssets';
+  import { getPageSingle , getCount } from '@/api/ledgerAssets';
   import {  getDetails } from '@/api/classifyManage/itemInformation.js';
 export default {
   props: {
@@ -206,7 +206,7 @@ export default {
   created () {
     this.getDetilInfo()
     this.handleList()
-    // this.getCountNum()
+    this.getCountNum()
   },
   methods: {
     getDetilInfo(){
@@ -358,10 +358,9 @@ export default {
 
     getCountNum () {
       const params = {
-        assetType: 'WULIAO',
-        informationId: this.rowInfo.id,
-        outInCode: this.searchForm.outInCode,
-        batchNum: this.searchForm.batchNum
+        categoryId:  this.rowId,
+        sourceBizNo: this.searchForm.sourceBizNo,
+        sourceBatchNo: this.searchForm.sourceBatchNo
       }
       getCount(params).then(res => {
         if (res?.success) {

+ 3 - 3
src/views/ledgerAssets/turnoverCar/components/baseInfo.vue

@@ -160,9 +160,9 @@ export default {
      async getDetilInfo(){
        const res = await getAssetInfo(this.rowId)
        if (res){
-          this.info = res.data
-          this.$set(this.info, 'category', res.data.category)
-          this.$set(this.info, 'extInfoSelf', res.data.extInfoSelf?res.data.extInfoSelf:[])
+          this.info = res
+          this.$set(this.info, 'category', res.category)
+          this.$set(this.info, 'extInfoSelf', res.extInfoSelf?res.extInfoSelf:[])
           // this.$set(this.info, 'warehouseDetail', res.data.warehouseDetail)
           // if (res.data.imageUrl) {
           //   imageView(res.data.imageUrl).then((res) => {

+ 9 - 1
src/views/ledgerAssets/turnoverCar/components/turnovercar-list.vue

@@ -69,9 +69,11 @@
   import {
     getAssetList
   } from '@/api/ledgerAssets';
+  import dictMixins from '@/mixins/dictMixins';
 
   export default {
     components: { TurnovercarSearch },
+    mixins: [dictMixins],
     props: {
       // 类别id
       categoryId: [Number, String],
@@ -148,7 +150,10 @@
             prop: 'totalSum',
             label: '生命周期',
             showOverflowTooltip: true,
-            minWidth: 110
+            minWidth: 110,
+            formatter: (_row, _column, cellValue) => {
+              return this.getDictValue('生命周期',  _row.position[0].type)
+            }
           },
           {
             columnKey: 'action',
@@ -164,6 +169,9 @@
         checked:false
       };
     },
+    created () {
+      this.requestDict('生命周期');
+    },
     methods: {
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {

+ 1 - 1
src/views/system/dictionary/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="ele-body">
-    <DictDataSearch @search="reload" />
     <el-card shadow="never">
+      <DictDataSearch @search="reload" />
       <div style="margin: 5px 0; padding-left: 262px">
         <el-button
           size="small"

+ 3 - 2
src/views/system/role/components/role-edit.vue

@@ -119,8 +119,9 @@
       visible(visible) {
         if (visible) {
           if (this.data != null) {
-            this.$util.assignObject(this.form, this.data);
-            this.form = this.data;
+            // this.$util.assignObject(this.form, this.data);
+            // this.form = this.data;
+            this.form = Object.assign(this.data);
             this.isUpdate = true;
           } else {
             this.isUpdate = false;

+ 13 - 4
src/views/system/role/index.vue

@@ -173,7 +173,8 @@
         // 是否显示编辑弹窗
         showEdit: false,
         // 是否显示导入弹窗
-        showAuth: false
+        showAuth: false,
+        isUpdate: false
       };
     },
     created() {},
@@ -199,13 +200,21 @@
       },
       /* 显示编辑 */
       openEdit(row) {
-        this.current = Object.assign({}, row);
-
+        if (row) {
+          this.current = Object.assign({}, row);
+        } else {
+          this.current = null;
+        }
         this.showEdit = true;
       },
       /* 显示分配权限 */
       openAuth(row) {
-        this.current = Object.assign({}, row);
+        if (row) {
+          this.isUpdate = true;
+          this.current = Object.assign({}, row);
+        } else {
+          this.isUpdate = false;
+        }
 
         this.showAuth = true;
       },

+ 18 - 4
vue.config.js

@@ -1,18 +1,29 @@
 const CompressionWebpackPlugin = require('compression-webpack-plugin');
 const { transformElementScss } = require('ele-admin/lib/utils/dynamic-theme');
 const path = require('path');
+const { name } = require('./package.json');
 
-function resolve(dir) {
+function resolve (dir) {
   return path.join(__dirname, dir);
 }
 
 module.exports = {
+  publicPath: '/main-data',
   lintOnSave: false,
   productionSourceMap: false,
   configureWebpack: {
     performance: {
       maxAssetSize: 2000000,
       maxEntrypointSize: 2000000
+    },
+    output: {
+      // 把子应用打包成 umd 库格式
+      library: {
+        type: 'umd',
+        name: `${name}`
+      },
+
+      chunkLoadingGlobal: `webpackJsonp_${name}`
     }
   },
   devServer: {
@@ -22,19 +33,22 @@ module.exports = {
       '/api': {
         // target: 'http://192.168.3.51:86', // 测试
 
-        target: 'http://192.168.3.35:8080', // kang杨威
+        // target: 'http://192.168.3.35:8080', // kang杨威
         // target: 'http://192.168.3.25:8080', // 黄峥嵘
         // target: 'http://192.168.3.41:8080', // 何江鹏
-        // target: 'http://192.168.3.33:8080', // 谢一平
+        target: 'http://192.168.3.33:8080', // 谢一平
 
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {
           '^/api': ''
         }
       }
+    },
+    headers: {
+      'Access-Control-Allow-Origin': '*'
     }
   },
-  chainWebpack(config) {
+  chainWebpack (config) {
     config.plugins.delete('prefetch');
     // set svg-sprite-loader
     // config.module.rule('svg').exclude.add(resolve('./src/icons')).end();