Sfoglia il codice sorgente

项目日志需求

Renxy 1 anno fa
parent
commit
860b9a477d
4 ha cambiato i file con 102 aggiunte e 36 eliminazioni
  1. 29 16
      pages/daily/daily.vue
  2. 58 19
      pages/daily/form.vue
  3. 5 0
      services/daily.js
  4. 10 1
      store/index.js

+ 29 - 16
pages/daily/daily.vue

@@ -2,7 +2,7 @@
   <view class="page">
     <view class="content">
       <view class="head">
-        <span class="title">项目列表</span>
+        <span class="title">项目日志</span>
         <navigator
           url="/pages/daily/form"
           class="self"
@@ -26,14 +26,12 @@
         @scrolltolower="scrollToLower()"
       >
         <view class="item" v-for="item in list" :key="item.log_id">
-          <view class="time">07-12 8:50</view>
-          <view class="box">
-            <view class="title">张三的金科环境项目日志</view>
+          <view class="time">{{ item.c_time | getTime }}</view>
+          <view class="box" @click="() => handlerDetailClick(item.log_id)">
+            <view class="title">{{ item.author_name }}的金科环境项目日志</view>
             <view class="desc">
               <view class="desc-title">日志概述:</view>
-              <view class="desc-content">
-                项目进展顺利项目进展顺利项目进项目进展顺利项目进展顺利项目进
-              </view>
+              <view class="desc-content"> 列表接口没有概述 </view>
             </view>
           </view>
         </view>
@@ -46,6 +44,8 @@
 <script>
 import { queryDaily } from "@/services/daily";
 import mixin from "@/utils/listMixin";
