john 8 ماه پیش
والد
کامیت
8133484c9d

+ 27 - 0
frontEndMobile/src/api/api.ts

@@ -112,3 +112,30 @@ export const delRecordInfo = async (record_id: string): Promise<User> => {
   const response = await http.delete<User>(`/api/v1/record/${record_id}`)
   return response.data
 }
+
+// 添加批量记录
+export const addMoreRecordInfo = async (params): Promise<User> => {
+  const response = await http.post<User>(`/api/v1/more_record`, params)
+  return response.data
+}
+
+// 修改批量记录
+export const editMoreRecordInfo = async (more_id, params): Promise<User> => {
+  const response = await http.put<User>(`/api/v1/more_record/${more_id}`, params)
+  return response.data
+}
+// 删除批量记录
+export const delMoreRecordInfo = async (more_id): Promise<User> => {
+  const response = await http.delete<User>(`/api/v1/more_record/${more_id}`)
+  return response.data
+}
+// 获取所有批量账单记录
+export const getMoreRecordInfoListByBookiId = async (book_id): Promise<User> => {
+  const response = await http.post<User>(`/api/v1/more_record/list/${book_id}`)
+  return response.data
+}
+// 获取批量记录详情
+export const getMoreRecordInfo = async (more_id): Promise<User> => {
+  const response = await http.get<User>(`/api/v1/more_record/${more_id}`)
+  return response.data
+}

+ 2 - 2
frontEndMobile/src/api/http.ts

