请选择 进入手机版 | 继续访问电脑版

avicdev

中级会员

69

主题

203

帖子

752

积分

中级会员

积分
752
avicdev
中级会员   /  发表于:2022-11-21 12:48  /   查看:2353  /  回复:7
继承GC.Spread.Sheets.CellTypes.Base方法创建的时间选择控件

在选择工具栏的自定义数据格式报错



同样方法自定义的其他类型单元格诸如单选、多选、弹出框控件,均无此现象

请帮排查原因 是否是初始化单元格时未携带关键默认值?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7 个回复

Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-21 16:15:46
沙发
您好,可以上传一下您是如何自定义时间空间的demo吗,我们可以根据您提供的demo排查一下问题。
回复 使用道具 举报
avicdev
中级会员   /  发表于:2022-11-21 17:25:43
板凳
本帖最后由 Ellia.Duan 于 2022-11-24 10:06 编辑
Clark.Pan 发表于 2022-11-21 16:15
您好,可以上传一下您是如何自定义时间空间的demo吗,我们可以根据您提供的demo排查一下问题。

import Vue from 'vue'
import moment from 'moment';
import GC from "@grapecity/spread-sheets"
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN';

export class dateCell extends GC.Spread.Sheets.CellTypes.Base{
  constructor(cellData) {
    super();
    this.dateType = cellData?.baseInfo?.dateFormatType ? cellData.baseInfo.dateFormatType: 'YYYY';
    this.typeName = "dateCell"
  }

  createEditorElement(context, cellWrapperElement){
    cellWrapperElement.style.overflow = 'visible'
    let editorContext = document.createElement("div")
    editorContext.setAttribute("class", "spread-cell-wrapper");
    let editor = document.createElement("div");
    editorContext.appendChild(editor);
    context.sheet.setFormatter(context.row, context.col,"",GC.Spread.Sheets.SheetArea.viewport);
    return editorContext;
  }

  activateEditor(editorContext, cellStyle, cellRect, context){
    const dateType = this.dateType;
    let showTime = this.dateType == "YYYY-MM-DD HH:mm:ss"?{defaultValue:moment("00:00:00", "HH:mm:ss")}:false;
    if (editorContext) {
      editorContext.style.height = cellRect.height+"px";
      editorContext.style.width = cellRect.width+"px";
      const AutoCompleteComponent = {
        template: `<a-config-provider :locale="locale">
                    <a-date-picker
                      v-model="text"
                      :show-time="showTime"
                      :open="isShow"
                      :show-today="true"
                      :format="dateFormat"
                      valueFormat="YYYY-MM-DD HH:mm:ss"
                      :getCalendarContainer="p=>p.parentNode"
                      @openChange="handleOk"
                    />
                  </a-config-provider>`,
        data(){
          return {
            text: "",
            locale: zhCN,
            isShow:true,
            showTime:showTime,
            dateFormat: dateType,
            defaultValue: moment("00:00:00", "HH:mm:ss")
          }
        },
        mounted() {
        },
        methods: {
          moment,
          handleOk(status){
            this.isShow = status;
          }
        }
      };
      const AutoCompleteCtor = Vue.extend(AutoCompleteComponent);
      this.vm = new AutoCompleteCtor({
      }).$mount(editorContext.firstChild);
    }
    return editorContext;
  }

  updateEditor(editorContext, cellStyle, cellRect){
    return {width: cellRect.width, height: cellRect.height};
  }

  getEditorValue(editorContext){
    if (this.vm && this.vm.text != "") {
      if(moment.isMoment(this.vm.text)) {
        return this.vm.text.format("YYYY-MM-DD HH:mm:ss")
      }
      return this.vm.text;
    }
    return '';
  }

  setEditorValue(editorContext, value){
    if (editorContext && value) {
      this.vm.text = this.vm.moment(value, "YYYY-MM-DD HH:mm:ss");
    }
  }

  format(value, format, formattedData, context) {
    if(!value) {
      return null
    }
    console.log(moment(value, this.dateType).format(this.dateType))
    return moment(value, this.dateType).format(this.dateType)
  }

  deactivateEditor(editorContext, context){
    this.vm.$destroy();
    this.vm = undefined;
  }
}



回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-21 17:38:21
地板
本帖最后由 Clark.Pan 于 2022-11-21 17:40 编辑

看了您的代码里面引用了第三方的组件,所以请提供能够运行的demo,谢谢。
如果不方便的话可以发给我们商务同事,让其转交给我们。
回复 使用道具 举报
avicdev
中级会员   /  发表于:2022-11-22 10:43:58
5#
Clark.Pan 发表于 2022-11-21 17:38
看了您的代码里面引用了第三方的组件,所以请提供能够运行的demo,谢谢。
如果不方便的话可以发给我们商务 ...

不太方便 第三方控件就是是ant-design-vue的时间选择控件 npm能直接下到,应该不难还原
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-22 11:57:27
6#
那我们先看一下,有问题再联系你
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-23 10:46:33
7#
这边无法还原您的问题,建议您将具体的应用抽离出一个能够重现问题的demo,我们再帮您看看。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-12-7 15:23:42
8#
请问您的问题解决了吗?如果还未解决,建议您上传 一个可以直接运行复现问题的demo。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部