+import moment from "moment";
+import { mapActions } from "vuex";
 
 export default {
   mixins: [mixin],
@@ -53,16 +53,24 @@ export default {
     return {
       searchKeyword: "",
       scrollTop: 0,
-      loadMoreText: '',
+      loadMoreText: "",
       list: [],
     };
   },
+  onLoad() {
+    this.queryProjectList();
+  },
   onShow() {
-    this.pagination.currentPage = 1
-    this.initData()
+    this.pagination.currentPage = 1;
+    this.initData();
+  },
+  filters: {
+    getTime: (time) => {
+      return moment(time).format("YYYY-MM-DD HH:mm");
+    },
   },
   methods: {
-
+    ...mapActions(["queryProjectList"]),
     handelSearchConfirm() {},
     scrollToLower() {
       if (this.projectList.length >= this.pagination.total) {
@@ -72,11 +80,16 @@ export default {
       this.pagination.currentPage++;
       this.initData();
     },
-    async getList(params){
-      let res = await queryDaily(params)
-      this.list = res.data.list
-      return res.data
-    }
+    async getList(params) {
+      let res = await queryDaily(params);
+      this.list = res.data.list;
+      return res.data;
+    },
+    handlerDetailClick(id) {
+      uni.navigateTo({
+        url: `/pages/daily/form?id=${id}`,
+      });
+    },
   },
 };
 </script>

+ 58 - 19
pages/daily/form.vue

@@ -27,27 +27,26 @@
               label="项目名称"
               name="project_name"
               class="formItem"
-              v-if="!project_id"
             >
               <picker
-                @change="selectProjectList"
+                @change="(e) => selectProject(item.key, e)"
                 :range="projectList"
-                :range-key="'name'"
+                range-key="Name"
               >
-                <!-- <view class="select" v-if="formData.industry">
-                {{ `${formData.industry.name}(${formData.industry.code})` }}
-              </view> -->
-                <view class="selectPlaceholder">请选择项目</view>
+                <view class="select" v-if="item.project_name">
+                  {{ item.project_name }}
+                </view>
+                <view class="selectPlaceholder" v-else>请选择项目</view>
               </picker>
             </uni-forms-item>
             <uni-forms-item
               required
               label="日志概述"
-              name="project_name"
+              name="title"
               class="formItem"
             >
               <input
-                v-model="formData.project_name"
+                v-model="item.title"
                 class="input"
                 placeholder="请输入日志概述"
               />
@@ -55,31 +54,41 @@
             <uni-forms-item
               required
               label="日志详情"
-              name="project_name"
+              name="content"
               class="formItem"
             >
-              <textarea class="textarea" placeholder="请输入日志详情" />
+              <textarea
+                v-model="item.content"
+                class="textarea"
+                placeholder="请输入日志详情"
+              />
             </uni-forms-item>
           </view>
         </uni-forms>
         <view class="btn-add" @click="addFormData">+ 新增</view>
       </view>
-      <view class="button">提 交</view>
+      <view class="button" @click="submit">提 交</view>
     </view>
   </view>
 </template>
 
 <script>
+import { createDaily } from "@/services/daily";
+import { mapState } from "vuex";
 export default {
   data() {
     return {
       scrollTop: 0,
-      projectList: [],
-      project_id: '',
+      // projectList: [],
+      project_id: "",
+      log_id: "",
       formData: [
         {
           key: +new Date(),
           project_name: "",
+          code_id: "",
+          title: "",
+          content: "",
         },
       ],
       rules: {
@@ -95,13 +104,27 @@ export default {
     };
   },
   onLoad(options) {
-    this.project_id = options.project_id;
+    if (options.id) {
+      this.initDate();
+    }
+    this.log_id = options.id;
+  },
+  computed: {
+    ...mapState(["projectList"]),
   },
   methods: {
-    selectProjectList(e) {
-      // this.formData.version = e.target.value + 1;
-      // this.formData.code.version = this.formData.version + "";
-      // this.binddata("version", e.target.value);
+    selectProject(key, e) {
+      const select = this.projectList[e.target.value];
+      const idx = this.formData.findIndex((item) => item.key == key);
+      const item = this.formData[idx];
+      const resultData = JSON.parse(JSON.stringify(this.formData));
+      resultData[idx] = {
+        ...item,
+        code_id: select.ID,
+        project_name: select.Name,
+      };
+
+      this.formData = resultData;
     },
     addFormData() {
       this.formData.push({
@@ -113,6 +136,17 @@ export default {
       let index = this.formData.findIndex((item) => item.key == key);
       this.formData.splice(index, 1);
     },
+    async submit() {
+      await createDaily(this.formData);
+      uni.showToast({
+        title: "添加成功",
+      });
+      setTimeout(() => {
+        uni.hideToast();
+        uni.navigateBack();
+      }, 1800);
+    },
+    async initDate() {},
   },
 };
 </script>
@@ -137,6 +171,10 @@ export default {
 .forms {
   padding: 40rpx 34rpx;
   padding-top: 168rpx;
+  .titleContent {
+    display: flex;
+    justify-content: space-between;
+  }
   .title2 {
     font-size: 28rpx;
     font-weight: 400;
@@ -145,6 +183,7 @@ export default {
     padding-bottom: 18rpx;
     border-bottom: 1px solid #e8e8e8;
   }
+
   .title-sub {
     font-size: 28rpx;
     font-weight: 400;

+ 5 - 0
services/daily.js

@@ -1,5 +1,6 @@
 import request from "./request";
 
+//请求个人日志列表
 export async function queryDaily() {
   return await request("v2/approval/log-own/list", "GET");
 }
@@ -9,3 +10,7 @@ export async function queryProjectList() {
 export async function createDaily(data) {
   return await request("v2/approval/log", "POST", data);
 }
+//请个人日志详情
+export async function approvalLogDaily(data) {
+  return await request(`v2/approval/log/${data.id}`, "GET", data);
+}

+ 10 - 1
store/index.js

@@ -2,6 +2,7 @@ import Vue from "vue";
 import Vuex from "vuex";
 import { queryAllWorkType } from "@/services/workload";
 import { queryDep } from "@/services/project";
+import { queryProjectList } from "@/services/daily";
 
 Vue.use(Vuex);
 const store = new Vuex.Store({
@@ -11,6 +12,7 @@ const store = new Vuex.Store({
     allType: {},
     currentProject: {},
     depUserTree: [],
+    projectList: [],
   },
   mutations: {
     setType(state, values) {
@@ -20,7 +22,7 @@ const store = new Vuex.Store({
     setCurrentProject(state, project) {
       state.currentProject = project;
     },
-    setShowSearch(state, value){
+    setShowSearch(state, value) {
       state.showSearch = value;
     },
     setDep(state, dep) {
@@ -47,6 +49,9 @@ const store = new Vuex.Store({
       };
       state.depUserTree = dep.data.list.map((item) => getDepUserTree(item));
     },
+    saveProjectList(state, list) {
+      state.projectList = list;
+    },
   },
   actions: {
     getType: async function ({ commit, state }, value) {
@@ -57,6 +62,10 @@ const store = new Vuex.Store({
       if (state.depUserTree.length > 0) return;
       commit("setDep", await queryDep());
     },
+    queryProjectList: async function ({ commit, state }, value) {
+      const res = await queryProjectList();
+      commit("saveProjectList", res.data?.list);
+    },
   },
 });
 export default store;