plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

522 lines
15 KiB

3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
  1. <template>
  2. <nav class="site-navbar" :class="'site-navbar--' + navbarLayoutType">
  3. <div class="site-navbar__header">
  4. <!-- @click="$router.push({ name: 'home' })"-->
  5. <h1 class="site-navbar__brand2">
  6. <el-menu
  7. class="site-navbar__menu"
  8. mode="horizontal">
  9. <el-menu-item class="site-navbar__switch" index="0" @click="sidebarFold = !sidebarFold">
  10. <icon-svg name="zhedie"></icon-svg>
  11. </el-menu-item>
  12. </el-menu>
  13. <a class="site-navbar__brand2-lg" href="javascript:;">{{'CCL Design'}}</a>
  14. <a class="site-navbar__brand-mini" href="javascript:;">{{ pageLanguage.abbreviation }}</a>
  15. </h1>
  16. </div>
  17. <div class="site-navbar__body clearfix">
  18. <el-menu
  19. class="site-navbar__menu site-navbar__menu--right"
  20. mode="horizontal">
  21. <el-menu-item class="site-navbar__avatar" index="2">
  22. <span @click="siteModel()">{{siteNow}}</span>
  23. </el-menu-item>
  24. <el-menu-item class="site-navbar__avatar" index="0">
  25. <span @click="favoriteFunction()">
  26. <icon-svg :name="favorite?'xiangqufill':'xiangqu'" style="margin-top: 11px" class="sl-svg"></icon-svg>
  27. </span>
  28. </el-menu-item>
  29. <el-menu-item class="site-navbar__avatar" index="1">
  30. <span class="el-dropdown-link" @click="userSetting">
  31. <icon-svg name="editTable" style="width: 25px;height: 25px;margin-top: 5px"></icon-svg>
  32. </span>
  33. </el-menu-item>
  34. <el-menu-item class="site-navbar__avatar" index="2">
  35. <span style=" color: #909399;" @click="helpFileList()">
  36. 帮助
  37. <!-- <icon-svg name="help" style="width: 25px;height: 25px;margin-top: 5px"></icon-svg>-->
  38. </span>
  39. </el-menu-item>
  40. <el-submenu index="3">
  41. <template slot="title">{{ pageLanguage.setting }}</template>
  42. <!-- <el-submenu index="2-1">-->
  43. <!-- <template slot="title">{{ pageLanguage.languageSetting }}</template>-->
  44. <!-- <el-menu-item index="2-1-1" :key="index" :value="item.languageCode" v-for="(item,index) in languageList "-->
  45. <!-- @click.native="switch_the_language(item.languageCode)">{{ item.languageName }}-->
  46. <!-- </el-menu-item>-->
  47. <!-- </el-submenu>-->
  48. <el-submenu index="2-2">
  49. <template slot="title">{{ pageLanguage.userSetting }}</template>
  50. <el-menu-item index="2-2-1" @click.native="updatePasswordHandle()">{{ pageLanguage.updatePassword }}
  51. </el-menu-item>
  52. <!-- <el-menu-item index="2-2-2" @click.native="updateLanguageHandle()">{{ pageLanguage.updateDefaultLanguage }}-->
  53. <!-- </el-menu-item>-->
  54. <el-menu-item index="2-2-1" @click.native="updateIfsPasswordHandle()">{{'修改IFS账号密码'}}
  55. </el-menu-item>
  56. </el-submenu>
  57. <!-- <el-menu-item index="2-3" @click="$router.push({ name: 'theme' })">{{ pageLanguage.cssSetting }}-->
  58. <!-- </el-menu-item>-->
  59. </el-submenu>
  60. <el-menu-item class="site-navbar__avatar" index="4">
  61. <el-dropdown :show-timeout="0" placement="bottom">
  62. <span class="el-dropdown-link">
  63. <img src="~@/assets/img/ccl.png" :alt="userName">{{ userName }}
  64. </span>
  65. <el-dropdown-menu slot="dropdown">
  66. <el-dropdown-item @click.native="logoutHandle()">退出</el-dropdown-item>
  67. </el-dropdown-menu>
  68. </el-dropdown>
  69. </el-menu-item>
  70. </el-menu>
  71. </div>
  72. <!-- 弹窗, 修改密码 -->
  73. <update-password v-if="updatePassowrdVisible" ref="updatePassowrd"></update-password>
  74. <update-ifs-password v-if="updateIfsPassowrdVisible" ref="updateIfsPassowrd"></update-ifs-password>
  75. <!-- 弹窗, 修改默认语言 -->
  76. <update-language v-if="updateLanguageVisible" ref="updateLanguage"></update-language>
  77. <!-- 文件列表 -->
  78. <FileListView ref="fileListView" v-if="helpFileVisible"></FileListView>
  79. <el-dialog title="变更工厂" :close-on-click-modal="false" v-drag :visible.sync="siteFlag" width="200px" :modal="false">
  80. <el-form :inline="true" label-position="top" style="margin-left: 24px">
  81. <el-form-item :label="'当前账号'">
  82. <el-input v-model="$store.state.user.name" disabled style="width: 130px"></el-input>
  83. </el-form-item>
  84. <el-form-item :label="'工厂'">
  85. <el-select filterable v-model="site" style="width: 130px" clearable>
  86. <el-option :label="item.siteName" :value="item.siteID" v-for="(item,index) in siteList "
  87. :key="index"></el-option>
  88. </el-select>
  89. </el-form-item>
  90. </el-form>
  91. <el-footer style="height:30px;margin-top: 5px;text-align:center">
  92. <el-button type="primary" @click="changeSite">确定</el-button>
  93. <el-button type="primary" @click="siteFlag = false">取消</el-button>
  94. </el-footer>
  95. </el-dialog>
  96. <!-- 动态列 -->
  97. <column v-if="visible" ref="column" @refreshData="getTableUserColumn" v-drag></column>
  98. </nav>
  99. </template>
  100. <script>
  101. import UpdatePassword from './main-navbar-update-password'
  102. import UpdateLanguage from './main-navbar-update-language'
  103. import {clearLoginInfo} from '@/utils'
  104. import FileListView from './modules/common/file-list-view'
  105. import UpdateIfsPassword from './main-navbar-update-ifsPassword'
  106. import column from "./modules/common/column";
  107. import {
  108. searchFunctionButtonList,
  109. saveButtonList,
  110. searchSysLanguage,
  111. } from "@/api/sysLanguage.js"
  112. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  113. import {
  114. getSiteData,
  115. getUserAccessSite,
  116. } from "@/api/base/site.js"
  117. export default {
  118. inject: ['refresh'],
  119. data() {
  120. return {
  121. siteNow:'',
  122. favorite: false,
  123. route:this.$route.meta.menuId,
  124. visible: false,
  125. updatePassowrdVisible: false,
  126. updateIfsPassowrdVisible: false,
  127. updateLanguageVisible: false,
  128. helpFileVisible: false,
  129. site:'',
  130. siteList:'',
  131. siteFlag:false,
  132. message: this.$t('language.name'),
  133. languageList: [],
  134. pageLanguage: {
  135. XjSysManage: '旭捷管理系统',
  136. abbreviation: '旭捷',
  137. setting: '设置',
  138. languageSetting: '语言设置',
  139. userSetting: '用户设置',
  140. updatePassword: '修改密码',
  141. updateIfsPassword: '修改IFS账号密码',
  142. updateDefaultLanguage: '修改默认语言',
  143. cssSetting: '主题设置',
  144. },
  145. // 导出 end
  146. pageLanguageList: [
  147. {
  148. functionId: "systemInformation",
  149. languageValue: '旭捷管理系统',
  150. objectId: 'XjSysManage',
  151. objectType: "label",
  152. tableId: "systemInformation"
  153. },
  154. {
  155. functionId: "systemInformation",
  156. languageValue: '首页',
  157. objectId: 'homePage',
  158. objectType: "label",
  159. tableId: "systemInformation"
  160. },
  161. {
  162. functionId: "systemInformation",
  163. languageValue: '旭捷',
  164. objectId: 'abbreviation',
  165. objectType: "label",
  166. tableId: "systemInformation"
  167. },
  168. {
  169. functionId: "systemInformation",
  170. languageValue: '设置',
  171. objectId: 'setting',
  172. objectType: "label",
  173. tableId: "systemInformation"
  174. },
  175. {
  176. functionId: "systemInformation",
  177. languageValue: '语言设置',
  178. objectId: 'languageSetting',
  179. objectType: "label",
  180. tableId: "systemInformation"
  181. },
  182. {
  183. functionId: "systemInformation",
  184. languageValue: '用户设置',
  185. objectId: 'userSetting',
  186. objectType: "label",
  187. tableId: "systemInformation"
  188. },
  189. {
  190. functionId: "systemInformation",
  191. languageValue: '修改密码',
  192. objectId: 'updatePassword',
  193. objectType: "label",
  194. tableId: "systemInformation"
  195. },
  196. {
  197. functionId: "systemInformation",
  198. languageValue: '修改用户语言',
  199. objectId: 'updateDefaultLanguage',
  200. objectType: "label",
  201. tableId: "systemInformation"
  202. },
  203. {
  204. functionId: "systemInformation",
  205. languageValue: '主题设置',
  206. objectId: 'cssSetting',
  207. objectType: "label",
  208. tableId: "systemInformation"
  209. }
  210. ],
  211. pending: {
  212. pendingReview: 0,
  213. pendingSum: 0,
  214. },
  215. }
  216. },
  217. watch: {
  218. pending: {
  219. deep: true,
  220. handler: function (newV, oldV) {
  221. this.pending.pendingSum = this.pending.pendingReview
  222. }
  223. },
  224. $route: {
  225. deep: true,
  226. handler: function (newV, oldV) {
  227. this.favoriteIsOk();
  228. }
  229. },
  230. },
  231. components: {
  232. UpdatePassword,
  233. UpdateLanguage,
  234. FileListView,
  235. column,
  236. UpdateIfsPassword,
  237. },
  238. computed: {
  239. navbarLayoutType: {
  240. get() {
  241. return this.$store.state.common.navbarLayoutType
  242. }
  243. },
  244. sidebarFold: {
  245. get() {
  246. return this.$store.state.common.sidebarFold
  247. },
  248. set(val) {
  249. this.$store.commit('common/updateSidebarFold', val)
  250. }
  251. },
  252. mainTabs: {
  253. get() {
  254. return this.$store.state.common.mainTabs
  255. },
  256. set(val) {
  257. this.$store.commit('common/updateMainTabs', val)
  258. }
  259. },
  260. userName: {
  261. get() {
  262. return this.$store.state.user.userDisplay
  263. }
  264. }
  265. },
  266. activated() {
  267. },
  268. mounted() {
  269. },
  270. beforeDestroy() {
  271. },
  272. methods: {
  273. // 打开页面设置
  274. userSetting() {
  275. this.visible = true;
  276. let queryTable = {
  277. userId: this.$store.state.user.name,
  278. functionId: this.$route.meta.menuId,
  279. languageCode: this.$i18n.locale,
  280. tableId: '',
  281. }
  282. this.$nextTick(() => {
  283. this.$refs.column.init(queryTable);
  284. })
  285. },
  286. getTableUserColumn() {
  287. this.$nextTick(() => {
  288. this.refresh()
  289. })
  290. },
  291. // 帮助文档列表
  292. helpFileList() {
  293. let fileMappingDto = {
  294. fileId: '',
  295. fileType: '功能帮助文档',
  296. orderRef1: this.$route.meta.menuId,
  297. orderRef2: '',
  298. orderRef3: '',
  299. }
  300. this.helpFileVisible = true;
  301. this.$nextTick(() => {
  302. this.$refs.fileListView.init(fileMappingDto)
  303. })
  304. },
  305. // 获取多语言列表
  306. getLanguageList() {
  307. searchSysLanguage({languageCode: this.$i18n.locale}).then(({data}) => {
  308. this.languageList = data.rows
  309. })
  310. },
  311. // 获取页面多语言数据
  312. getFunctionButtonList() {
  313. let queryButton = {
  314. functionId: 'systemInformation',
  315. tableId: 'systemInformation',
  316. languageCode: this.$i18n.locale,
  317. objectType: 'label'
  318. }
  319. searchFunctionButtonList(queryButton).then(({data}) => {
  320. if (data.code === 0) {
  321. this.pageLanguage = data.data
  322. }
  323. })
  324. },
  325. // 注3:增加语言切换函数
  326. switch_the_language(val) {
  327. localStorage.setItem('locale', val)
  328. location.reload()
  329. },
  330. // 修改密码
  331. updatePasswordHandle() {
  332. this.updatePassowrdVisible = true
  333. this.$nextTick(() => {
  334. this.$refs.updatePassowrd.init()
  335. })
  336. },
  337. updateIfsPasswordHandle() {
  338. this.updateIfsPassowrdVisible = true
  339. this.$nextTick(() => {
  340. this.$refs.updateIfsPassowrd.init()
  341. })
  342. },
  343. // 修改用户默认语言
  344. updateLanguageHandle() {
  345. this.updateLanguageVisible = true
  346. this.$nextTick(() => {
  347. this.$refs.updateLanguage.init()
  348. })
  349. },
  350. // 退出
  351. logoutHandle() {
  352. this.$confirm(`确定进行[退出]操作?`, '提示', {
  353. confirmButtonText: '确定',
  354. cancelButtonText: '取消',
  355. type: 'warning'
  356. }).then(() => {
  357. this.$http({
  358. url: this.$http.adornUrl('/sys/logout'),
  359. method: 'post',
  360. data: this.$http.adornData()
  361. }).then(({data}) => {
  362. if (data && data.code === 0) {
  363. clearLoginInfo()
  364. this.$router.push({name: 'login'})
  365. }
  366. })
  367. }).catch(() => {
  368. })
  369. },
  370. //收藏夹功能 // 校验用户是否收藏
  371. favoriteIsOk() {
  372. let userFavorite = {
  373. userId: this.$store.state.user.id,
  374. languageCode: this.$i18n.locale
  375. }
  376. userFavoriteList(userFavorite).then(({data}) => {
  377. this.favorite = false
  378. for (let i = 0; i < data.list.length; i++) {
  379. if (!data.list[i]){
  380. continue
  381. }
  382. if(this.$route.meta.menuId==data.list[i].menuId){
  383. this.favorite = true
  384. // flag=true;
  385. }
  386. }
  387. })
  388. },
  389. // 收藏 OR 取消收藏
  390. favoriteFunction() {
  391. if(this.$route.meta.menuId==null||this.$route.meta.menuId==''){
  392. this.$message.error( '首页不需要收藏!')
  393. return false
  394. }
  395. let userFavorite = {
  396. userId: this.$store.state.user.id,
  397. functionId: this.$route.meta.menuId,
  398. }
  399. if (this.favorite) {
  400. // 取消收藏
  401. this.$confirm(`确定取消收藏`, '提示', {
  402. confirmButtonText: '确定',
  403. cancelButtonText: '取消',
  404. type: 'warning'
  405. }).then(() => {
  406. removeUserFavorite(userFavorite).then(({data}) => {
  407. this.$message.success(data.msg)
  408. this.favorite = false
  409. })
  410. })
  411. } else {
  412. // 收藏
  413. saveUserFavorite(userFavorite).then(({data}) => {
  414. this.$message.success(data.msg)
  415. this.favorite = true
  416. })
  417. }
  418. },
  419. getNowSite(){
  420. let data={};
  421. getSiteData(data).then(({data}) => {
  422. if(data.rows.length>0){
  423. for (let i = 0; i <data.rows.length ; i++) {
  424. if(data.rows[i].siteID==this.$store.state.user.site){
  425. this.siteNow="当前工厂:"+data.rows[i].siteID+" - "+data.rows[i].siteName
  426. }
  427. }
  428. }
  429. })
  430. },
  431. siteModel(){
  432. this.site=this.$store.state.user.site
  433. getUserAccessSite({username:this.$store.state.user.name}).then(({data})=>{
  434. this.siteList=data.rows
  435. })
  436. this.siteFlag=true
  437. },
  438. changeSite(){
  439. if(this.site==null||this.site===''){
  440. this.$message.error( '工厂未选择!')
  441. return false
  442. }
  443. //修改工厂 2个缺一不可
  444. this.$store.commit('user/updateSite', this.site)
  445. localStorage.setItem('accessSite', this.site)
  446. this.siteFlag=false
  447. this.getNowSite()
  448. this.$nextTick(function () {
  449. // 在 DOM 更新之后执行的操作
  450. window.location.reload()
  451. });
  452. },
  453. },
  454. created() {
  455. this.getLanguageList()
  456. this.getFunctionButtonList()
  457. this. getNowSite()
  458. }
  459. }
  460. </script>
  461. <style lang="scss">
  462. .icon-svg {
  463. width: 2em;
  464. }
  465. .site-sidebar{
  466. overflow-y: auto;
  467. }
  468. .site-sidebar__inner{
  469. overflow-y: visible;
  470. }
  471. .el-menu--collapse .el-menu .el-submenu, .el-menu--popup, .el-menu-item {
  472. min-width: 50px !important;
  473. }
  474. .site-navbar__brand-lg, .site-navbar__brand-mini {
  475. margin: 0 5px;
  476. color: #fff;
  477. margin-left: -25px;
  478. font-size: 18px;
  479. }
  480. .site-navbar__brand2-lg{
  481. margin: 0 5px;
  482. color: #fff;
  483. margin-left: -25px;
  484. font-size: 18px;
  485. }
  486. .el-menu--horizontal > .el-menu-item {
  487. color: #3b4249;
  488. }
  489. </style>