index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. <template>
  2. <page-meta root-font-size="system" />
  3. <view class="work-container">
  4. <!-- 宫格组件 -->
  5. <view v-if="processList.fList.length != 0">
  6. <view v-for="(type, typeIndex) in processList.ftypeList" :key="typeIndex">
  7. <uni-section :title="type.typeName" titleFontSize="1.3rem" type="line"></uni-section>
  8. <view class="grid-body">
  9. <uni-grid :column="uni_grid_column" :showBorder="false" >
  10. <view v-for="(item, index) in processList.fList" :index="index" :key="index" >
  11. <view v-if="type.typeId === item.typeId.typeId" @click="changeProcessGrid(item)">
  12. <uni-grid-item >
  13. <view class="grid-item-box">
  14. <text class="ygoa_work_icon"
  15. :class="item.modelPicture == 'default.png' ? 'icon-outsourcing' : item.modelPicture"></text>
  16. <view class="modelName">
  17. <text class="text">{{ item.modelName }}</text>
  18. </view>
  19. </view>
  20. </uni-grid-item>
  21. </view>
  22. </view>
  23. </uni-grid>
  24. </view>
  25. </view>
  26. </view>
  27. <uni-section title="考勤管理" titleFontSize="1.3rem" type="line"></uni-section>
  28. <view class="grid-body">
  29. <uni-grid :column="uni_grid_column" :showBorder="false" @change="changeAttendanceGrid">
  30. <uni-grid-item :index="1">
  31. <view class="grid-item-box">
  32. <text class="ygoa_icon icon-checkIn"></text>
  33. <text class="text">考勤</text>
  34. </view>
  35. </uni-grid-item>
  36. <uni-grid-item :index="2">
  37. <view class="grid-item-box">
  38. <text class="ygoa_icon icon-location"></text>
  39. <text class="text">打卡</text>
  40. </view>
  41. </uni-grid-item>
  42. </uni-grid>
  43. </view>
  44. <view v-if="diaryShow">
  45. <uni-section title="日报周报" titleFontSize="1.3rem" type="line"></uni-section>
  46. <view class="grid-body">
  47. <uni-grid :column="uni_grid_column" :showBorder="false" @change="changeDiaryGrid">
  48. <uni-grid-item :index="1">
  49. <view class="grid-item-box">
  50. <text class="ygoa-icon icon-diary"></text>
  51. <text class="text">日报</text>
  52. </view>
  53. </uni-grid-item>
  54. <!-- <uni-grid-item :index="2">
  55. <view class="grid-item-box">
  56. <text class="ygoa-icon icon-diary"></text>
  57. <text class="text">日报</text>
  58. </view>
  59. </uni-grid-item> -->
  60. </uni-grid>
  61. </view>
  62. </view>
  63. <uni-section title="系统工具" titleFontSize="1.3rem" type="line"></uni-section>
  64. <view class="grid-body">
  65. <uni-grid :column="uni_grid_column" :showBorder="false" @change="changeToolsGrid">
  66. <uni-grid-item :index="1">
  67. <view class="grid-item-box">
  68. <text class="ygoa_icon icon-calculator"></text>
  69. <text class="text">计算器</text>
  70. </view>
  71. </uni-grid-item>
  72. <uni-grid-item :index="2">
  73. <view class="grid-item-box">
  74. <text class="ygoa_icon icon-clear-cache"></text>
  75. <text class="text">清除缓存</text>
  76. </view>
  77. </uni-grid-item>
  78. </uni-grid>
  79. </view>
  80. <uni-section title="房屋管家" titleFontSize="1.3rem" v-if="homesysShow" type="line"></uni-section>
  81. <view class="grid-body" v-if="homesysShow">
  82. <uni-grid :column="uni_grid_column" :showBorder="false" @change="changeHomesys">
  83. <uni-grid-item v-for="(home, index) in homesysList" :index="index" v-if="homesysShow" :key="index">
  84. <view class="grid-item-box">
  85. <text class="ygoa_work_icon icon-zhinengjiaju"></text>
  86. <text class="text">
  87. {{ home.room_name || home.room_url.split('/').pop() }}
  88. </text>
  89. </view>
  90. </uni-grid-item>
  91. <uni-grid-item :index="homesysList.length + 1" v-if="userStore.user.userName == 'yzadmin'">
  92. <view class="grid-item-box">
  93. <text class="ygoa_work_icon icon-zhinengjiaju"></text>
  94. <text class="text">房屋管理</text>
  95. </view>
  96. </uni-grid-item>
  97. <!-- <uni-grid-item :index="homesysList.length + 2" v-if="userStore.user.userName == 'yzadmin'">
  98. <view class="grid-item-box">
  99. <text class="ygoa_work_icon icon-zhinengjiaju"></text>
  100. <text class="text">用户管理</text>
  101. </view>
  102. </uni-grid-item> -->
  103. <uni-grid-item :index="homesysList.length + 3" v-if="userStore.user.userName == 'yzadmin'">
  104. <view class="grid-item-box">
  105. <text class="ygoa_work_icon icon-zhinengjiaju"></text>
  106. <text class="text">用户管理</text>
  107. </view>
  108. </uni-grid-item>
  109. </uni-grid>
  110. </view>
  111. <!-- 计算器弹出层 -->
  112. <view class="popup_container">
  113. <cui-calculator ref="calculatorPopup" size="normal"></cui-calculator>
  114. </view>
  115. <!-- 清除缓存弹出层 -->
  116. <!-- <view class="clear_cache_popup_container">
  117. <uni-popup ref="clearCacheDialog" type="dialog">
  118. <uni-popup-dialog title="确认清除缓存" @confirm="clearCache"></uni-popup-dialog>
  119. </uni-popup>
  120. </view> -->
  121. </view>
  122. </template>
  123. <script setup lang="ts">
  124. import cuiCalculator from "@/components/cui-calculator/cui-calculator.vue"
  125. import { onMounted, ref } from "vue"
  126. import $tab from "@/plugins/tab.js"
  127. import { useUserStore } from '@/store/user.js'
  128. import { getProcessList, roomUserLogin, getUserRoomByUser } from '@/api/work.js'
  129. import { clearCache } from '@/utils/ygoa.js'
  130. import { onShow } from '@dcloudio/uni-app'
  131. import config from '@/config.js';
  132. const userStore = useUserStore()
  133. let sysFontSize = 0
  134. const uni_grid_column = ref(4)
  135. const diaryShow = ref(false)
  136. if(config.companyCode && config.companyCode == 'yg'){
  137. diaryShow.value = true;
  138. }else{
  139. diaryShow.value = false;
  140. }
  141. const homesysShow = ref(false)
  142. const homesysList = ref([])
  143. function getUserRoom() {
  144. getUserRoomByUser(userStore.user.userName).then((res) => {
  145. console.log('getUserRoomByUser', res)
  146. const hasRoom = res.length != 0
  147. if (hasRoom) {
  148. homesysList.value = res
  149. homesysShow.value = true
  150. console.log('getUserRoomByUser', homesysList.value)
  151. }
  152. })
  153. }
  154. // 点击房屋管家
  155. function changeHomesys(e) {
  156. const roomIndex = e.detail.index
  157. const roomListLength = homesysList.value.length
  158. // if (roomIndex > roomListLength) {
  159. switch (roomIndex) {
  160. case roomListLength + 1:
  161. $tab.navigateTo('/pages/work/homesysSetting/index')
  162. break
  163. case roomListLength + 2:
  164. $tab.navigateTo('/pages/work/homesysSetting/user')
  165. break
  166. case roomListLength + 3:
  167. $tab.navigateTo('/pages/work/homesysSetting/userList')
  168. break
  169. default:
  170. $tab.navigateTo('/pages/work/homesys/index?homeCode=' + homesysList.value[roomIndex].room_url)
  171. }
  172. // } else {
  173. // $tab.navigateTo('/pages/work/homesys/index?homeCode=' + homesysList.value[roomIndex].room_url)
  174. // }
  175. }
  176. onMounted(() => {
  177. getUserRoom()
  178. })
  179. onMounted(() => {
  180. sysFontSize = uni.getAppBaseInfo().fontSizeSetting
  181. if (sysFontSize > 20) uni_grid_column.value = 3
  182. initProcessList()
  183. })
  184. onShow(()=>{
  185. uni.$emit('showTabBarBadge')
  186. })
  187. // 流程列表
  188. const processList = ref({
  189. fList: [],
  190. ftypeList: [
  191. {
  192. typeName: ''
  193. }
  194. ],
  195. })
  196. // 获取流程宫格数据
  197. function initProcessList() {
  198. const staffId = userStore.user.useId
  199. const unitId = userStore.user.unitId
  200. getProcessList(staffId, unitId).then(res => {
  201. processList.value = res.returnParams // 设置processList
  202. })
  203. }
  204. // 点击流程宫格
  205. function changeProcessGrid(item) {
  206. // console.log('changeProcessGrid', e);
  207. // const { modelName, modelId, control } = processList.value.fList[e.detail.index]
  208. const { modelName, modelId, control } = item
  209. // const modelName = item.value.modelName
  210. // const modelId = item.value.modelId
  211. // const control = item.value.control
  212. // 判断是否为特殊流程
  213. if (control == '0') {
  214. // control 为 0 时,根据 modelId 判断
  215. if (modelId == '200001') {
  216. // 采购发起流程
  217. $tab.navigateTo('/pages/work/purchase/start?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  218. return
  219. }else if (modelId == '200002') {
  220. // 合同发起流程
  221. $tab.navigateTo('/pages/work/contract/start?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  222. return
  223. }else{
  224. $tab.navigateTo('/pages/work/edit/index?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  225. }
  226. // 其他特殊流程可以跳转到通用发起页面(后续扩展)
  227. // $tab.navigateTo('/pages/process/common/start?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  228. // return
  229. }
  230. // 跳转流程申请页面(原有逻辑)
  231. $tab.navigateTo('/pages/work/edit/index?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  232. }
  233. // 点击考勤宫格
  234. function changeAttendanceGrid(e) {
  235. if (1 == e.detail.index) { // 考勤
  236. $tab.navigateTo('/pages/mine/checkIn/checkIn')
  237. }
  238. if (2 == e.detail.index) { // 打卡
  239. $tab.navigateTo('/pages/mine/clockIn/clockIn')
  240. }
  241. }
  242. // 点击日报宫格
  243. function changeDiaryGrid(e) {
  244. if (1 == e.detail.index) {
  245. wx.navigateToMiniProgram({
  246. appId: 'wxd45c635d754dbf59',
  247. // path: `pages/detail/detail?url=https://docs.qq.com/sheet/DUmJRc2NYTmx1d3Nr`,
  248. })
  249. // wx.navigateToMiniProgram({
  250. // appId: 'wxde4bf149a4c88707',
  251. // path: `pages/login`
  252. // })
  253. return
  254. }
  255. if (2 == e.detail.index) {
  256. $tab.navigateTo('/pages/work/diary/index')
  257. return
  258. }
  259. }
  260. // 点击工具宫格
  261. function changeToolsGrid(e) {
  262. switch (e.detail.index) {
  263. case 1:
  264. openCalculatorPopup() // 打开计算器弹出层
  265. break
  266. case 2:
  267. clearCache()
  268. // openClearCachePopup() // 打开清除缓存弹出层
  269. break
  270. default:
  271. }
  272. }
  273. // 计算器
  274. const calculatorPopup = ref(null)
  275. function openCalculatorPopup() { // 打开计算器弹出层
  276. calculatorPopup.value.open()
  277. }
  278. // 清除缓存
  279. // const clearCacheDialog = ref(null)
  280. // function openClearCachePopup() { // 打开清除缓存弹出层
  281. // clearCacheDialog.value.open()
  282. // }
  283. // const userStore = useUserStore()
  284. </script>
  285. <style lang="scss">
  286. // @import "@/static/font/ygoa/iconfont.css";
  287. .ygoa_icon, .ygoa_work_icon {
  288. font-size: calc(80rpx + 1.5*(1rem - 16px));
  289. }
  290. .icon_size {
  291. font-size: calc(80rpx + 1.5*(1rem - 16px));
  292. }
  293. /* #ifndef APP-NVUE */
  294. page {
  295. display: flex;
  296. flex-direction: column;
  297. box-sizing: border-box;
  298. background-color: #fff;
  299. min-height: 100%;
  300. height: auto;
  301. }
  302. view {
  303. font-size: calc(14px + 1.5*(1rem - 16px));
  304. line-height: inherit;
  305. }
  306. /* #endif */
  307. .text {
  308. text-align: center;
  309. font-size: calc(26rpx + 1.5*(1rem - 16px));
  310. margin-top: 10rpx;
  311. }
  312. .modelName {
  313. max-width: 120rpx;
  314. text-align: center;
  315. }
  316. .work-container {
  317. .grid-item-box {
  318. flex: 1;
  319. /* #ifndef APP-NVUE */
  320. display: flex;
  321. /* #endif */
  322. flex-direction: column;
  323. align-items: center;
  324. justify-content: center;
  325. padding: 15px 0;
  326. }
  327. // .uni-margin-wrap {
  328. // width: 690rpx;
  329. // width: 100%;
  330. // }
  331. .swiper {
  332. height: 300rpx;
  333. }
  334. .swiper-box {
  335. height: 150px;
  336. }
  337. .swiper-item {
  338. /* #ifndef APP-NVUE */
  339. display: flex;
  340. /* #endif */
  341. flex-direction: column;
  342. justify-content: center;
  343. align-items: center;
  344. color: #fff;
  345. height: 300rpx;
  346. line-height: 300rpx;
  347. }
  348. @media screen and (min-width: 500px) {
  349. .uni-swiper-dot-box {
  350. width: 400px;
  351. /* #ifndef APP-NVUE */
  352. margin: 0 auto;
  353. /* #endif */
  354. margin-top: 8px;
  355. }
  356. .image {
  357. width: 100%;
  358. }
  359. }
  360. }
  361. </style>