index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  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" v-if="config.companyCode !== 'yz'">
  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 if (modelId == '200003') {
  224. // 付款流程
  225. $tab.navigateTo('/pages/work/payment/start?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  226. return
  227. }else{
  228. $tab.navigateTo('/pages/work/edit/index?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  229. }
  230. // 其他特殊流程可以跳转到通用发起页面(后续扩展)
  231. // $tab.navigateTo('/pages/process/common/start?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  232. // return
  233. }
  234. // 跳转流程申请页面(原有逻辑)
  235. $tab.navigateTo('/pages/work/edit/index?modelName=' + modelName + '&modelId=' + modelId + '&control=' + control)
  236. }
  237. // 点击考勤宫格
  238. function changeAttendanceGrid(e) {
  239. if (1 == e.detail.index) { // 考勤
  240. $tab.navigateTo('/pages/mine/checkIn/checkIn')
  241. }
  242. if (2 == e.detail.index) { // 打卡
  243. $tab.navigateTo('/pages/mine/clockIn/clockIn')
  244. }
  245. }
  246. // 点击日报宫格
  247. function changeDiaryGrid(e) {
  248. if (1 == e.detail.index) {
  249. wx.navigateToMiniProgram({
  250. appId: 'wxd45c635d754dbf59',
  251. // path: `pages/detail/detail?url=https://docs.qq.com/sheet/DUmJRc2NYTmx1d3Nr`,
  252. })
  253. // wx.navigateToMiniProgram({
  254. // appId: 'wxde4bf149a4c88707',
  255. // path: `pages/login`
  256. // })
  257. return
  258. }
  259. if (2 == e.detail.index) {
  260. $tab.navigateTo('/pages/work/diary/index')
  261. return
  262. }
  263. }
  264. // 点击工具宫格
  265. function changeToolsGrid(e) {
  266. switch (e.detail.index) {
  267. case 1:
  268. openCalculatorPopup() // 打开计算器弹出层
  269. break
  270. case 2:
  271. clearCache()
  272. // openClearCachePopup() // 打开清除缓存弹出层
  273. break
  274. default:
  275. }
  276. }
  277. // 计算器
  278. const calculatorPopup = ref(null)
  279. function openCalculatorPopup() { // 打开计算器弹出层
  280. calculatorPopup.value.open()
  281. }
  282. // 清除缓存
  283. // const clearCacheDialog = ref(null)
  284. // function openClearCachePopup() { // 打开清除缓存弹出层
  285. // clearCacheDialog.value.open()
  286. // }
  287. // const userStore = useUserStore()
  288. </script>
  289. <style lang="scss">
  290. // @import "@/static/font/ygoa/iconfont.css";
  291. .ygoa_icon, .ygoa_work_icon {
  292. font-size: calc(80rpx + 1.5*(1rem - 16px));
  293. }
  294. .icon_size {
  295. font-size: calc(80rpx + 1.5*(1rem - 16px));
  296. }
  297. /* #ifndef APP-NVUE */
  298. page {
  299. display: flex;
  300. flex-direction: column;
  301. box-sizing: border-box;
  302. background-color: #fff;
  303. min-height: 100%;
  304. height: auto;
  305. }
  306. view {
  307. font-size: calc(14px + 1.5*(1rem - 16px));
  308. line-height: inherit;
  309. }
  310. /* #endif */
  311. .text {
  312. text-align: center;
  313. font-size: calc(26rpx + 1.5*(1rem - 16px));
  314. margin-top: 10rpx;
  315. }
  316. .modelName {
  317. max-width: 120rpx;
  318. text-align: center;
  319. }
  320. .work-container {
  321. .grid-item-box {
  322. flex: 1;
  323. /* #ifndef APP-NVUE */
  324. display: flex;
  325. /* #endif */
  326. flex-direction: column;
  327. align-items: center;
  328. justify-content: center;
  329. padding: 15px 0;
  330. }
  331. // .uni-margin-wrap {
  332. // width: 690rpx;
  333. // width: 100%;
  334. // }
  335. .swiper {
  336. height: 300rpx;
  337. }
  338. .swiper-box {
  339. height: 150px;
  340. }
  341. .swiper-item {
  342. /* #ifndef APP-NVUE */
  343. display: flex;
  344. /* #endif */
  345. flex-direction: column;
  346. justify-content: center;
  347. align-items: center;
  348. color: #fff;
  349. height: 300rpx;
  350. line-height: 300rpx;
  351. }
  352. @media screen and (min-width: 500px) {
  353. .uni-swiper-dot-box {
  354. width: 400px;
  355. /* #ifndef APP-NVUE */
  356. margin: 0 auto;
  357. /* #endif */
  358. margin-top: 8px;
  359. }
  360. .image {
  361. width: 100%;
  362. }
  363. }
  364. }
  365. </style>