timetool.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <template>
  2. <div>
  3. <van-nav-bar
  4. title="自动计时"
  5. left-text="返回"
  6. @click-left="back"
  7. fixed
  8. left-arrow
  9. />
  10. <div class="content">
  11. <!-- <van-field
  12. readonly
  13. name="projectId"
  14. clickable
  15. :value="item.projectName"
  16. label="投入项目"
  17. placeholder="请选择投入项目"
  18. @click="clickPicker(index, item)"
  19. :rules="[{ required: true, message: '请选择项目' }]"
  20. /> -->
  21. <div class="select">
  22. <van-cell title="选择项目" :value="selectValue" @click="selectXshow = true" :value-class="valueclass"/>
  23. <!-- <span>选择项目</span> -->
  24. <!-- <van-dropdown-menu>
  25. <van-dropdown-item
  26. v-model="selectValue"
  27. :options="selectOpt"
  28. @change="selectX()"
  29. />
  30. </van-dropdown-menu> -->
  31. </div>
  32. <div class="selectgx">
  33. <div class="selectgxtitle">选择工序<span v-show="selectgxshow" style="color:#c03131;">请选择工序</span></div>
  34. <van-grid :border="false" :column-num="3">
  35. <van-grid-item v-for="(item, index) in selectG" :key="index" :class="index == inbtn ? 'inbtn' : ''">
  36. <van-button
  37. class="selectgxbtn"
  38. type="default"
  39. size="small"
  40. @click="selectGx(item.index,index)"
  41. >{{ item.name }}</van-button
  42. >
  43. </van-grid-item>
  44. </van-grid>
  45. </div>
  46. <div class="timingBtn">
  47. <van-button
  48. class="timbutton"
  49. plain
  50. hairline
  51. type="info"
  52. size="large"
  53. block
  54. style="height: 100px"
  55. @click="startTiming()"
  56. >
  57. <div v-show="tBtnText" class="timint">
  58. {{ timingH < 10 ? "0" + timingH : timingH }}:{{
  59. timingM < 10 ? "0" + timingM : timingM
  60. }}:{{ timingS < 10 ? "0" + timingS : timingS }}
  61. </div>
  62. <span>{{ tBtnText ? "停止计时" : "开始计时" }}</span>
  63. </van-button>
  64. </div>
  65. <ul class="recordList">
  66. <li v-for="(item, index) in record" :key="index" class="">
  67. <div class="upper">
  68. <!-- 条目 -->
  69. <div class="entry">{{ item.data1 }}</div>
  70. <!-- 日期 -->
  71. <div class="date">{{ item.data3 }}</div>
  72. </div>
  73. <div class="below">
  74. <!-- 工序 -->
  75. <div class="procedure">{{ item.data2 }}</div>
  76. <!-- 计时时长 -->
  77. <div class="duration">{{ item.data5 }}</div>
  78. <!-- 计时区间 -->
  79. <div class="timeinterval">{{ item.data4 }}</div>
  80. </div>
  81. </li>
  82. </ul>
  83. </div>
  84. <van-action-sheet v-model="selectXshow">
  85. <van-search v-model="searchText" placeholder="请输入项目名称" @clear="sea()" @blur="sea()" @search="sea()"/>
  86. <div style="minHeight:300px;">
  87. <div v-for="(item, index) in selectOptS" :key="item.id" class="ryuan" @click="selectX(item, index)">{{item.projectName}}</div>
  88. </div>
  89. </van-action-sheet>
  90. <!-- <van-popup v-model="showPickerUserddp" position="bottom" style="height: 80%">
  91. <van-search v-model="userName" placeholder="请输入项目名称" @clear="sea()" @blur="sea()" @search="sea()"/>
  92. <div style="minHeight:300px;">
  93. <div v-for="(item, index) in projectss" :key="item.id" class="ryuan" @click="fZr(item, index)">{{item.projectName}}</div>
  94. </div>
  95. </van-popup> -->
  96. </div>
  97. </template>
  98. <script>
  99. export default {
  100. data() {
  101. return {
  102. selectValue: "请选择项目",
  103. searchText:'',
  104. selectXshow: false,
  105. selectgxshow: false,
  106. valueclass:null,
  107. inbtn:null,
  108. // 条目选择
  109. selectOpt: [],
  110. selectOptS:[],
  111. // 工序数据
  112. selectG: [
  113. { name: "工序1", index: "99" },
  114. { name: "工序2", index: "98" },
  115. { name: "工序3", index: "97" },
  116. { name: "工序4", index: "96" },
  117. { name: "工序5", index: "95" },
  118. ],
  119. // 计时器 计时数据
  120. timingFun: null,
  121. tBtnText: 0,
  122. // 时分秒
  123. timingH: 0,
  124. timingM: 0,
  125. timingS: 0,
  126. // 记录数据
  127. record: [
  128. {
  129. data1: "汽车电池一号v1234",
  130. data2: "组装",
  131. data3: "2022-03-23",
  132. data4: "11:40-11:50",
  133. data5: "0.1h",
  134. },
  135. {
  136. data1: "条目名称",
  137. data2: "工序名称",
  138. data3: "计时日期",
  139. data4: "计时区间",
  140. data5: "计时时长",
  141. },
  142. ],
  143. loadata1: null,
  144. startime: "",
  145. endtime: "",
  146. };
  147. },
  148. methods: {
  149. back() {
  150. history.back();
  151. },
  152. // 选择项目
  153. selectX(item,index) {
  154. console.log("selectX",item,index);
  155. this.selectXshow = false
  156. this.selectValue = item.projectName
  157. this.valueclass = null
  158. },
  159. sea() {
  160. // console.log(this.searchText.length)
  161. if(this.searchText.length > 0) {
  162. let text = this.searchText
  163. let reg = new RegExp(text)
  164. let data = this.selectOptS.filter(item => reg.test(item.projectName)) //返回
  165. this.selectOptS = data
  166. } else {
  167. this.selectOptS = this.selectOpt
  168. }
  169. },
  170. // 选择工序
  171. selectGx(e,i) {
  172. console.log(e,i);
  173. this.loadata1 = e;
  174. this.inbtn = i
  175. this.selectgxshow = false
  176. },
  177. // 计时器
  178. startTiming() {
  179. if(this.selectValue == "请选择项目"){
  180. this.valueclass = "valuecolor"
  181. if(this.loadata1 == null){
  182. this.selectgxshow = true
  183. }
  184. return
  185. }
  186. let date = new Date();
  187. let nowH = date.getHours();
  188. let nowM = date.getMinutes();
  189. if (!this.tBtnText) {
  190. this.tBtnText = 1;
  191. this.startime =
  192. (nowH < 10 ? "0" + nowH : nowH) +
  193. ":" +
  194. (nowM < 10 ? "0" + nowM : nowM);
  195. this.timingFun = setInterval(() => {
  196. this.timingS += 1;
  197. if (this.timingS == 60) {
  198. this.timingS = 0;
  199. this.timingM += 1;
  200. if (this.timingM == 60) {
  201. this.timingM = 0;
  202. this.timingH += 1;
  203. }
  204. }
  205. }, 1000);
  206. } else {
  207. this.tBtnText = 0;
  208. this.endtime =
  209. (nowH < 10 ? "0" + nowH : nowH) +
  210. ":" +
  211. (nowM < 10 ? "0" + nowM : nowM);
  212. clearInterval(this.timingFun);
  213. this.timingFun = null;
  214. this.timingH = 0;
  215. this.timingM = 0;
  216. this.timingS = 0;
  217. this.setRecord();
  218. }
  219. },
  220. // 添加计时记录
  221. setRecord() {
  222. let date = new Date();
  223. let nmon = date.getMonth() + 1;
  224. let today =
  225. date.getFullYear() +
  226. "-" +
  227. (nmon < 10 ? "0" + nmon : nmon) +
  228. "-" +
  229. (date.getDate() < 10 ? "0" + date.getDate() : date.getDate());
  230. console.log("today", today);
  231. let addR = {
  232. data1: this.selectValue,
  233. data2: this.loadata1,
  234. data3: today,
  235. data4: this.startime + "-" + this.endtime,
  236. data5: "timingbtn",
  237. };
  238. this.record.push(addR);
  239. console.log(this.record);
  240. },
  241. // 获取项目列表
  242. getseachvalue(){
  243. this.$axios.post("/project/getProjectList", {})
  244. .then(res => {
  245. if(res.code == "ok") {
  246. this.selectOpt = res.data
  247. this.selectOptS = res.data
  248. console.log("res.data",res.data);
  249. } else {
  250. this.$toast.fail('获取失败:'+res.msg);
  251. }
  252. }).catch(err=> {toast.clear();});
  253. }
  254. },
  255. mounted() {
  256. this.getseachvalue()
  257. },
  258. };
  259. </script>
  260. <style lang="less" scoped>
  261. .content {
  262. margin-top: 46px;
  263. }
  264. .valuecolor{
  265. color: #c03131;
  266. }
  267. .select {
  268. .van-cell{
  269. line-height: 1rem;
  270. }
  271. .van-cell__title{
  272. text-align: center;
  273. span{
  274. color: #646566;
  275. }
  276. }
  277. .van-cell__value{
  278. text-align: center;
  279. }
  280. }
  281. .selectgx {
  282. background-color: #fff;
  283. .selectgxtitle{
  284. margin-left: 10%;
  285. text-align: left;
  286. font-size: 14px;
  287. color: #646566;
  288. height: 0.4rem;
  289. line-height: 0.4rem;
  290. span{
  291. margin-left: 0.9rem;
  292. font-size: 0.33rem;
  293. }
  294. }
  295. .inbtn{
  296. .selectgxbtn{
  297. color: #1989fa;
  298. border-color: #1989fa;
  299. }
  300. }
  301. .van-grid-item{
  302. height: 1.5rem;
  303. }
  304. .selectgxbtn{
  305. width: 90%;
  306. // height: 100%;
  307. }
  308. }
  309. .timingBtn{
  310. padding: 3% 8%;
  311. .timbutton{
  312. .timint{
  313. height: 0.8rem;
  314. }
  315. }
  316. }
  317. .van-dropdown-menu {
  318. float: right;
  319. width: 50%;
  320. }
  321. .recordList {
  322. padding-left: 4%;
  323. padding-right: 4%;
  324. background-color: #fff;
  325. li {
  326. width: 100%;
  327. padding-top: 4%;
  328. border-bottom: 1px solid #eee;
  329. .upper {
  330. height: 0.56rem;
  331. .entry {
  332. float: left;
  333. font-size: 0.4rem;
  334. color: #414141;
  335. }
  336. .date {
  337. float: right;
  338. font-size: 0.39rem;
  339. color: #646566;
  340. }
  341. }
  342. .below {
  343. margin-top: 0.4rem;
  344. height: 0.7rem;
  345. .procedure {
  346. float: left;
  347. color: #767676;
  348. font-size: 0.38rem;
  349. }
  350. .timeinterval {
  351. float: right;
  352. margin-top: 0.08rem;
  353. color: #969799;
  354. font-size: 0.35rem;
  355. line-height: 0.48rem;
  356. }
  357. .duration {
  358. margin-left: 0.3rem;
  359. float: right;
  360. margin-top: 0.08rem;
  361. color: #969799;
  362. font-size: 0.35rem;
  363. line-height: 0.48rem;
  364. }
  365. }
  366. }
  367. }
  368. </style>