ChatGPT API连续对话的原理是每次都发送完整的历史记录给服务器

@Ta 03-09 10:18发布,03-09 10:28修改 2256点击

image.png(79.12 KB)

所以实际上可以伪造对话过程,它也能据此给出最终的“正确答案”。

image.png(112.96 KB)

回复列表(16)
  • @Ta / 03-09 10:21 / /

    这种设计会导致后续对话消耗越来越多的token,API计费成倍增长,并且在多轮对话后更容易达到字数限制。

  • @Ta / 03-09 10:28 / /

    但是网页好像使用了不同的方法,有一个conversation_id,并且没有发送历史记录。
    image.png(86.35 KB)

  • @Ta / 03-09 11:41 / /

    所以有些大佬(提供套壳的网站的),会在对话几轮后,全部发给chatgpt,让它总结(借此缩短字数,且上下文也还好)

  • @Ta / 03-09 11:56 / /

    API也是传一个会话ID,我是从这个库 https://github.com/transitive-bullshit/chatgpt-api 猜测的,因为这个库需要上下文对话则传parentMessageId, 根据 https://www.v2ex.com/t/921809 贴,即使使用parentMessageId也会导致token倍增,所以如果要对接api则需要为token设置上限和定时清理。
    红米K30 Pro(变焦版)

  • @Ta / 03-09 12:52 / /

    @老虎会游泳,ChatGPT API 也会根据输入消耗 token?还以为只会根据输出扣款呢。。

  • @Ta / 03-10 08:23 / /

    @rkonfj,能不能debug打印一下每次对话消耗的令牌

  • @Ta / 03-10 08:41 / /

    呃,好像没有每次的,那个API是总令牌数量😅

  • @Ta / 03-10 08:36 / /
    @老虎会游泳,以后虎60的chatgpt服务会不会下架。有时候确实很需要
  • @Ta / 03-10 08:38 / /

    @张小强,如果成本可以覆盖,我应该会继续运行。如果我不运行,也会允许其他人运行。

  • @Ta / 03-10 08:39 / /
    {
       "id":"chatcmpl-abc123",
       "object":"chat.completion",
       "created":1677858242,
       "model":"gpt-3.5-turbo-0301",
       "usage":{
          "prompt_tokens":13,
          "completion_tokens":7,
          "total_tokens":20
       },
       "choices":[
          {
             "message":{
                "role":"assistant",
                "content":"\n\nThis is a test!"
             },
             "finish_reason":"stop",
             "index":0
          }
       ]
    }
    

    @老虎会游泳,这个usage对象应该是当次调用消耗的tokens吧?

  • @Ta / 03-10 08:40 / /

    @rkonfj,嗯,应该是,可以打印一下。

  • @Ta / 03-10 08:40 / /

    把三个数值都打印了吧,13/7/20

  • @Ta / 03-10 08:44 / /
  • @Ta / 03-10 09:09 / /
    @ChatGPT 
    优化下代码
    <template>
      <!--{{data.data.data}}-->
      <!--  编辑弹出窗-->
      <el-dialog top="0.5vh" :show-close="false"
                 @close="tablexydata.x='',tablexydata.y='',diglogselect.value= [ 'xuhao', 'model', 'shu', 'if', 'jinprice', 'dian', 'tuiprice', 'notes', 'caozuo','select' ]"
                 :destroy-on-close="true"
                 v-model="dialog.if"
                 :title="dialog.title" width="80%" draggable>
        <div>


          <!--      {{ printdata }}-->
          <!--            {{ diglogselect }}-->
          <div>
            <el-select
                v-model="diglogselect.value"
                multiple
                collapse-tags
                placeholder="选择显示列"
                style="float: left;margin-bottom: 5px"
                @change="tabledolayout"
            >
              <el-option
                  v-for="item in diglogselect.select"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
              />
            </el-select>
            <el-button @click="diglogselect.value = [ 'model', 'shu',  'jinprice']"
                       style="float: left;margin-bottom: 5px;margin-left: 10px">退货
            </el-button>
            <el-button @click="diglogselect.value = [ 'model', 'shu', 'tuiprice']" style="float: left;margin-bottom: 5px">
              对账
            </el-button>
            <el-button
                @click="diglogselect.value = ['xuhao', 'model', 'shu', 'if', 'jinprice', 'dian', 'tuiprice', 'notes', 'caozuo','select']"
                style="float: left;margin-bottom: 5px">全选
            </el-button>

            <div style="float: right">已选数据:{{ printdata.select.length }}</div>
          </div>

          <!--      {{excelhe}}-->

          <vue3-json-excel
              style="float: left; padding-left: 10px; margin-bottom: 5px"
              :json-data="printdata.select"
              :fields="excel.fields"
              :footer=excelhe
              :header=dialog.title
              :name=dialog.title
          >
            <el-button size="small" type="info">导出所选</el-button>
          </vue3-json-excel>

          <!--        {{printdata.select}}-->
          <el-table
              ref="dialogtable"
              :height="tableHeight-80"
              border
              :data="data.data.data[dialog.index].nei"
              @selection-change="printselect"
          >

            <el-table-column v-if="diglogselect.value.indexOf('select') != -1" type="selection"
                             min-width="40"></el-table-column>
            <el-table-column v-if="diglogselect.value.indexOf('xuhao') != -1" label="序号" width="60px">
              <template #="props">
                <span>{{ props.$index + 1 }}&nbsp;</span>
              </template>
            </el-table-column>
            <el-table-column v-if="diglogselect.value.indexOf('model') != -1" label="型号" width="320px">
              <template #="props">
                <div style="width: 100%;">


                  <input class="el-input__inner"
                         v-model.lazy="props.row.model" placeholder="型号"/>

                  <!--              <div style="width: 100%" v-else>{{ props.row.model }}&nbsp;</div>-->
                </div>
              </template>
            </el-table-column>

            <el-table-column v-if="diglogselect.value.indexOf('shu') != -1" label="数量" min-width="80px">
              <template #="props">
                <div style="width: 100%;">
                  <input class="el-input__inner"
                         v-model.lazy="props.row.shu" placeholder="数量"/>
                  <!--              <div style="width: 100%" v-else>{{ props.row.shu }}&nbsp;</div>-->
                </div>
              </template>
            </el-table-column>

            <el-table-column v-if="diglogselect.value.indexOf('if') != -1" label="退/换" min-width="100px">
              <template #="props">
                <div style="width: 100%;"
                     @click="props.row.index=props.$index, tablexydata.x = props.$index, tablexydata.y = props.column.label">
                  <el-select ref="inputref"
                             v-if="  props.row.index == tablexydata.x && props.column.label == tablexydata.y "
                             @change="tuiand" v-model.lazy="props.row.if" class="m-2" placeholder="退/换">
                    <el-option
                        v-for="item in ['退货','换货','其他']"
                        :key="item"
                        :label="item"
                        :value="item"
                    />
                  </el-select>
                  <div style="width: 100%" v-else>{{ props.row.if }}&nbsp;</div>
                </div>
              </template>
            </el-table-column>

            <el-table-column v-if="diglogselect.value.indexOf('jinprice') != -1" label="进价" min-width="90px">
              <template #="props">
                <div style="width: 100%;">
                  <input class="el-input__inner"
                         :x="props.row.if == '换货'?props.row.jinprice = 0:''"
                         :disabled="props.row.if == '换货'?'disabled':false"
                         v-model.lazy="props.row.jinprice" placeholder="进价"/>
                  <!--              <div style="width: 100%;" v-else>{{ props.row.jinprice }}&nbsp;</div>-->
                </div>
              </template>
            </el-table-column>

            <el-table-column v-if="diglogselect.value.indexOf('dian') != -1" label="门店" min-width="100px">
              <template #="props">
                <div style="width: 100%;"
                     @click="props.row.index=props.$index, tablexydata.x = props.$index, tablexydata.y = props.column.label">
                  <el-select ref="inputref"
                             v-if="  props.row.index == tablexydata.x && props.column.label == tablexydata.y "
                             v-model.lazy="props.row.dian" class="m-2" placeholder="门店">
                    <el-option
                        v-for="item in dianname.date"
                        :key="item.id"
                        :label="item.dianname"
                        :value="item.dianname"
                    />
                  </el-select>
                  <div style="width: 100%;" v-else>{{ props.row.dian }}&nbsp;</div>
                </div>
              </template>
            </el-table-column>

            <el-table-column v-if="diglogselect.value.indexOf('tuiprice') != -1" label="退价" min-width="90px">
              <template #="props">
                <div style="width: 100%;">
                  <input class="el-input__inner" :x="props.row.if == '换货'?props.row.tuiprice = 0:''"
                         :disabled="props.row.if == '换货'?'disabled':false"
                         v-model.lazy="props.row.tuiprice" placeholder="退价"/>
                  <!--              <div style="width: 100%;" v-else>{{ props.row.tuiprice }}&nbsp;</div>-->
                </div>
              </template>
            </el-table-column>


            <el-table-column v-if="diglogselect.value.indexOf('notes') != -1" label="备注">
              <template #="props">
                <div style="width: 100%;">
                  <input class="el-input__inner"
                         v-model.lazy="props.row.notes" placeholder="备注"/>
                  <!--              <div style="width: 100%;" v-else>{{ props.row.notes }}&nbsp;</div>-->
                </div>
              </template>
            </el-table-column>

            <el-table-column v-if="diglogselect.value.indexOf('caozuo') != -1" label="操作">
              <template #="props">

                <el-button type="error" @click="tabledelete(props.$index)">删除</el-button>

              </template>
            </el-table-column>

          </el-table>
        </div>
        <template #footer>
          <span style="float: left">
                <el-input
                    style="float: left; width:80%"
                    v-model="addshu"
                    class="input-with-select"
                >
                        <template #prepend>


                <el-select v-model.lazy="tableadddata.data.if" placeholder="退/换" style="width: 80px;padding-right: 40px">
                  <el-option
                      v-for="item in ['退货','换货','其他']"
                      :key="item"
                      :label="item"
                      :value="item"
                  />
                </el-select>

                                      <el-select v-model.lazy="tableadddata.data.dian" placeholder="门店"
                                                 style="width: 80px;">
                  <el-option
                      v-for="item in dianname.date"
                      :key="item.id"
                      :label="item.dianname"
                      :value="item.dianname"
                  />
                </el-select>

          </template>
          <template #append>
            <el-button @click="tableadd">添加</el-button>
          </template>
        </el-input>
          </span>


          <span style="float: left; margin-left: 5px">
                <el-button type="primary" @click="dialogdayincaozuo = true" plain>操作选项</el-button>
          </span>

          <el-dialog v-model="dialogdayincaozuo" title="操作" append-to-body>

            <el-form
                ref="ruleFormRef"
                :rules="rules"
                label-width="120px"
                class="demo-ruleForm"
                status-icon
                :model="printdata"
            >

              <el-form-item label="要打印的选项" prop="xuanxiang">

                <el-select multiple collapse-tags v-model.lazy="printdata.xuanxiang"
                           placeholder="打印项"
                           clearable>
                  <el-option
                      v-for="item in printdata.printxuanxiang"
                      :key="item.value"
                      :label="item.lable"
                      :value="item.value"
                  />
                </el-select>
              </el-form-item>


              <el-form-item label="快选打印选项">
                <el-select v-model.lazy="printdata.printkuai" placeholder="快选" @change="printselectkuai" clearable>

                  <el-option
                      v-for="item in printdata.printkuaixuanselect"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                  />
                </el-select>
              </el-form-item>

              <el-form-item label="要打印的门店">

                <el-select v-model.lazy="printdata.dian" placeholder="门店" @change="printselecctdian"
                           clearable>
                  <el-option
                      v-for="item in caozuodianname.date"
                      :key="item.dianname"
                      :label="item.dianname"
                      :value="item.dianname"
                  />
                </el-select>
              </el-form-item>
              <el-form-item label="要打印的类型" prop="leixing">
                <el-select v-model.lazy="printdata.leixing" placeholder="类型" @change="printselecctdian">
                  <el-option
                      v-for="item in ['全部','退货','换货','其他']"
                      :key="item"
                      :label="item"
                      :value="item"
                  />
                </el-select>

              </el-form-item>


              <el-form-item label="打印所选对账单">

                <el-button style="margin-left: 55px"
                           @click="printselecctdianprice,printtable()">
                  打印对账小票
                </el-button>

              </el-form-item>
              <el-form-item label="打印退货收据">

                <el-button style="margin-left: 55px" type="warning" @click="printselecctdianprice">打印收款小票</el-button>
              </el-form-item>


            </el-form>

          </el-dialog>


          <span class="dialog-footer">
            <el-button @click="offdialog">关闭</el-button>
            <el-button type="primary" @click="setData([data.data.data[dialog.index]]), dialog.if = false,  getData()">
              提交
            </el-button>
          </span>
        </template>


        <!--    {{ printdata }}-->
      </el-dialog>

      <!--导航栏-->
      <div style="padding-left: 25px; padding-right: 25px; padding-top: 25px">


        <el-tabs style="padding-left: 5px" v-model="request.state">
          <el-tab-pane label="未发走" name="1"></el-tab-pane>
          <el-tab-pane label="未结单" name="2"></el-tab-pane>
          <el-tab-pane label="已完成" name="3"></el-tab-pane>
          <el-tab-pane label="全部" name="66"></el-tab-pane>
        </el-tabs>

        <!--    订单列表-->
        <!--    {{data.data.data}}-->
        <el-table ref="tableRef" @selection-change="select" show-overflow-tooltip="true" :data="data.data.data" stripe
                  table-layout="auto" style="width: 100%; " :height="tableHeight">
          <el-table-column type="selection" width="55"/>

          <el-table-column

              header-align="center"
              align="center"
              type="expand"
          >
            <template #="props">
              <el-table show-overflow-tooltip="true" row-class-name="warning-row" :data="props.row.nei">
                <el-table-column
                    header-align="center"
                    align="center"
                    label="型号"
                    prop="model"
                    show-overflow-tooltip
                />

                <el-table-column
                    header-align="center"
                    align="center"
                    prop="shu"
                    label="数量"
                >
                  <!--              <template #>-->
                  <!--               {{props.row.nei.$index}}-->
                  <!--              </template>-->
                </el-table-column>
                <el-table-column
                    header-align="center"
                    align="center"
                    prop="jinprice"
                    label="进价"
                />
                <el-table-column
                    header-align="center"
                    align="center"
                    prop="tuiprice"
                    label="退价"
                />
                <el-table-column
                    header-align="center"
                    align="center"
                    label="单个差价"
                    :formatter="priceDifference"
                />
                <el-table-column
                    header-align="center"
                    align="center"
                    label="退/换"
                    prop="if"
                />
                <el-table-column
                    header-align="center"
                    align="center"
                    prop="dian"
                    label="门店"
                />
                <el-table-column
                    header-align="center"
                    align="center"
                    prop="notes"
                    label="备注"
                />

              </el-table>
            </template>
          </el-table-column>

          <el-table-column
              sortable
              header-align="center"
              align="center"
              prop="create_time"
              label="创建时间"
          >
          </el-table-column>


          <el-table-column label="详情">
            <template #="prop">
              {{ tableProcessing(prop.row.nei) }}
            </template>
          </el-table-column>

          <el-table-column label="状态">
            <template #="props">
              <el-tag :type="tablestatus(props.row.status).type" disable-transitions>{{
                  tablestatus(props.row.status).name
                }}
              </el-tag>
            </template>
          </el-table-column>

          <el-table-column label="操作">
            <template #="props">
              <el-button type="primary"
                         @click="dialog.index = props.$index,printdata.create_time=props.row.create_time, dialog.title=props.row.create_time+'(修改数据)', dialog.if=true">
                编辑
              </el-button>


            </template>
          </el-table-column>
        </el-table>

        <el-pagination v-if="browserWidth>=800" style="padding-top: 15px; padding-bottom: 15px" background
                       layout=" sizes,prev, pager, next,jumper"
                       v-model:page-size="request.page.list_rows" :page-sizes="pagesizes"
                       v-model:current-page="request.page.page" :page-size="request.page.list_rows"
                       :total="data.data.total"
        />
        <el-pagination v-if="browserWidth<800" style="padding-top: 15px; padding-bottom: 15px"
                       layout=" prev, pager, next,jumper"
                       v-model:page-size="request.page.list_rows" :page-sizes="pagesizes"
                       v-model:current-page="request.page.page" :page-size="request.page.list_rows"
                       :total="data.data.total"
                       pager-count="5"
                       small/>
        <!--    批量操作选项-->
        <div style="float: left">
          <el-cascader :options="tableoperation.lable" @change="cascaderchang" v-model="tableoperation.value" clearable/>
          <el-button @click="add()" style="margin-left: 15px" type="success" plain>添加</el-button>
        </div>


      </div>
    </template>
    <script>
    export default {
      name: 'Demo'
    }
    </script>
    <script setup>
    import {onMounted, reactive, ref, watch, nextTick} from "vue";
    import axios from "axios";
    import common from "@/common/common.js";
    import {ElMessage, ElMessageBox, FormInstance, FormRules} from "element-plus";
    //表格添加默认数据
    const tableadddata = reactive({
      data: {
        model: '',
        shu: 1,
        jinprice: '',
        tuiprice: '',
        if: '退货',
        dian: '总店',
        notes: '',
      }
    });

    const excel = reactive({
      fields: {
        "型号": "model",
        "数量": "shu",
        "进货价格": "jinprice",
        "退货价格": "tuiprice",
        "退货/换货": "if",
        "门店": "dian",
        "备注": "notes"
      }
    });

    //打印所需数据
    const printdata = reactive({
      create_time: '',
      dian: '',
      leixing: '全部',
      select: [],
      xuanxiang: '',
      printxuanxiang: [
        {
          lable: '型号',
          value: 'model'
        }, {
          lable: '退/换',
          value: 'if'
        },
        {
          lable: '数量',
          value: 'shu'
        },
        {
          lable: '门店',
          value: 'dian'
        },
        {
          lable: '进价',
          value: 'jinprice'
        },
        {
          lable: '退价',
          value: 'tuiprice'
        },
        {
          lable: '差价',
          value: 'chaprice'
        },
      ],
      printkuai: '',
      printkuaixuanselect: [
        {
          label: '全选',
          value: 'quan'
        },
        {
          label: '发货',
          value: 'fa'
        },
      ]
    })

    //操作dialog
    const dialogdayincaozuo = ref(false);

    //添加个数
    const addshu = ref(1);
    //dialog table ref
    const dialogtable = ref();


    //表单验证
    const ruleFormRef = ref(null);
    const rules = reactive({
      leixing: [
        {
          required: true,
          message: '打印类型为必选项',
          trigger: "blur"
        },
      ],
      xuanxiang: [
        {
          required: true,
          message: '打印选项为必选项',
          trigger: "blur"
        },
      ],

    })

    //dialogtable列选择
    const diglogselect = reactive({
      value: ['select', "xuhao", "model", "shu", "if", "jinprice", "dian", "tuiprice", "notes", "caozuo"],
      select: [
        {
          value: 'select',
          label: '多选',
        },
        {
          value: 'xuhao',
          label: '序号',
        },
        {
          value: 'model',
          label: '型号'
        },
        {
          value: 'shu',
          label: '数量'
        },
        {
          value: 'if',
          label: '退/换'
        },
        {
          value: 'jinprice',
          label: '进价'
        },
        {
          value: 'dian',
          label: '门店'
        },
        {
          value: 'tuiprice',
          label: '退价'
        },
        {
          value: 'notes',
          label: '备注'
        },
        {
          value: 'caozuo',
          label: '操作'
        }

      ]
    })
    //门店名称
    const dianname = reactive({
      date: {}
    });

    //操作选项专用店名称(添加全部选项)
    const caozuodianname = reactive(
        {
          date: {}
        }
    );


    //dialog数据
    const dialog = reactive({
      if: false,
      title: '修改数据',
      index: '',
      data: {}
    })

    //页面实时宽度
    const browserWidth = ref();
    //表格高度
    const tableHeight = ref();
    //定义表格
    const tableRef = ref(null);
    //表格操作选项
    const tableoperation = reactive({
      value: {},
      lable: [
        {
          value: 'delete',
          label: '删除'
        },
        {
          value: 'status',
          label: '状态',
          children: [
            {
              value: 1,
              label: '未发走'
            },
            {
              value: 2,
              label: '未结单'
            },
            {
              value: 3,
              label: '已完成'
            }
          ]
        }
      ]
    })
    //分页段位
    const pagesizes = reactive([

          20,
          50,
          100,
          300,
          500
        ]
    );

    // 请求数据
    const request = reactive({
      state: "1",
      page: {
        list_rows: 20,
        page: 1
      }
    });
    //数据
    const data = reactive({
      data: ''
    });

    //多选数据
    const tableselect = reactive({
      value: []
    });

    //table x y值 判断是否显示输入框
    const tablexydata = reactive({
      x: '',
      y: ''
    })

    const select = (x) => {
      tableselect.value = x
    }


    //打印选择实现方法
    const printselect = (v) => {
      printdata.select = v
    }

    //打印数据门店快速选择实现方法
    const printselecctdian = () => {
      //清空已选数据
      dialogtable.value.clearSelection();
      for (const neiKey in data.data.data[dialog.index].nei) {
        if ((data.data.data[dialog.index].nei[neiKey].dian == printdata.dian || printdata.dian == '全部') && (data.data.data[dialog.index].nei[neiKey].if == printdata.leixing || printdata.leixing == '全部')) {
          dialogtable.value.toggleRowSelection(data.data.data[dialog.index].nei[neiKey])
        }
      }

    }

    //打印项快速选择
    const printselectkuai = () => {
      if (printdata.printkuai == 'quan') {
        // console.log(printdata.printkuai)
        printdata.xuanxiang = ["model", "if", "shu", "dian", "jinprice", "tuiprice", "chaprice"];
      } else if (printdata.printkuai == 'fa') {
        printdata.xuanxiang = ["model", "if", "shu", "dian", "jinprice"];
      } else {
        printdata.xuanxiang = [];
      }
    }


    //打印收款
    const printselecctdianprice = () => {

      if (printdata.select.length <= 0) {
        alert('请选择需要打印的数据!');
        return;
      }

      setData([data.data.data[dialog.index]]);
      setTimeout(function () {
        axios.post(common.url + 'api/batchpost', printdata).then(res => {
          console.log(res.data)
        }).catch(error => {
          console.log(error)
        })
      }, 500)
    }
    //获取门店信息
    var getDian = () => {
      axios.get(common.url + 'api/getuser').then(res => {
        dianname.date = res.data
        var add = {dianname: '全部', name: '测试专用', id: null};
        const x = JSON.parse(JSON.stringify(res.data))
        x.push(add)
        caozuodianname.date = x;
      }).catch(error => {
        console.log(error)
      })
    }


    //获取订单数据
    var getData = () => {
      axios.post(common.url + 'api/xcgetdata', request).then(res => {
        data.data = res.data;
      }).catch(error => {
        console.log(error)
      })
    }

    var offdialog = () => {
      ElMessageBox.confirm('数据还没有保存!离开此页面编辑数据将丢失')
          .then(() => {
            //重新获取数据
            getData();
            dialog.if = false;
          })
          .catch(() => {

          })
    }
    //批量更新和新建数据
    var setData = (data) => {

      //删除create和update时间戳
      for (var va in data) {

        delete data[va].create_time;
        delete data[va].update_time;
      }
      axios.post(
          common.url + 'api/xcupdatedata', data
      ).then(res => {

        if (res.data.code == 200) {
          ElMessage({
            message: res.data.msg,
            type: 'success',
          })
        } else {
          ElMessage({
            message: '数据写入失败!请在控制台查看错误信息',
            type: 'error',
          })
        }
      }).catch(error => {
        console.log(error)
      })
    }


    //打印对账小票
    const dayinpiao = () => {
      axios.post(
          common.url + 'api/xcprint', printdata
      ).then(res => {
        if (res.data.code == 200) {
          console.log(res.data)
          ElMessage({
            message: res.data.msg,
            type: 'success',
          })
        } else {
          console.log(res.data)
          ElMessage({
            message: '打印失败!请在控制台查看错误信息',
            type: 'error',
          })

        }
      }).catch(error => {
        console.log(error)
      })
    }

    //验证选项并打印
    const printtable = () => {
      //通过ref的值触发验证

      var po = printdata;
      ruleFormRef.value.validate((valid) => {
        if (valid) {
          console.log("通过");
          // 触发成功验证表单,调用接口;
          // console.log(printdata)


          new Promise(resolve => {
            setTimeout(() => {
              //写入更新数据
              setData([data.data.data[dialog.index]]);
              resolve(1);
            }, 0);
          }).then((val) => {

            new Promise(resolve => {
              setTimeout(() => {
                //打印数据
                dayinpiao();
                //重置选项
                printdata.dian = '';
                printdata.xuanxiang = '';
                printdata.printkuai = '';
                printdata.leixing = '全部';

                //清空已选内容
                dialogtable.value.clearSelection();

                resolve(2);
              }, 200);
            });

          });


        } else {
          console.log("未通过");

        }
      });


    }


    //计算所选数据进价合计
    var excelhe = () => {
      var i = 0;
      var price = 0;
      for (var vKey in printdata.select) {
        i = Number(printdata.select[vKey].shu) + i;
        price = (Number(printdata.select[vKey].jinprice) * Number(printdata.select[vKey].shu)) + price;
      }

      return '进价合计:' + price;
    }

    //计算当前订单共个数
    var tableProcessing = (v) => {
      var i = 0;
      var priceon = 0;
      var priceoff = 0;
      for (var vKey in v) {
        i = Number(v[vKey].shu) + i;
        priceon = (Number(v[vKey].jinprice) * Number(v[vKey].shu)) + priceon;
        priceoff = (Number(v[vKey].tuiprice) * Number(v[vKey].shu)) + priceoff;
      }
      return '数量:' + i + ' -- 进价:' + priceon + ' -- 退价:' + priceoff + ' -- 差价:' + (Number(priceon) - Number(priceoff)).toFixed(2)
    }


    //计算单笔单个数据差价
    const priceDifference = (nei, index) => {
      return Number(nei.jinprice) - Number(nei.tuiprice).toFixed(2)
    }

    //表格状态转换
    var tablestatus = (x) => {
      var re = {}
      if (x == 1) {
        re = {
          name: '未发走',
          type: 'error'
        }
      } else if (x == 2) {
        re = {
          name: '未结单',
          type: 'warning'
        }
      } else if (x == 3) {
        re = {
          name: '已完成',
          type: 'success'
        }
      }
      return re;
    }


    //多选数据操作
    const cascaderchang = (value) => {
      tableoperation.value = value
    }

    //写入行id到row
    // const handleRowClick = (row,column) => {
    //   tablexydata.x = row.index;
    //   tablexydata.y = column.label;
    // }
    // 表格点击坐标监听
    // const tablexy = () => {
    //   nextTick(() => {
    //     // inputref.id = row.index+column.label;
    //     inputref.value.focus();
    //
    //   })
    // }

    //表格数据添加
    const tableadd = () => {
      // console.log((data.data.data[dialog.index].nei).length)
      // var ind = (data.data.data[dialog.index].nei).length;
      if (tableadddata.data.if == '换货') {
        tableadddata.data.jinprice = 0;
        tableadddata.data.tuiprice = 0;
      } else {
        tableadddata.data.jinprice = '';
        tableadddata.data.tuiprice = '';
      }

      for (let i = 0; i < addshu.value; i++) {
        data.data.data[dialog.index].nei.push({
          model: tableadddata.data.model,
          shu: tableadddata.data.shu,
          jinprice: tableadddata.data.jinprice,
          tuiprice: tableadddata.data.tuiprice,
          if: tableadddata.data.if,
          dian: tableadddata.data.dian,
          notes: tableadddata.data.notes,
        });
        // console.log(i)
      }

      addshu.value = 1;
      // (data.data.data[dialog.index].nei).push(tableadddata.data)
    }


    //表格删除财主
    const tabledelete = (index) => {
      ElMessageBox.confirm('你确定要删除么?此操作不可逆!')
          .then(() => {
            data.data.data[dialog.index].nei.splice(index, 1);
          })
          .catch(() => {

          })
    }


    //添加新订单
    const add = () => {
      var i = data.data.data.length;
      console.log(i)
      data.data.data = {
        nei: [],
        status: 1,
      };
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth() + 1;//得到月份
      var date = now.getDate();//得到日期
      dialog.index = i;
      dialog.title = year + '/' + month + '/' + date + '(新建订单)';
      dialog.if = true

    }

    //监听分页数据
    watch(request, () => {
          getData()
        }
    )

    //监听批量操作
    watch(tableoperation, () => {
      if (tableoperation.value[0] == 'delete') {
        ElMessageBox.confirm('你确定要删除所选数据么?此操作不可逆!')
            .then(() => {
              ElMessageBox.confirm('请三思而后行!')
                  .then(() => {
                    // console.log('确认')
                    for (var va in tableselect.value) {
                      console.log(tableselect.value[va])

                      tableselect.value[va].delete_time = parseInt(+new Date() / 1000);
                    }
                    tableoperation.value = []
                    //写入数据
                    setData(tableselect.value);
                    setTimeout(function () {
                      getData();
                    }, 500)


                  })
                  .catch(() => {
                    // catch error
                    // console.log('取消')
                    tableoperation.value = []
                  })
            })
            .catch(() => {
              // catch error
              // console.log('取消')
              tableoperation.value = []
            })
      } else if (tableoperation.value[0] == 'status') {
        if (tableoperation.value[1] == 1) {
          ElMessageBox.confirm('确定要将所选数据转换为"未发走"么?')
              .then(() => {
                for (var va in tableselect.value) {
                  tableselect.value[va].status = 1;

                }
                tableoperation.value = [];
                //写入数据
                setData(tableselect.value);
                setTimeout(function () {
                  getData();
                }, 500)
              })
              .catch(() => {
                // catch error
                tableoperation.value = []
              })
        } else if (tableoperation.value[1] == 2) {
          ElMessageBox.confirm('确定要将所选数据转换为"未结单"么?')
              .then(() => {
                for (var va in tableselect.value) {
                  tableselect.value[va].status = 2;

                }
                tableoperation.value = [];
                //写入数据
                setData(tableselect.value);
                setTimeout(function () {
                  getData();
                }, 500)
              })
              .catch(() => {
                // catch error
                tableoperation.value = []
              })
        } else if (tableoperation.value[1] == 3) {
          ElMessageBox.confirm('确定要将所选数据转换为"已完成"么?')
              .then(() => {
                for (var va in tableselect.value) {
                  tableselect.value[va].status = 3;
                }
                tableoperation.value = [];
                //写入数据
                setData(tableselect.value);
                setTimeout(function () {
                  getData();
                }, 500)
              })
              .catch(() => {
                // catch error
                tableoperation.value = []
              })
        }
      }
    })

    //加载完执行
    onMounted(() => {
      //获取数据
      getData();

      //获取门店信息
      getDian();

      //自动获取当前页面高度
      // 设置表格初始高度为innerHeight-offsetTop-表格底部与浏览器底部距离85
      tableHeight.value = window.innerHeight - tableRef.value.$el.offsetTop - 150;
      // 监听浏览器高度变化
      window.onresize = () => {
        tableHeight.value = window.innerHeight - tableRef.value.$el.offsetTop - 150;
      };

      //自动获取当前页面宽度
      browserWidth.value = window.innerWidth - 50;
      // 监听浏览器高度变化
      window.onresize = () => {
        browserWidth.value = window.innerWidth - 50;
      };
    })
    </script>

    <style>
    .el-table .warning-row {
      --el-table-tr-bg-color: var(--el-color-warning-light-9);
    }

    .el-table .success-row {
      --el-table-tr-bg-color: var(--el-color-success-light-9);
    }

    </style>
  • @Ta / 03-10 09:09 / /

    [新会话] @清滢泪,内容超过ChatGPT长度限制,请缩短。当前会话已丢失。

添加新回复
回复需要登录