@@ -10,8 +10,8 @@ import 'nprogress/nprogress.css'
 // 创建一个 Axios 实例
 const http: AxiosInstance = axios.create({
   // baseURL: window.origin, // 替换为你的 API 基础 URL
-  baseURL: 'http://192.168.2.101:6833', // 替换为你的 API 基础 URL
-  // baseURL: 'http://127.0.0.1:3000', // 替换为你的 API 基础 URL
+  // baseURL: 'http://192.168.2.101:6833', // 替换为你的 API 基础 URL
+  baseURL: 'http://127.0.0.1:3000', // 替换为你的 API 基础 URL
   timeout: 10000, // 请求超时时间
   headers: {
     'Content-Type': 'application/json'

+ 1 - 1
frontEndMobile/src/router/routes/modules/common.ts

@@ -52,7 +52,7 @@ const routes: RouteRecordRaw[] = [
     component: () => import('@/views/MoreLogListPage.vue')
   },
   {
-    path: '/edit_more_log',
+    path: '/edit_more_log/:more_id',
     name: 'edit_more_log',
     meta: {
       title: '编辑批量记录'

+ 0 - 233
frontEndMobile/src/views/AddAccountLogPage copy.vue

@@ -1,233 +0,0 @@
-<template>
-  <div>
-    <van-form @submit="onSubmit">
-      <van-cell-group inset>
-        <!-- 允许输入数字,调起带符号的纯数字键盘 -->
-        <van-field
-          v-model="totalFee"
-          name="totalFee"
-          type="number"
-          label="数字"
-        />
-
-        <div class="types-box">
-          <van-field
-            v-model="typeStr"
-            label="类型"
-            name="typeStr"
-            placeholder="请输入类型名称"
-          />
-          <div class="types-scroll-box" @click.stop>
-            <van-tag
-              type="primary"
-              @click="setTypes(item)"
-              mark
-              v-for="item in typeList"
-              :key="`tag${item.name}`"
-              >{{ item.name }}</van-tag
-            >
-          </div>
-        </div>
-        <br />
-        <van-field name="uploader" label="文件上传">
-          <template #input>
-            <van-uploader
-              :model-value="files"
-              multiple
-              :max-count="5"
-              :after-read="afterRead"
-              :before-delete="filesDelete"
-            />
-          </template>
-        </van-field>
-        <van-field
-          v-model="newTime"
-          is-link
-          readonly
-          name="newTime"
-          label="日历"
-          placeholder="点击选择日期"
-          @click="showCalendar = true"
-        />
-        <van-field
-          v-model="remark"
-          rows="2"
-          autosize
-          name="remark"
-          label="留言"
-          type="textarea"
-          maxlength="50"
-          placeholder="请输入留言"
-          show-word-limit
-        />
-      </van-cell-group>
-      <div style="margin: 16px">
-        <van-button round block type="primary" native-type="submit">
-          提交
-        </van-button>
-      </div>
-    </van-form>
-    <van-calendar
-      :min-date="new Date(2010, 0, 1)"
-      v-model:show="showCalendar"
-      @confirm="onConfirm"
-    />
-    <van-number-keyboard
-      v-model="totalFee"
-      :show="showKeyboard"
-      :maxlength="6"
-      @blur="showKeyboard = false"
-    />
-  </div>
-</template>
-
-<script setup>
-import { watch, ref, onMounted, toRaw } from 'vue'
-import { useRouter, useRoute } from 'vue-router'
-import dayjs from 'dayjs'
-import {
-  uploadFile,
-  addRecord,
-  getAllType,
-  getRecordInfo,
-  putRecordInfo
-} from '@/api/api'
-import { useCommonStore } from '@/store/common'
-const commonStore = useCommonStore()
-
-const router = useRouter()
-const route = useRoute()
-
-const files = ref([])
-const totalFee = ref()
-const showKeyboard = ref(false)
-const remark = ref('')
-const typeStr = ref('')
-const typeList = ref([])
-
-const afterRead = async (file) => {
-  // 将文件上传至服务器
-  let formData = new FormData()
-  formData.append('sampleFile', file.file)
-  const res = await uploadFile(formData)
-  files.value.push({
-    // url: window.origin + `/api/v1/files/${res.file_id}`,
-    url: file.objectUrl,
-    file_id: res.data.file_id,
-    isImage: true
-  })
-}
-
-const newTime = ref(dayjs().format('YYYY-MM-DD'))
-const showCalendar = ref(false)
-
-const onConfirm = (date) => {
-  // newTime.value = `${date.getMonth() + 1}/${date.getDate()}`
-  newTime.value = dayjs(date).format('YYYY-MM-DD')
-  showCalendar.value = false
-}
-const filesDelete = (file) => {
-  files.value = files.value.filter((elm) => elm.url !== file.url)
-}
-
-onMounted(() => {
-  commonStore.initBook()
-  setTimeout(() => {
-    getAllTypeByUser()
-    if (route.params.id) {
-      editPageInit()
-    }
-  }, 300)
-})
-
-async function getAllTypeByUser() {
-  const res = await getAllType(commonStore.bookInfo.id)
-  typeList.value = res.data
-}
-
-const onSubmit = async (values) => {
-  if (route.params.id) {
-    onEditSubmit(values)
-    return
-  }
-  await addRecord({
-    book_id: commonStore.bookInfo.id,
-    time: values.newTime,
-    total_fee: values.totalFee,
-    type: values.typeStr,
-    remark: values.remark,
-    files: files.value.map((elm) => elm.file_id)
-  })
-  router.back()
-}
-
-const onEditSubmit = async (values) => {
-  console.log(159, {
-    book_id: commonStore.bookInfo.id,
-    time: values.newTime,
-    total_fee: values.totalFee,
-    type: values.typeStr,
-    remark: values.remark,
-    files: files.value.map((elm) => elm.file_id)
-  })
-
-  await putRecordInfo(route.params.id, {
-    book_id: commonStore.bookInfo.id,
-    time: values.newTime,
-    total_fee: values.totalFee,
-    type: values.typeStr,
-    remark: values.remark,
-    files: files.value.map((elm) => elm.file_id)
-  })
-
-  router.back()
-}
-
-function setTypes(tag) {
-  typeStr.value = tag.name
-}
-
-async function editPageInit() {
-  const res = await getRecordInfo(route.params.id)
-  totalFee.value = Number(res.data.total_fee)
-  typeStr.value = res.data.type
-  newTime.value = res.data.time
-  remark.value = res.data.remark
-  if (res.data?.files?.length > 0) {
-    files.value = res.data?.files.map((imgStr) => ({
-      url: imgStr,
-      file_id: imgStr.replace(/.*api_files_/, ''),
-      isImage: true
-    }))
-  }
-  /*
-    const files = ref([])
-    const totalFee = ref()
-    const showKeyboard = ref(false)
-    const remark = ref('')
-    const typeStr = ref('')
-    const typeList = ref([])
-  */
-}
-</script>
-
-<style lang="scss" scoped>
-.types-box {
-  .types-scroll-box {
-    padding-left: 100px;
-    text-align: left;
-    padding-top: 10px;
-    padding-bottom: 10px;
-    max-height: 60px;
-    overflow-x: scroll;
-    > * {
-      margin-bottom: 10px;
-      margin-right: 10px;
-    }
-    // display: flex;
-    // overflow-y: scroll;
-    // flex-wrap: nowrap;
-    // margin-left: 24px;
-  }
-}
-</style>

+ 256 - 2
frontEndMobile/src/views/AddMoreLogPage.vue

@@ -1,5 +1,259 @@
 <template>
   <div>
-iii
+    <van-form @submit="onSubmit">
+      <van-cell-group inset>
+        <van-field
+          v-model="name"
+          name="name"
+          label="名称"
+          placeholder="请输入名称"
+        />
+        <van-field
+          v-model="logDay"
+          name="logDay"
+          type="number"
+          label="每月日期"
+          placeholder="请输入每月日期"
+        />
+        <van-field
+          v-model="totalFee"
+          name="totalFee"
+          type="number"
+          label="数字"
+          placeholder="请输入消费金额"
+        />
+
+        <div class="types-box">
+          <van-field
+            v-model="typeStr"
+            label="类型"
+            name="typeStr"
+            placeholder="请输入类型名称"
+          />
+          <div class="types-scroll-box" @click.stop>
+            <van-tag
+              type="primary"
+              @click="setTypes(item)"
+              mark
+              v-for="item in typeList"
+              :key="`tag${item.name}`"
+              >{{ item.name }}</van-tag
+            >
+          </div>
+        </div>
+        <br />
+        <van-field name="uploader" label="文件上传">
+          <template #input>
+            <van-uploader
+              :model-value="files"
+              multiple
+              :max-count="5"
+              :after-read="afterRead"
+              :before-delete="filesDelete"
+            />
+          </template>
+        </van-field>
+        <van-field
+          v-model="newTime"
+          is-link
+          readonly
+          name="newTime"
+          label="时间区间"
+          placeholder="点击选择时间"
+          @click="showCalendar = true"
+        />
+        <van-field
+          v-model="remark"
+          rows="2"
+          autosize
+          name="remark"
+          label="留言"
+          type="textarea"
+          maxlength="50"
+          placeholder="请输入留言"
+          show-word-limit
+        />
+      </van-cell-group>
+      <div style="margin: 16px">
+        <van-button round block type="primary" native-type="submit">
+          提交
+        </van-button>
+      </div>
+    </van-form>
+    <van-calendar
+      type="range"
+      :min-date="new Date(2024, 0, 1)"
+      switch-mode="year-month"
+      v-model:show="showCalendar"
+      @confirm="onConfirm"
+      :default-date="defaultDate"
+    />
+    <van-number-keyboard
+      v-model="totalFee"
+      :show="showKeyboard"
+      :maxlength="6"
+      @blur="showKeyboard = false"
+    />
   </div>
-</template>
+</template>
+
+<script setup>
+import { watch, ref, onMounted, toRaw } from 'vue'
+import { useRouter, useRoute } from 'vue-router'
+import dayjs from 'dayjs'
+import {
+  uploadFile,
+  addMoreRecordInfo,
+  editMoreRecordInfo,
+  getMoreRecordInfo,
+  getAllType,
+  getRecordInfo,
+  putRecordInfo
+} from '@/api/api'
+import { useCommonStore } from '@/store/common'
+const commonStore = useCommonStore()
+
+const router = useRouter()
+const route = useRoute()
+
+const files = ref([])
+const totalFee = ref()
+const showKeyboard = ref(false)
+const remark = ref('')
+const name = ref('')
+const typeStr = ref('')
+const logDay = ref(1)
+const typeList = ref([])
+const defaultDate = ref(null)
+
+const afterRead = async (file) => {
+  // 将文件上传至服务器
+  let formData = new FormData()
+  formData.append('sampleFile', file.file)
+  const res = await uploadFile(formData)
+  files.value.push({
+    // url: window.origin + `/api/v1/files/${res.file_id}`,
+    url: file.objectUrl,
+    file_id: res.data.file_id,
+    isImage: true
+  })
+}
+
+const newTime = ref('')
+const showCalendar = ref(false)
+
+const onConfirm = (values) => {
+  const [start, end] = values
+  newTime.value = `${dayjs(start).format('YYYY-MM-DD')}至${dayjs(end).format(
+    'YYYY-MM-DD'
+  )}`
+  showCalendar.value = false
+}
+const filesDelete = (file) => {
+  files.value = files.value.filter((elm) => elm.url !== file.url)
+}
+
+onMounted(() => {
+  commonStore.initBook()
+  setTimeout(() => {
+    getAllTypeByUser()
+    if (route.params.more_id) {
+      editPageInit()
+    }
+  }, 300)
+})
+
+async function getAllTypeByUser() {
+  const res = await getAllType(commonStore.bookInfo.id)
+  typeList.value = res.data
+}
+
+const onSubmit = async (values) => {
+  if (route.params.more_id) {
+    onEditSubmit(values)
+    return
+  }
+  const [start_time, end_time] = `${values.newTime}`.split('至')
+  await addMoreRecordInfo({
+    book_id: commonStore.bookInfo.id,
+    start_time,
+    end_time,
+    total_fee: values.totalFee,
+    log_day: values.logDay,
+    type: values.typeStr,
+    remark: values.remark,
+    name: values.name,
+    files: files.value.map((elm) => elm.file_id)
+  })
+  router.back()
+}
+
+const onEditSubmit = async (values) => {
+  const [start_time, end_time] = `${values.newTime}`.split('至')
+  await editMoreRecordInfo(route.params.more_id, {
+    book_id: commonStore.bookInfo.id,
+    start_time,
+    end_time,
+    total_fee: values.totalFee,
+    log_day: values.logDay,
+    type: values.typeStr,
+    remark: values.remark,
+    name: values.name,
+    files: files.value.map((elm) => elm.file_id)
+  })
+
+  router.back()
+}
+
+function setTypes(tag) {
+  typeStr.value = tag.name
+}
+
+async function editPageInit() {
+  const res = await getMoreRecordInfo(route.params.more_id)
+  console.log(106, res)
+
+  totalFee.value = Number(res.data.total_fee)
+  typeStr.value = res.data.type
+  remark.value = res.data.remark
+  name.value = res.data.name
+  logDay.value = res.data.log_day
+
+  defaultDate.value = [
+    dayjs(res.data.start_time).toDate(),
+    dayjs(res.data.end_time).toDate()
+  ]
+  newTime.value = `${dayjs(res.data.start_time).format('YYYY-MM-DD')}至${dayjs(
+    res.data.end_time
+  ).format('YYYY-MM-DD')}`
+
+  if (res.data?.files?.length > 0) {
+    files.value = res.data?.files.map((imgStr) => ({
+      url: imgStr,
+      file_id: imgStr.replace(/.*api_files_/, ''),
+      isImage: true
+    }))
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.types-box {
+  .types-scroll-box {
+    padding-left: 100px;
+    text-align: left;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    max-height: 60px;
+    overflow-x: scroll;
+    > * {
+      margin-bottom: 10px;
+      margin-right: 10px;
+    }
+    // display: flex;
+    // overflow-y: scroll;
+    // flex-wrap: nowrap;
+    // margin-left: 24px;
+  }
+}
+</style>

+ 72 - 4
frontEndMobile/src/views/MoreLogListPage.vue

@@ -1,5 +1,18 @@
 <template>
-  <div>list</div>
+  <div class="list-box">
+    <van-swipe-cell v-for="item in pageList">
+      <van-card
+        :price="item.total_fee"
+        :desc="item.remark"
+        :title="item.name"
+        class="goods-card"
+      />
+      <template #right>
+        <van-button square text="编辑" type="primary" @click="edit(item)" class="delete-button" />
+        <van-button square text="删除" type="danger" @click="delRecord(item)" class="delete-button" />
+      </template>
+    </van-swipe-cell>
+  </div>
   <div :offset-bottom="10" position="bottom" class="add-box">
     <div class="add-bg" @click="toAdd">
       <van-icon name="add-o" size="45" />
@@ -8,11 +21,44 @@
 </template>
 
 <script setup>
+import { getMoreRecordInfoListByBookiId, delMoreRecordInfo } from '@/api/api'
+import { useCommonStore } from '@/store/common'
+// import router from '@/router'
+import { useRouter } from 'vue-router';
+import { onMounted, ref } from 'vue'
+const commonStore = useCommonStore()
+const router = useRouter()
+
+const pageList = ref([])
+
 const toAdd = () => {
-  console.log(15)
+  router.push('/add_more_log')
+}
+
+const delRecord = async (item) => {
+  await delMoreRecordInfo(item.more_id)
+  await pageInit()
+}
+
+onMounted(() => {
+  commonStore.initBook()
+  pageInit()
+  setTimeout(() => {
+    pageInit()
+  }, 300)
+})
+
+const pageInit = async () => {
+  const res = await getMoreRecordInfoListByBookiId(commonStore.bookInfo.id)
+  pageList.value = res.data
 }
-</script>
 
+const edit = async (item) => {
+  router.push('/edit_more_log/' + item.more_id);
+
+}
+
+</script>
 
 <style lang="scss" scoped>
 .add-box {
@@ -31,4 +77,26 @@ const toAdd = () => {
     line-height: 1;
   }
 }
-</style>
+.list-box {
+  // background-color: antiquewhite;
+  ::v-deep(.goods-card) {
+    margin: 0;
+    margin-bottom: 12px;
+    padding: 20px 40px;
+    background-color: #fff;
+    .van-card__content {
+      flex-direction: row;
+      text-align: left;
+      min-height: auto;
+      .van-card__bottom {
+        display: flex;
+        align-items: center;
+      }
+    }
+  }
+
+  .delete-button {
+    height: 100%;
+  }
+}
+</style>

+ 36 - 4
node_expores/db/more_record.js

@@ -11,12 +11,14 @@ export async function addMoreRecord({
   update_time = "",
   start_time = "",
   end_time = "",
+  type_id = '',
+  log_day = ''
 }) {
   return new Promise(async (resolve, reject) => {
     try {
       const sql = `
-        INSERT INTO more_record (more_id, name, remark, total_fee, book_id, author_id, create_time, update_time, start_time, end_time)
-        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+        INSERT INTO more_record (more_id, name, remark, total_fee, book_id, author_id, create_time, update_time, start_time, end_time, type_id, log_day)
+        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
       `;
       const values = [
         more_id,
@@ -29,6 +31,8 @@ export async function addMoreRecord({
         update_time,
         start_time,
         end_time,
+        type_id,
+        log_day
       ];
       // 直接接收 execute 返回的内容
       connection.execute(sql, values, (result, fields) => {
@@ -41,7 +45,6 @@ export async function addMoreRecord({
 }
 
 export async function updataMoreRecord(params) {
-  console.log(44, params)
   const {
     more_id = "",
     type_id = "",
@@ -51,11 +54,12 @@ export async function updataMoreRecord(params) {
     update_time = "",
     start_time = "",
     end_time = "",
+    log_day = "",
   } = params;
   return new Promise(async (resolve, reject) => {
     try {
       const sql = `
-        UPDATE more_record SET type_id = ?, name = ?, total_fee = ?, remark = ?, update_time = ?, start_time= ?, end_time = ? WHERE more_id = ?;
+        UPDATE more_record SET type_id = ?, name = ?, total_fee = ?, remark = ?, update_time = ?, start_time= ?, end_time = ? , log_day = ? WHERE more_id = ?;
       `;
       const values = [
         type_id,
@@ -65,6 +69,7 @@ export async function updataMoreRecord(params) {
         update_time,
         start_time,
         end_time,
+        log_day,
         more_id,
       ];
       // 执行更新语句
@@ -157,3 +162,30 @@ export function getMoreRecordsInfoByMonth(time, book_id) {
     );
   });
 }
+
+
+// 查询所有账本信息
+export function getMoreRecordList(book_id, author_id) {
+  return new Promise((resolve, reject) => {
+    connection.query(`SELECT * FROM more_record WHERE book_id = ? AND author_id = ?`, [book_id, author_id], (err, rows) => {
+      if (err) {
+        resolve(false); // 如果存在记录,则返回 true,否则返回 false
+      } else {
+        resolve(rows); // 如果存在记录,则返回 true,否则返回 false
+      }
+    });
+  });
+}
+
+// 查询账本信息
+export function getMoreRecordByMoreId(more_id, author_id) {
+  return new Promise((resolve, reject) => {
+    connection.query(`SELECT * FROM more_record WHERE more_id = ? AND author_id = ?`, [more_id, author_id], (err, rows) => {
+      if (err) {
+        resolve(false); // 如果存在记录,则返回 true,否则返回 false
+      } else {
+        resolve(rows.length > 0 ?  rows[0]: false); // 如果存在记录,则返回 true,否则返回 false
+      }
+    });
+  });
+}

+ 4 - 0
node_expores/db/update.sql

@@ -27,3 +27,7 @@ ALTER TABLE cashbook.more_record ADD end_time TIMESTAMP NOT NULL;
 
 ALTER TABLE cashbook.more_record ADD type_id INT NULL;
 
+
+ALTER TABLE cashbook.more_record ADD log_day INT NOT NULL;
+
+

+ 6 - 18
node_expores/router/record/index.js

@@ -16,8 +16,7 @@ import {
   delByRecordId,
 } from "#db";
 import { shanghaiTime, shanghaiTimeFormat } from "#utils";
-import dayjs from "dayjs";
-import { getTypeInfoFn,setFilesById,setFilesByRecord } from './utils.js'
+import { getTypeInfoFn,setFilesById,setFilesByRecord, getFileUrl } from './utils.js'
 
 // middleware that is specific to this router
 router.use(function timeLog(req, res, next) {
@@ -80,18 +79,7 @@ router.get("/:record_id", async function (req, res) {
   } else {
     recordInfo.type = "";
   }
-  function getFileUrl(elm) {
-    // 获取请求的来源域名
-    const host = req.headers["host"]; // 主机名 + 端口
-    const origin = req.headers["referer"]; // 请求的来源域(适用于跨域)
-    if (`${origin}`.indexOf("3032") > -1 || `${host}`.indexOf("3000") > -1) {
-      return "http://localhost:3000" + `/api_files_${elm.file_id}`;
-    }
-    if (`${origin}`.indexOf("zs_interval") > -1) {
-      return `api_files_${elm.file_id}`;
-    }
-    return `${origin}api_files_${elm.file_id}`;
-  }
+
   res.json({
     code: 200,
     data: {
@@ -100,7 +88,7 @@ router.get("/:record_id", async function (req, res) {
       time: shanghaiTimeFormat(recordInfo.time, "YYYY-MM-DD"),
       create_time: shanghaiTimeFormat(recordInfo.create_time),
       update_time: shanghaiTimeFormat(recordInfo.update_time),
-      files: files.map((elm) => getFileUrl(elm)),
+      files: files.map((elm) => getFileUrl(req, elm)),
     },
   });
 });
@@ -118,16 +106,16 @@ router.put("/:record_id", async function (req, res) {
     userInfo = {},
   } = req.body;
 
-  
+
   // 更新附件信息
   await setFilesById({
     record_id,
     userInfo,
-    book_id, 
+    book_id,
     files
   })
 
-  
+
   // 更新类型
   const typeId = await getTypeInfoFn({
     userInfo,

+ 91 - 23
node_expores/router/record/more.js

@@ -2,12 +2,24 @@ import express from "express";
 
 const router = express.Router();
 import { v4 as uuidv4 } from "uuid";
-import { shanghaiTime,shanghaiTimeFormat } from "#utils";
-import { addMoreRecord,updataMoreRecord,delMoreRecord,record_update,getRecordInfoById,getFileByRecordId,delFileByRecordId,delByRecordId } from "#db";
-import { getTypeInfoFn,setFilesById,setFilesByRecord } from "./utils.js";
+import { shanghaiTime, shanghaiTimeFormat } from "#utils";
+import {
+  addMoreRecord,
+  updataMoreRecord,
+  delMoreRecord,
+  record_update,
+  getRecordInfoById,
+  getFileByRecordId,
+  delFileByRecordId,
+  delByRecordId,
+  getMoreRecordList,
+  getMoreRecordByMoreId,
+  getTypesById,
+} from "#db";
+import { getTypeInfoFn, setFilesById, setFilesByRecord, getFileUrl } from "./utils.js";
 
 // 添加多个账单记录
-router.post("/",async function ( req,res ) {
+router.post("/", async function (req, res) {
   const {
     name = "",
     remark = "",
@@ -15,14 +27,15 @@ router.post("/",async function ( req,res ) {
     start_time = "",
     end_time = "",
     total_fee = 0,
+    log_day = '',
     type = "",
     files = [],
     userInfo = {},
   } = req.body;
 
-  const more_id = `M_${ uuidv4() }`;
+  const more_id = `M_${uuidv4()}`;
 
-  const type_id = await getTypeInfoFn({userInfo,book_id,type});
+  const type_id = await getTypeInfoFn({ userInfo, book_id, type });
 
   await addMoreRecord({
     more_id,
@@ -32,9 +45,9 @@ router.post("/",async function ( req,res ) {
     total_fee,
     name,
     remark,
-
-    start_time: shanghaiTimeFormat(start_time),
-    end_time: shanghaiTimeFormat(end_time),
+    log_day,
+    start_time: shanghaiTimeFormat(start_time, "YYYY-MM-DD") + " 00:00:00",
+    end_time: shanghaiTimeFormat(end_time, "YYYY-MM-DD") + " 23:59:59",
 
     create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
     update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
@@ -54,9 +67,9 @@ router.post("/",async function ( req,res ) {
     },
   });
 });
-  
+
 // 编辑多个账单记录
-router.put("/:more_id",async function ( req,res ) {
+router.put("/:more_id", async function (req, res) {
   const more_id = req.params.more_id; // 获取 fileId 参数
   const {
     name = "",
@@ -66,6 +79,7 @@ router.put("/:more_id",async function ( req,res ) {
     end_time = "",
     total_fee = 0,
     type = "",
+    log_day = "",
     files = [],
     userInfo = {},
   } = req.body;
@@ -75,8 +89,8 @@ router.put("/:more_id",async function ( req,res ) {
     record_id: more_id,
     userInfo,
     book_id,
-    files
-  })
+    files,
+  });
 
   // 更新类型
   const typeId = await getTypeInfoFn({
@@ -84,8 +98,7 @@ router.put("/:more_id",async function ( req,res ) {
     book_id,
     type,
   });
-   
-  
+
   // 更新数据内容
   const recordInfo = await updataMoreRecord({
     name,
@@ -94,11 +107,12 @@ router.put("/:more_id",async function ( req,res ) {
     author_id: userInfo.user_id,
     total_fee: total_fee,
     remark: remark,
-    start_time: start_time,
-    end_time: end_time,
+    log_day,
+    start_time: shanghaiTimeFormat(start_time, "YYYY-MM-DD") + " 00:00:00",
+    end_time: shanghaiTimeFormat(end_time, "YYYY-MM-DD") + " 23:59:59",
     update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
   });
-  
+
   res.json({
     code: 200,
     data: recordInfo ? "" : "更新失败",
@@ -106,7 +120,7 @@ router.put("/:more_id",async function ( req,res ) {
 });
 
 // 删除单个账单记录
-router.delete("/:more_id",async function ( req,res ) {
+router.delete("/:more_id", async function (req, res) {
   const more_id = req.params.more_id; // 获取 fileId 参数
   const { userInfo = {} } = req.body;
   // const recordInfo = await getRecordInfoById(more_id);
@@ -115,9 +129,7 @@ router.delete("/:more_id",async function ( req,res ) {
   const getAllFiles = await getFileByRecordId(more_id);
   if (getAllFiles.length) {
     await Promise.all(
-      getAllFiles.map((elm) =>
-        delFileByRecordId(more_id, elm.file_id)
-      )
+      getAllFiles.map((elm) => delFileByRecordId(more_id, elm.file_id))
     );
   }
   // 删除record数据
@@ -125,7 +137,63 @@ router.delete("/:more_id",async function ( req,res ) {
 
   res.json({
     code: 200,
-    data: '',
+    data: "",
+  });
+});
+
+// 获取所有批量账单记录
+router.post("/list/:book_id", async function (req, res) {
+  const book_id = req.params.book_id; // 获取 fileId 参数
+  const { userInfo = {} } = req.body;
+  const moreRecordList = await getMoreRecordList(book_id, userInfo.user_id);
+
+  res.json({
+    code: 200,
+    data: moreRecordList.map((elm) => ({
+      name: elm.name,
+      more_id: elm.more_id,
+      remark: elm.remark,
+      total_fee: elm.total_fee,
+      create_time: shanghaiTimeFormat(elm.create_time),
+      start_time: shanghaiTimeFormat(elm.start_time),
+      end_time: shanghaiTimeFormat(elm.end_time),
+    })),
+  });
+});
+
+// 获取所有批量账单记录
+router.get("/:more_id", async function (req, res) {
+  const more_id = req.params.more_id; // 获取 fileId 参数
+  const { userInfo = {} } = req.body;
+  const files = await getFileByRecordId(more_id);
+  const moreRecordInfo = await getMoreRecordByMoreId(more_id, userInfo.user_id);
+
+  const typesRes = await getTypesById({
+    typeId: moreRecordInfo.type_id,
+    book_id: moreRecordInfo.book_id,
+    author_id: moreRecordInfo.author_id,
+  });
+  if (typesRes) {
+    moreRecordInfo.type = typesRes.name;
+  } else {
+    moreRecordInfo.type = "";
+  }
+
+
+  res.json({
+    code: 200,
+    data: {
+      type: moreRecordInfo.type,
+      name: moreRecordInfo.name,
+      more_id: moreRecordInfo.more_id,
+      remark: moreRecordInfo.remark,
+      total_fee: moreRecordInfo.total_fee,
+      log_day: moreRecordInfo.log_day,
+      create_time: shanghaiTimeFormat(moreRecordInfo.create_time),
+      start_time: shanghaiTimeFormat(moreRecordInfo.start_time),
+      end_time: shanghaiTimeFormat(moreRecordInfo.end_time),
+      files: files.map((elm) => getFileUrl(req, elm)),
+    },
   });
 });
 

+ 14 - 0
node_expores/router/record/utils.js

@@ -101,4 +101,18 @@ export async function setFilesById(params) {
       )
     );
   }
+}
+
+
+export function getFileUrl(req,elm) {
+  // 获取请求的来源域名
+  const host = req.headers["host"]; // 主机名 + 端口
+  const origin = req.headers["referer"]; // 请求的来源域(适用于跨域)
+  if (`${origin}`.indexOf("3032") > -1 || `${host}`.indexOf("3000") > -1) {
+    return "http://localhost:3000" + `/api_files_${elm.file_id}`;
+  }
+  if (`${origin}`.indexOf("zs_interval") > -1) {
+    return `api_files_${elm.file_id}`;
+  }
+  return `${origin}api_files_${elm.file_id}`;
 }