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.

495 lines
14 KiB

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