import Vue from 'vue'
import Vuex from 'vuex'
import API from "@/api.js"
import projectJSON from '@/assets/json/project.json';


const statiContextPath = obpmConfig.statiContextPath
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    apps: [],
    menus: {currentApp: "", appMenus: {}, },
    formdatas: {},
    views: {},
    searchFormTemplate: {},
    domainId:'',
    userId:'',
    myProfile:'',
    softwareName:'',
    subDocuments: [], //鍖呭惈鍏冪礌缃戞牸瑙嗗浘淇濆瓨鏃剁殑鏁版嵁
    subDocumentsData: {}, //鍖呭惈鍏冪礌鎴栬€卼ab鏂板缓鏃剁綉鏍艰鍥剧殑鏁版嵁锛屽線鍚庡彲鑳戒細鏈夊緢澶氶〉绛剧獥鍙f墦寮€锛屼箣鍚庡彲鑳戒慨鏀规垚鏁扮粍锛屼繚瀛橀〉闈㈡椂瀵规瘮docId
    isIncludeViewRefresh: false, //鍖呭惈鍏冪礌缃戞牸瑙嗗浘淇濆瓨鏃跺悗鏄惁鍒锋柊
    firstClick:'',
    naviBarCommonlyUsedList:[], //瀵艰埅鏍忓父鐢ㄥ垪琛�
    pendingListWithWidget: '', //widget娴佺▼澶勭悊寰呭姙鐨勬暟鎹�
    processedListWithWidget: '', //widget娴佺▼澶勭悊缁忓姙鐨勬暟鎹�
    operationLogList: [], //鎿嶄綔鏃ュ織璁板綍
    isInstance: false, //鐧诲綍瓒呮椂锛岀姸鎬佺爜鍑虹幇401锛屽脊鍑烘杩涜鐧诲綍
    statiContextPath: '', //鍒ゆ柇鏄�5.0杩樻槸4.4
    listViewScrollTop: 0,//璁板綍鍒楄〃瑙嗗浘婊氬姩鏉′綅缃�
    eventMapping:'', //瑙嗗浘閫夋嫨妗嗚缃簡浜嬩欢鏄犲皠锛岃鎶婃湰鏉ヨ鍥鹃€夋嫨妗嗙殑鏄犲皠浜嬩欢鍙樺寲鍒板崟琛屾枃鏈涓幓
    iscriptNum: 0,  //widget璁$畻鑴氭湰鍒锋柊鍒濆鍊间负0
    refreshViewData:{},
    saveSubDocments:{}, 
    formTableUpdateId: '',
    appmenusShow:false,//bcx-鐧惧窛淇�
    defaultFirst:1,//bcx-鐧惧窛淇�
    searchDataStore:[],//缂撳瓨鍗曚釜鎼滅储涓庨珮绾ф悳绱㈡潯浠禸cx-鐧惧窛淇�
    searchFlag:0,//缂撳瓨浠庤〃鍗曗€欒繑鍥炩€� 瑙嗗浘鍙樹负2--bcx-鐧惧窛淇�
    page:1,//缂撳瓨琛ㄦ牸椤电爜--bcx-鐧惧窛淇�
    currentPageSize:10,//缂撳瓨琛ㄦ牸椤垫暟--bcx-鐧惧窛淇�
    pageDataStore:[],//缂撳瓨鍒嗛〉涓庢潯鏁癰cx
    lastTime:new Date().getTime(),
    lastTimeFlag:true,//榛樿寮€鍚畾鏃堕攣灞�
  },

  getters: {
    getPendingListWithWidget: state => {
      return state.pendingListWithWidget;
    },
    getProcessedListWithWidget: state => {
      return state.processedListWithWidget;
    },
    getNaviBarCommonlyUsed: state => {
      return state.naviBarCommonlyUsedList;
    },
    currentMenus: state => {
      return state.menus.appMenus[state.menus.currentApp];
    },
    currentAppName: state => {
      return state.softwareName;
    },
    operationLog: state => {
      return state.operationLogList;
    }
  },

  mutations: { //鏂规硶澶у啓瑙勮寖鍖�
    SET_LASTTIME(state,lastTime){
       state.lastTime=lastTime
    },
    SET_LASTTIME_Flag(state,lastTimeFlag){//鍛樺伐淇濋櫓锛屼紒涓氶挶鍖呭叧闂畾鏃堕攣灞�
      state.lastTimeFlag=lastTimeFlag
    },
    SET_SAVESUBDOCMENTS: (state, data) => {
      state.saveSubDocments = data
    },

    SET_FORMTABLEUPDATEID: (state, data) => {
      state.formTableUpdateId = data.id;
    },

    SET_INCLUDEVIEWID: (state, data) => {
      let obj = {
        id: data.id,
        templateId: data.templateId
      }
      state.refreshViewData = obj
    },

    SET_SUBDOCUMENTS_DATA: (state, data) => {
      let subDoc = state.subDocumentsData
      if(subDoc[data.sourceDocId]) {
        subDoc[data.sourceDocId][data.currentViewFormId] = data.saveData
      }else {
        let obj = {}
        obj[data.currentViewFormId] = data.saveData
        subDoc[data.sourceDocId] = obj
      }
      state.subDocumentsData = subDoc
    },

    GET_OPERATION_LOG: (state, data) => {
      state.operationLogList = data.list;
    },

    GET_PENDING_LIST_WITH_WIDGET: (state, data) => {
      state.pendingListWithWidget = data.pendingData;
    },

    GET_PROCESS_LIST_WITH_WIDGET: (state, data) => {
      state.processedListWithWidget = data.processedData;
    },
    
    SET_STATICONTEXTPATH: (state, data) => {
      state.statiContextPath = data.statiContextPath;
    },

    naviBarCommonlyUsed(state, data) {
      state.naviBarCommonlyUsedList = data;
    },

    loadAppKm(state, data) {
      state.firstClick = data.first;
    },

    saveListViewScrollTop(state,listViewScrollTop) {//璁板綍鍒楄〃瑙嗗浘婊氬姩鏉′綅缃�
      state.listViewScrollTop = listViewScrollTop
    },
    
    saveEventMapping(state,eventMapping) { 
      state.eventMapping = eventMapping;
    },

    saveSubDocuments(state, data) {
      state.subDocuments = data.data;
      state.isIncludeViewRefresh = data.isRefresh;
    },

    landingUser(state, data){
      state.domainId = data.doId;
      state.userId = data.userId;
      state.myProfile = data.profile;
    },

    loadApps(state, apps) {
      state.apps = apps;
      state.softwareName = apps.length > 0 ? apps[0].name:'';
    },

    loadMenus(state, { appId, menus }) {
      state.menus.currentApp = appId;
      state.appmenusShow=true //bcx-鐧惧窛淇�
      if (menus) {
        menus.appId = appId; //淇濆瓨涓€涓媋ppId
        state.menus.appMenus[appId] = menus;
      }
    },
    /**
     * 鐧诲綍瓒呮椂鎷︽埅鍣�
     */
    instanceDialog(state,isInstance){
      state.isInstance = isInstance;
    },
    /**
     * 
     * @param {}} 璁$畻鑴氭湰鏍规嵁娴佺▼鍒锋柊锛岀洰鍓嶆槸閫氳繃鐩戝惉vuex鐨勬暟鎹€掑杩涜鍒凤紝鍚庢湡鐪嬬湅瑕佷笉瑕佹敼
     */
    iscriptChanage(state){
      state.iscriptNum++;
    },

    loadAppName(state, { name,flag }) {//bcx-鐧惧窛淇�
      if(flag==1){
       state.softwareName = name +'-'+new Date().getTime();
       state.defaultFirst=1
      }else{
        state.softwareName = name 
        state.defaultFirst=0
      }
    },

    setFormData(state, { uId, doc }) {
      Vue.set(state.formdatas, uId, doc);
    },

    setSearchFormTemplate(state, { uId, doc }) {
      Vue.set(state.searchFormTemplate, uId, doc);
    },
    searchDataStore(state,searchDataStore){//鎼滅储鏉′欢缂撳瓨
      // debugger
      console.log('store----'+JSON.stringify(searchDataStore))
      if(state.searchDataStore.length){
        state.searchDataStore.forEach((item,index)=>{
            if(item.appId==searchDataStore.appId&&item.viewId==searchDataStore.viewId){
              state.searchDataStore[index]=searchDataStore
            }else{
              state.searchDataStore.push(searchDataStore)
            }
        })
      }else{
        state.searchDataStore.push(searchDataStore)
      }
      console.log(state.searchDataStore)
    },
    searchFlag(state,searchFlag){
      state.searchFlag=searchFlag
    },
    pageDataStore(state,pageDataStore){//鍒嗛〉鏉′欢缂撳瓨
      if(state.pageDataStore.length){
        state.pageDataStore.forEach((item,index)=>{
          if(item.appId==pageDataStore.appId&&item.viewId==pageDataStore.viewId){
            state.pageDataStore[index]=pageDataStore
          }else{
            state.pageDataStore.push(pageDataStore)
          }
        })   
      }else{
        state.pageDataStore.push(pageDataStore)
      }
    }
    // page(state,page){
    //   state.page=page
    // },
    // currentPageSize(state,currentPageSize){
    //   state.currentPageSize=currentPageSize
    // }
  },

  actions: {
    getOperationLog(context, {appId, docId, data}) {
      API.getOperationLogs(
        appId,
        docId,
        data,
        {
          onSucess: res => {
            let list = res.data.data;
            context.commit('GET_OPERATION_LOG', {list});
          }
        }
      )
    },

    //鑾峰彇widget娴佺▼澶勭悊寰呭姙鏁版嵁
    getPendingListWithWidget(context, {workflowOrder}){
      let that = this;
      API.getPendingListWithWidget(1, 5, workflowOrder, {
        onSucess: res => {
          let pendingData = res.data.data;
          context.commit('GET_PENDING_LIST_WITH_WIDGET', {pendingData});
        }
      });
    },

    //鑾峰彇widget娴佺▼澶勭悊缁忓姙鏁版嵁
    getProcessedListWithWidget(context, {workflowOrder}){
      API.getProcessedListWithWidget(1, 5, workflowOrder, {
          onSucess: res => {
            let processedData = res.data.data;
            context.commit('GET_PROCESS_LIST_WITH_WIDGET', {processedData});
          }
        }
      )
    },

    //褰撳墠鐧婚檰鐨勭敤鎴�
    landingUser(context) {
      API.getMyProfile(
        {
          onSucess: response => {
            let doId = response.data.data.domainId;
            let userId = response.data.data.id;
            let profile = response.data.data;
            context.commit('landingUser', {doId, userId, profile});
          } 
        }
      )
    },

    loadApps(context, applications) {
      let apps = applications;
      context.commit('loadApps', apps);
      //濡傛灉menus涓虹┖锛屽垯璋冪敤绗竴涓蒋浠剁殑menus
      if (Object.keys(context.state.menus.appMenus).length <= 0) {
        let appId = apps[0].id;
        let name = '';
        context.dispatch("loadMenus", {appId, name});
      }
    },

    loadMenus(context, {appId, name,flag}) { //bcx鐧惧窛淇�-flag鍙橀噺
      if (!context.state.menus.appMenus[appId]) {
        if(appId === 'km') {
          let ary = projectJSON.km;
          let kmRealm,kmTeam;
          API.kmsMyProfile({
            onSucess: response =>{
              let result = response.data;
              if(result && result.errcode == 0){
                let isShowAdmin = false;
                if(statiContextPath){//5.0km绠$悊鍛樺叆鍙f槸鍚︽樉绀�
                  let roles = result.data.roles;
                  for(let k=0;k<roles.length;k++){
                    if(roles[k].id == "KMSUPERADMINROLEID"){
                      isShowAdmin = true;
                    }
                  }
                }else {//4.4km绠$悊鍛樺叆鍙f槸鍚︽樉绀�
                  let roles = result.data.roles;
                  for(let k=0;k<roles.length;k++){
                    if(roles[k].id == "0100"){
                      isShowAdmin = true;
                    }
                  }
                }
                API.kmMenuShow(appId,{
                  onSucess: response => {
                    if(response.data){
                      kmRealm = response.data.kmRealm;
                      kmTeam = response.data.kmTeam;
                    }
                    for(let i=0; i<ary.data.length; i++) {
                      if((ary.data[i].id == "committee" && !kmRealm) || (ary.data[i].id == "teamKm" && !kmTeam) || (ary.data[i].id == "admin" && (result.data.level != 100 || !isShowAdmin))) {
                        ary.data.splice(i, 1);
                        i--;
                      }
                    }
                    context.commit('loadMenus', { appId: appId, menus: ary.data })
                  }
                });
              }
            }
          })
          context.commit('loadAppName', { name: name,flag }) //淇敼杞欢鍚嶅瓧--//bcx鐧惧窛淇lag
          context.commit('loadAppKm', { first: 1 }) //绗竴娆$偣鍑籯m鎴栬€卲m锛岃彍鍗曟寜閽畾浣嶅湪绗竴涓綅缃�
        }else if(appId === 'qm') {
          let ary = projectJSON.qm;
          context.commit('loadMenus', { appId: appId, menus: ary.data })
          context.commit('loadAppName', { name: name,flag })//bcx鐧惧窛淇lag
          context.commit('loadAppKm', { first: 1 }) //绗竴娆$偣鍑籯m鎴栬€卲m锛岃彍鍗曟寜閽畾浣嶅湪绗竴涓綅缃�
        }else {
          API.getMenus(appId, {
            onSucess: response => {
              console.log('搴旂敤鑿滃崟鐐瑰嚮濡備笅鏁版嵁>>锛�')
              console.table(response)
              if(response.data.data){
                context.commit('loadMenus', { appId: appId, menus: response.data.data })
              }else{
                console.log('璇ュ簲鐢ㄦ病鏈夐厤缃彍鍗�')
              }
              if(name) {
                context.commit('loadAppName', { name: name,flag })//bcx鐧惧窛淇lag
              }
            }
          });
        }
      }else {
        if(context.state.firstClick === 0) { //褰撻噸鏂扮偣鍑籏m鎴栬€卲m,鑿滃崟鎸夐挳鍙互閲嶆柊瀹氫綅鍦ㄧ涓€涓�
          context.commit('loadAppKm', { first: 1 })
        }
        context.commit('loadMenus', { appId: appId })
        if(name) {
          context.commit('loadAppName', { name: name,flag }) //bcx鐧惧窛淇lag
        }
      }
    },

    getFormData(context, { uId, appId, formId, docId }) {
      API.getForm(appId, formId, docId, {}, {
        onSucess: response => {
          context.commit('setFormData', { uId: uId, doc: response.data.data });
        }
      });
    },

    getDocumentEmpty(context, { uId, appId, formId, exparams }) {
      API.getDocumentEmpty(appId, formId, exparams, {
        onSucess: response => {
          if (response.data.data) {
            context.dispatch("getFormData", { uId: uId, appId: appId, formId: formId, docId: response.data.data.id });
          }
        }
      });
    },

  }
})