修复前端xlsx解析 打印问题 和其他问题

This commit is contained in:
gaoxiongzaq
2023-10-20 15:43:45 +08:00
parent c559efcceb
commit b1bfd81a97
39 changed files with 4021 additions and 7514 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,87 @@
@font-face {
font-family: "iconfont"; /* Project id 3636363 */
src: url('iconfont.woff2?t=1684982520381') format('woff2'),
url('iconfont.woff?t=1684982520381') format('woff'),
url('iconfont.ttf?t=1684982520381') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-daochu1:before {
content: "\e740";
}
.icon-daoru2:before {
content: "\e741";
}
.icon-shujutongji:before {
content: "\e664";
}
.icon-changguishujutongji:before {
content: "\e677";
}
.icon-zitishangbiao:before {
content: "\ec83";
}
.icon-zitixiabiao:before {
content: "\ec85";
}
.icon-shuaxin:before {
content: "\e782";
}
.icon-refresh:before {
content: "\e6b1";
}
.icon-tucengshaixuan:before {
content: "\e606";
}
.icon-tuceng1:before {
content: "\e63c";
}
.icon-layer:before {
content: "\e613";
}
.icon-a-dashujushujutongji-02:before {
content: "\e894";
}
.icon-baocun:before {
content: "\e63b";
}
.icon-baocun_o:before {
content: "\eb47";
}
.icon-shanchu:before {
content: "\e8b6";
}
.icon-sousuo:before {
content: "\e8b9";
}
.icon-yanjing:before {
content: "\e8bf";
}
.icon-daochuxlsx:before {
content: "\e62b";
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,135 @@
{
"id": "3636363",
"name": "luckysheet",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "32414822",
"name": "导出",
"font_class": "daochu1",
"unicode": "e740",
"unicode_decimal": 59200
},
{
"icon_id": "32414824",
"name": "导入",
"font_class": "daoru2",
"unicode": "e741",
"unicode_decimal": 59201
},
{
"icon_id": "6554314",
"name": "数据统计",
"font_class": "shujutongji",
"unicode": "e664",
"unicode_decimal": 58980
},
{
"icon_id": "8213846",
"name": "常规数据统计",
"font_class": "changguishujutongji",
"unicode": "e677",
"unicode_decimal": 58999
},
{
"icon_id": "6337468",
"name": "字体上标",
"font_class": "zitishangbiao",
"unicode": "ec83",
"unicode_decimal": 60547
},
{
"icon_id": "6337475",
"name": "字体下标",
"font_class": "zitixiabiao",
"unicode": "ec85",
"unicode_decimal": 60549
},
{
"icon_id": "579551",
"name": "刷新",
"font_class": "shuaxin",
"unicode": "e782",
"unicode_decimal": 59266
},
{
"icon_id": "15066952",
"name": "refresh",
"font_class": "refresh",
"unicode": "e6b1",
"unicode_decimal": 59057
},
{
"icon_id": "6677531",
"name": "图层筛选",
"font_class": "tucengshaixuan",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "5650931",
"name": "图层",
"font_class": "tuceng1",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "10904998",
"name": "图层",
"font_class": "layer",
"unicode": "e613",
"unicode_decimal": 58899
},
{
"icon_id": "25885527",
"name": "大数据、数据统计-02",
"font_class": "a-dashujushujutongji-02",
"unicode": "e894",
"unicode_decimal": 59540
},
{
"icon_id": "1305399",
"name": "保存",
"font_class": "baocun",
"unicode": "e63b",
"unicode_decimal": 58939
},
{
"icon_id": "5387745",
"name": "保存_o",
"font_class": "baocun_o",
"unicode": "eb47",
"unicode_decimal": 60231
},
{
"icon_id": "11372693",
"name": "删除",
"font_class": "shanchu",
"unicode": "e8b6",
"unicode_decimal": 59574
},
{
"icon_id": "11372706",
"name": "搜索",
"font_class": "sousuo",
"unicode": "e8b9",
"unicode_decimal": 59577
},
{
"icon_id": "11372728",
"name": "眼睛",
"font_class": "yanjing",
"unicode": "e8bf",
"unicode_decimal": 59583
},
{
"icon_id": "26922840",
"name": "导出-02",
"font_class": "daochuxlsx",
"unicode": "e62b",
"unicode_decimal": 58923
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@@ -0,0 +1,17 @@
import { Plugin } from "../../types/options";
export interface Config {
shorthand: boolean;
dateFormat: string;
altFormat: string;
theme: string;
_stubbedCurrentMonth?: number;
}
export interface ElementDate extends Element {
dateObj: Date;
}
export declare type MonthElement = HTMLSpanElement & {
dateObj: Date;
$i: number;
};
declare function monthSelectPlugin(pluginConfig?: Partial<Config>): Plugin;
export default monthSelectPlugin;

View File

@@ -0,0 +1,301 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.monthSelectPlugin = factory());
}(this, (function () { 'use strict';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
var __assign = function() {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
function clearNode(node) {
while (node.firstChild)
node.removeChild(node.firstChild);
}
function getEventTarget(event) {
try {
if (typeof event.composedPath === "function") {
var path = event.composedPath();
return path[0];
}
return event.target;
}
catch (error) {
return event.target;
}
}
var defaultConfig = {
shorthand: false,
dateFormat: "F Y",
altFormat: "F Y",
theme: "light",
};
function monthSelectPlugin(pluginConfig) {
var config = __assign(__assign({}, defaultConfig), pluginConfig);
return function (fp) {
fp.config.dateFormat = config.dateFormat;
fp.config.altFormat = config.altFormat;
var self = { monthsContainer: null };
function clearUnnecessaryDOMElements() {
if (!fp.rContainer)
return;
clearNode(fp.rContainer);
for (var index = 0; index < fp.monthElements.length; index++) {
var element = fp.monthElements[index];
if (!element.parentNode)
continue;
element.parentNode.removeChild(element);
}
}
function build() {
if (!fp.rContainer)
return;
self.monthsContainer = fp._createElement("div", "flatpickr-monthSelect-months");
self.monthsContainer.tabIndex = -1;
buildMonths();
fp.rContainer.appendChild(self.monthsContainer);
fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-" + config.theme);
}
function buildMonths() {
if (!self.monthsContainer)
return;
clearNode(self.monthsContainer);
var frag = document.createDocumentFragment();
for (var i = 0; i < 12; i++) {
var month = fp.createDay("flatpickr-monthSelect-month", new Date(fp.currentYear, i), 0, i);
if (month.dateObj.getMonth() === new Date().getMonth() &&
month.dateObj.getFullYear() === new Date().getFullYear())
month.classList.add("today");
month.textContent = monthToStr(i, config.shorthand, fp.l10n);
month.addEventListener("click", selectMonth);
frag.appendChild(month);
}
self.monthsContainer.appendChild(frag);
if (fp.config.minDate &&
fp.currentYear === fp.config.minDate.getFullYear())
fp.prevMonthNav.classList.add("flatpickr-disabled");
else
fp.prevMonthNav.classList.remove("flatpickr-disabled");
if (fp.config.maxDate &&
fp.currentYear === fp.config.maxDate.getFullYear())
fp.nextMonthNav.classList.add("flatpickr-disabled");
else
fp.nextMonthNav.classList.remove("flatpickr-disabled");
}
function bindEvents() {
fp._bind(fp.prevMonthNav, "click", function (e) {
e.preventDefault();
e.stopPropagation();
fp.changeYear(fp.currentYear - 1);
selectYear();
buildMonths();
});
fp._bind(fp.nextMonthNav, "click", function (e) {
e.preventDefault();
e.stopPropagation();
fp.changeYear(fp.currentYear + 1);
selectYear();
buildMonths();
});
fp._bind(self.monthsContainer, "mouseover", function (e) {
if (fp.config.mode === "range")
fp.onMouseOver(getEventTarget(e), "flatpickr-monthSelect-month");
});
}
function setCurrentlySelected() {
if (!fp.rContainer)
return;
if (!fp.selectedDates.length)
return;
var currentlySelected = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");
for (var index = 0; index < currentlySelected.length; index++) {
currentlySelected[index].classList.remove("selected");
}
var targetMonth = fp.selectedDates[0].getMonth();
var month = fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child(" + (targetMonth + 1) + ")");
if (month) {
month.classList.add("selected");
}
}
function selectYear() {
var selectedDate = fp.selectedDates[0];
if (selectedDate) {
selectedDate = new Date(selectedDate);
selectedDate.setFullYear(fp.currentYear);
if (fp.config.minDate && selectedDate < fp.config.minDate) {
selectedDate = fp.config.minDate;
}
if (fp.config.maxDate && selectedDate > fp.config.maxDate) {
selectedDate = fp.config.maxDate;
}
fp.currentYear = selectedDate.getFullYear();
}
fp.currentYearElement.value = String(fp.currentYear);
if (fp.rContainer) {
var months = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");
months.forEach(function (month) {
month.dateObj.setFullYear(fp.currentYear);
if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||
(fp.config.maxDate && month.dateObj > fp.config.maxDate)) {
month.classList.add("flatpickr-disabled");
}
else {
month.classList.remove("flatpickr-disabled");
}
});
}
setCurrentlySelected();
}
function selectMonth(e) {
e.preventDefault();
e.stopPropagation();
var eventTarget = getEventTarget(e);
if (!(eventTarget instanceof Element))
return;
if (eventTarget.classList.contains("flatpickr-disabled"))
return;
if (eventTarget.classList.contains("notAllowed"))
return; // necessary??
setMonth(eventTarget.dateObj);
if (fp.config.closeOnSelect) {
var single = fp.config.mode === "single";
var range = fp.config.mode === "range" && fp.selectedDates.length === 2;
if (single || range)
fp.close();
}
}
function setMonth(date) {
var selectedDate = new Date(fp.currentYear, date.getMonth(), date.getDate());
var selectedDates = [];
switch (fp.config.mode) {
case "single":
selectedDates = [selectedDate];
break;
case "multiple":
selectedDates.push(selectedDate);
break;
case "range":
if (fp.selectedDates.length === 2) {
selectedDates = [selectedDate];
}
else {
selectedDates = fp.selectedDates.concat([selectedDate]);
selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
}
break;
}
fp.setDate(selectedDates, true);
setCurrentlySelected();
}
var shifts = {
37: -1,
39: 1,
40: 3,
38: -3,
};
function onKeyDown(_, __, ___, e) {
var shouldMove = shifts[e.keyCode] !== undefined;
if (!shouldMove && e.keyCode !== 13) {
return;
}
if (!fp.rContainer || !self.monthsContainer)
return;
var currentlySelected = fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");
var index = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement);
if (index === -1) {
var target = currentlySelected || self.monthsContainer.firstElementChild;
target.focus();
index = target.$i;
}
if (shouldMove) {
self.monthsContainer.children[(12 + index + shifts[e.keyCode]) % 12].focus();
}
else if (e.keyCode === 13 &&
self.monthsContainer.contains(document.activeElement)) {
setMonth(document.activeElement.dateObj);
}
}
function closeHook() {
var _a;
if (((_a = fp.config) === null || _a === void 0 ? void 0 : _a.mode) === "range" && fp.selectedDates.length === 1)
fp.clear(false);
if (!fp.selectedDates.length)
buildMonths();
}
// Help the prev/next year nav honor config.minDate (see 3fa5a69)
function stubCurrentMonth() {
config._stubbedCurrentMonth = fp._initialDate.getMonth();
fp._initialDate.setMonth(config._stubbedCurrentMonth);
fp.currentMonth = config._stubbedCurrentMonth;
}
function unstubCurrentMonth() {
if (!config._stubbedCurrentMonth)
return;
fp._initialDate.setMonth(config._stubbedCurrentMonth);
fp.currentMonth = config._stubbedCurrentMonth;
delete config._stubbedCurrentMonth;
}
function destroyPluginInstance() {
if (self.monthsContainer !== null) {
var months = self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");
for (var index = 0; index < months.length; index++) {
months[index].removeEventListener("click", selectMonth);
}
}
}
return {
onParseConfig: function () {
fp.config.enableTime = false;
},
onValueUpdate: setCurrentlySelected,
onKeyDown: onKeyDown,
onReady: [
stubCurrentMonth,
clearUnnecessaryDOMElements,
build,
bindEvents,
setCurrentlySelected,
function () {
fp.config.onClose.push(closeHook);
fp.loadedPlugins.push("monthSelect");
},
],
onDestroy: [
unstubCurrentMonth,
destroyPluginInstance,
function () {
fp.config.onClose = fp.config.onClose.filter(function (hook) { return hook !== closeHook; });
},
],
};
};
}
return monthSelectPlugin;
})));

View File

@@ -0,0 +1,117 @@
.flatpickr-monthSelect-months {
margin: 10px 1px 3px 1px;
flex-wrap: wrap;
}
.flatpickr-monthSelect-month {
background: none;
border: 1px solid transparent;
border-radius: 4px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: #393939;
cursor: pointer;
display: inline-block;
font-weight: 400;
margin: 0.5px;
justify-content: center;
padding: 10px;
position: relative;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
text-align: center;
width: 33%;
}
.flatpickr-monthSelect-month.flatpickr-disabled {
color: #eee;
}
.flatpickr-monthSelect-month.flatpickr-disabled:hover,
.flatpickr-monthSelect-month.flatpickr-disabled:focus {
cursor: not-allowed;
background: none !important;
}
.flatpickr-monthSelect-theme-dark {
background: #3f4458;
}
.flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year {
color: #fff;
}
.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month,
.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month {
color: #fff;
fill: #fff;
}
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month {
color: rgba(255, 255, 255, 0.95);
}
.flatpickr-monthSelect-month.today {
border-color: #959ea9;
}
.flatpickr-monthSelect-month.inRange,
.flatpickr-monthSelect-month.inRange.today,
.flatpickr-monthSelect-month:hover,
.flatpickr-monthSelect-month:focus {
background: #e6e6e6;
cursor: pointer;
outline: 0;
border-color: #e6e6e6;
}
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.inRange,
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover,
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus {
background: #646c8c;
border-color: #646c8c;
}
.flatpickr-monthSelect-month.today:hover,
.flatpickr-monthSelect-month.today:focus {
background: #959ea9;
border-color: #959ea9;
color: #fff;
}
.flatpickr-monthSelect-month.selected,
.flatpickr-monthSelect-month.startRange,
.flatpickr-monthSelect-month.endRange {
background-color: #569ff7;
box-shadow: none;
color: #fff;
border-color: #569ff7;
}
.flatpickr-monthSelect-month.startRange {
border-radius: 50px 0 0 50px;
}
.flatpickr-monthSelect-month.endRange {
border-radius: 0 50px 50px 0;
}
.flatpickr-monthSelect-month.startRange.endRange {
border-radius: 50px;
}
.flatpickr-monthSelect-month.inRange {
border-radius: 0;
box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
}
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected,
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.startRange,
.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.endRange {
background: #80cbc4;
-webkit-box-shadow: none;
box-shadow: none;
color: #fff;
border-color: #80cbc4;
}

File diff suppressed because one or more lines are too long

View File

@@ -1,410 +0,0 @@
export function initChat() {
if (!isNeedChat()) {
return
}
// Your CSS as text
let styles = `
body {
background-color: #f5f5f5;
}
#chat-assistant-container {
position: fixed;
right: 40px;
bottom: 86px;
z-index:9990;
}
#chat-assistant-button {
width: 50px;
height: 50px;
border-radius: 50%;
border: none;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
background: linear-gradient(135deg, rgb(215 98 150 / 55%),rgb(34 78 139 / 71%), rgb(114 222 172));
box-shadow: 0px 0px 8px 1px rgb(0 0 0 / 22%);
color: #fff;
text-shadow: 1px 1px 3px rgb(0 0 0 / 56%);
}
#chat-container {
position: fixed;
padding: 10px;
top: 45%;
left: 50%;
z-index:9990;
transform: translate(-50%, -50%);
display: none;
border-radius: 5px;
width: 40%;
background: linear-gradient(135deg, rgb(215 98 150 / 92%),rgb(34 78 139 / 93%), rgb(114 222 172 / 94%));
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2);
}
#chat-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 10px 10px 0;
border-radius: 5px 5px 0 0;
cursor: move;
}
#loading-indicator {
width: 14px;
height: 14px;
margin: 0 10px 0 10px;
border: 2px solid #ccc;
border-top-color: #4caf50;
border-radius: 50%;
animation: spin 2s linear infinite;
visibility: hidden;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
#chat-header .show-loading {
visibility: visible;
}
#chat-header .hide-loading {
visibility: hidden;
}
#circle-button {
padding: 0;
border: none;
background-color: transparent;
font-size: 16px;
user-select: none;
display: flex;
align-items: center;
color: #fff;
text-shadow: 1px 1px 3px black;
}
#close-button {
cursor: pointer;
padding: 0;
border: none;
background-color: transparent;
font-size: 24px;
color: #fff;
text-shadow: 1px 1px 3px black;
}
#send-button {
cursor: pointer;
padding: 0;
border: none;
background-color: transparent;
font-size: 16px;
}
#close-button:hover,
#send-button:hover {
color: #888;
}
#chat-input-container,
#chat-input {
border: none;
}
#chat-input-container {
display: flex;
align-items: center;
border-radius: 5px;
background-color: #fff;
padding: 10px;
}
#chat-input {
flex: 1;
padding: 0;
margin-right: 5px;
border-radius: 5px;
overflow-y: auto;
height: 24px;
font-size: 1rem;
outline: none;
resize: none;
background: transparent;
}
#send-button {
background-color: transparent;
border: none;
border-radius: 5px;
cursor: pointer;
padding: 5px;
display: flex;
align-items: center;
justify-content: center;
height: 32px;
width: 32px;
}
#send-button>span {
height: 16px;
width: 16px;
}
#send-button:enabled {
background-color: rgb(120,198,174);
}
#send-button:enabled svg path {
fill: #fff;
}
`
let styleSheet = document.createElement("style")
styleSheet.innerText = styles
document.head.appendChild(styleSheet)
const html = `<div id="chat-assistant-container">
<button id="chat-assistant-button">🤖AI</button>
</div>
<div id="chat-container">
<div id="chat-header">
<span id="circle-button">Univer AI 助手<div id="loading-indicator"></div></span>
<button id="close-button">×</button>
</div>
<div id="chat-input-container">
<textarea id="chat-input" placeholder="请输入问题"></textarea>
<!-- <textarea id="chat-input" placeholder="请输入问题"></textarea> -->
<button id="send-button" disabled>
<span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" class="h-4 w-4 m-1 md:m-0"
stroke-width="2">
<path
d="M.5 1.163A1 1 0 0 1 1.97.28l12.868 6.837a1 1 0 0 1 0 1.766L1.969 15.72A1 1 0 0 1 .5 14.836V10.33a1 1 0 0 1 .816-.983L8.5 8 1.316 6.653A1 1 0 0 1 .5 5.67V1.163Z"
fill="currentColor"></path>
</svg></span>
</button>
</div>
</div>`;
document.body.insertAdjacentHTML('beforeend', html)
const assistantButton = document.getElementById('chat-assistant-button');
const chatContainer = document.getElementById('chat-container');
const closeButton = document.getElementById('close-button');
const chatInput = document.getElementById('chat-input');
const sendButton = document.getElementById('send-button');
const loadingIndicator = document.getElementById('loading-indicator');
assistantButton.addEventListener('click', function () {
chatContainer.style.display = 'block';
});
closeButton.addEventListener('click', function () {
chatContainer.style.display = 'none';
});
sendButton.addEventListener('click', function () {
const message = chatInput.value;
if (message.trim() !== '') {
// 处理发送消息的逻辑
chatInput.value = '';
resetButton(chatInput)
// 显示 Loading
loadingIndicator.classList.add('show-loading');
setTimeout(() => {
setFormuala(message);
// 隐藏 Loading
loadingIndicator.classList.remove('show-loading');
}, 1000);
}
});
chatInput.addEventListener('input', function () {
inputHandler(this)
});
function inputHandler(input) {
if (input.scrollHeight > 24) {
input.style.height = 'auto'
}
input.style.height = input.scrollHeight + 'px'; // 根据内容高度设置 textarea 高度
if (input.scrollHeight > 200) {
input.style.overflowY = 'scroll'
} else {
input.style.overflowY = 'hidden'
}
resetButton(input)
}
function resetButton(input) {
if (input.value.trim() !== '') {
sendButton.disabled = false;
sendButton.classList.add('enabled');
} else {
input.style.height = '24px'; // 重置高度为一行
sendButton.disabled = true;
sendButton.classList.remove('enabled');
}
}
// 快捷键
let isComposing = false;
chatInput.addEventListener('compositionstart', function () {
isComposing = true;
});
chatInput.addEventListener('compositionend', function () {
isComposing = false;
});
chatInput.addEventListener('keydown', function (event) {
const isWindows = navigator.platform.includes('Win');
const isMac = navigator.platform.includes('Mac');
const key = event.key;
if (isWindows && event.key === 'Enter' && !isComposing && !event.altKey) {
// Windows 上的 Enter 键触发发送
event.preventDefault();
sendButton.click();
} else if (isWindows && event.key === 'Enter' && !isComposing && event.altKey) {
// Windows 上的 Alt+Enter 键触发换行
event.preventDefault();
this.value += '\n';
} else if (isMac && event.key === 'Enter' && !isComposing && !event.metaKey) {
// Mac 上的 Enter 键触发发送
event.preventDefault();
sendButton.click();
} else if (isMac && event.key === 'Enter' && !isComposing && event.metaKey) {
// Mac 上的 Command+Enter 键触发换行
event.preventDefault();
this.value += '\n';
} else if (!isComposing && (key === "Backspace" || key === "Delete")) {
}
inputHandler(this)
});
// 添加拖拽功能
let isDragging = false;
let offset = { x: 0, y: 0 };
const chatHeader = document.getElementById('chat-header');
chatHeader.addEventListener('mousedown', function (event) {
isDragging = true;
offset.x = event.clientX - chatContainer.offsetLeft;
offset.y = event.clientY - chatContainer.offsetTop;
});
document.addEventListener('mousemove', function (event) {
if (isDragging) {
chatContainer.style.left = `${event.clientX - offset.x}px`;
chatContainer.style.top = `${event.clientY - offset.y}px`;
}
});
document.addEventListener('mouseup', function () {
isDragging = false;
});
}
const needChatHosts = [
'crm.lashuju.com',
'localhost:3000'
]
function isNeedChat() {
const host = location.host;
if (needChatHosts.includes(host)) {
return true
}
return false
}
function setFormuala(sentence = '') {
let link = getLink(sentence)
if (link !== '') {
setGET_AIRTABLE(link)
} else {
setASK_AI(sentence)
}
}
function setASK_AI(sentence = '') {
let range = getRange(sentence);
range = range === '' ? '' : ',' + range
const data = [
[
{
"f": "=ASK_AI(\"" + sentence + "\"" + range + ")"
}
]
]
luckysheet.setRangeValue(data)
}
function setGET_AIRTABLE(link) {
const data = [
[
{
"f": "=GET_AIRTABLE_DATA(\"" + link + "\")"
}
]
]
luckysheet.setRangeValue(data)
}
function getLink(sentence = '') {
const regex = /(https?:\/\/(?:www\.)?airtable\.com\/\S+)/gi;
const matches = sentence.match(regex);
if (matches) {
return matches[0];
}
return ''
}
function getRange(text) {
const regex = /([A-Z]+[0-9]*):([A-Z]+[0-9]*)/g;
const matche = text.match(regex);
if (matche) {
return matche[0]
}
return ''
}

View File

@@ -1,26 +1,17 @@
// Features specially written for demo
(function () {
(function() {
// language
function language(params) {
var lang = navigator.language || navigator.userLanguage;//常规浏览器语言和IE浏览器
var lang = navigator.language||navigator.userLanguage;//常规浏览器语言和IE浏览器
lang = lang.substr(0, 2);//截取lang前2位字符
return lang;
}
// Tencent Forum Link Button
function supportButton() {
const text = language() === 'zh' ? '反馈' : 'Forum';
const link = language() === 'zh' ? 'https://support.qq.com/product/288322' : 'https://groups.google.com/g/luckysheet';
document.querySelector("body").insertAdjacentHTML('beforeend', '<a id="container" href="' + link + '" target="_blank" style="z-index:2;width:50px;height:50px;line-height:50px;position:fixed;right:40px;bottom:86px;border-radius:50px;cursor:pointer;background:rgb(71,133,249);color:#fff;text-align:center;text-decoration:none;font-size: 12px;">' + text + '</a>');
}
supportButton()
/**
* Get url parameters
@@ -28,15 +19,16 @@
function getRequest() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function (m, key, value) {
vars[key] = value;
});
function(m,key,value) {
vars[key] = value;
});
return vars;
}
window.luckysheetDemoUtil = {
language: language,
getRequest: getRequest
language:language,
getRequest:getRequest
}
})()

File diff suppressed because it is too large Load Diff

View File

@@ -1217,7 +1217,8 @@ window.sheetChart = {
"vt": 1
}
}],
"row": 84,
// "row": 84,
"row":100,
"column": 60,
"config": {
"merge": {},

View File

@@ -6450,34 +6450,7 @@ window.sheetConditionFormat = {
"conditionName": "occurrenceDate",
"conditionRange": [],
"conditionValue": ["2020/07/23 - 2020/07/29"]
},{
"type": "default",
"cellrange": [{
"row": [10, 19],
"column": [0, 0]
}],
"format": {
"textColor": "#000000",
"cellColor": "#ff0000"
},
"conditionName": "regExp",
"conditionRange": [],
"conditionValue": [/^\d{1,}\.\d{1,}$/]
},{
"type": "default",
"cellrange": [{
"row": [0, 9],
"column": [0, 0]
}],
"format": {
"textColor": "#000000",
"cellColor": "#ff0000"
},
"conditionName": "sort",
"conditionRange": [],
"conditionValue": ['desc']
},
{
}, {
"type": "colorGradation",
"cellrange": [{
"left": 422,

File diff suppressed because one or more lines are too long

View File

@@ -2,7 +2,8 @@ window.sheetPicture = {
"name": "Picture",
"index": "Sheet_3e4oe25C757r_1600925108337",
"celldata": [],
"row": 84,
// "row": 84,
"row":100,
"column": 60,
"config": {
"rowlen": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,46 +0,0 @@
.luckysheet-print span[role="heading"] {
font-size: 30px;
font-weight: bold;
}
.luckysheet-print-suggest {
font-size: 12px;
}
.luckysheet-print-title {
font-weight: bold;
font-size: 18px;
}
.luckysheet-print-radio {
display: flex;
}
.luckysheet-print-radio > div {
width: 50%;
}
.luckysheet-print select {
height: 30px;
}
.luckysheet-print .luckysheet-modal-dialog-buttons {
display: flex;
flex-direction: row-reverse;
}
.luckysheet-print-box canvas {
display: block;
}
@media print {
:not(html, head, body, .luckysheet-print-preview, .luckysheet-print-preview *) {
display: none;
}
.luckysheet-print-break {
page-break-after: always;
}
#print-layout-options {
display: none;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>iconfont Demo</title>
<link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
<link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
<link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
<link rel="stylesheet" href="demo.css">
<link rel="stylesheet" href="iconfont.css">
<script src="iconfont.js"></script>
<!-- jQuery -->
<script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
<!-- 代码高亮 -->
<script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
<style>
.main .logo {
margin-top: 0;
height: auto;
}
.main .logo a {
display: flex;
align-items: center;
}
.main .logo .sub-title {
margin-left: 0.5em;
font-size: 22px;
color: #fff;
background: linear-gradient(-45deg, #3967FF, #B500FE);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>
</head>
<body>
<div class="main">
<h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
<img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
</a></h1>
<div class="nav-tabs">
<ul id="tabs" class="dib-box">
<li class="dib active"><span>Unicode</span></li>
<li class="dib"><span>Font class</span></li>
<li class="dib"><span>Symbol</span></li>
</ul>
<a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=3859326" target="_blank" class="nav-more">查看项目</a>
</div>
<div class="tab-container">
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe6b0;</span>
<div class="name">粘贴配置</div>
<div class="code-name">&amp;#xe6b0;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xec7a;</span>
<div class="name">复制</div>
<div class="code-name">&amp;#xec7a;</div>
</li>
</ul>
<div class="article markdown">
<h2 id="unicode-">Unicode 引用</h2>
<hr>
<p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
<ul>
<li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
<li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
</ul>
<blockquote>
<p>注意:新版 iconfont 支持两种方式引用多色图标SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
</blockquote>
<p>Unicode 使用步骤如下:</p>
<h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1673399426700') format('woff2'),
url('iconfont.woff?t=1673399426700') format('woff'),
url('iconfont.ttf?t=1673399426700') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
<pre><code class="language-css"
>.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
</code></pre>
<h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
<pre>
<code class="language-html"
>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
</code></pre>
<blockquote>
<p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看默认是 "iconfont"。</p>
</blockquote>
</div>
</div>
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-zhantiepeizhi"></span>
<div class="name">
粘贴配置
</div>
<div class="code-name">.icon-zhantiepeizhi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-fuzhi"></span>
<div class="name">
复制
</div>
<div class="code-name">.icon-fuzhi
</div>
</li>
</ul>
<div class="article markdown">
<h2 id="font-class-">font-class 引用</h2>
<hr>
<p>font-class Unicode 使用方式的一种变种主要是解决 Unicode 书写不直观语意不明确的问题</p>
<p> Unicode 使用方式相比具有如下特点</p>
<ul>
<li>相比于 Unicode 语意明确书写更直观可以很容易分辨这个 icon 是什么</li>
<li>因为使用 class 来定义图标所以当要替换图标时只需要修改 class 里面的 Unicode 引用</li>
</ul>
<p>使用步骤如下</p>
<h3 id="-fontclass-">第一步引入项目下面生成的 fontclass 代码</h3>
<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
</code></pre>
<h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
<pre><code class="language-html">&lt;span class="iconfont icon-xxx"&gt;&lt;/span&gt;
</code></pre>
<blockquote>
<p>"
iconfont" 是你项目下的 font-family。可以通过编辑项目查看默认是 "iconfont"。</p>
</blockquote>
</div>
</div>
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-zhantiepeizhi"></use>
</svg>
<div class="name">粘贴配置</div>
<div class="code-name">#icon-zhantiepeizhi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fuzhi"></use>
</svg>
<div class="name">复制</div>
<div class="code-name">#icon-fuzhi</div>
</li>
</ul>
<div class="article markdown">
<h2 id="symbol-">Symbol 引用</h2>
<hr>
<p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
<ul>
<li>支持多色图标了,不再受单色限制。</li>
<li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
<li>兼容性较差,支持 IE9+,及现代浏览器。</li>
<li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
</ul>
<p>使用步骤如下:</p>
<h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
</code></pre>
<h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
<pre><code class="language-html">&lt;style&gt;
.icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
&lt;/style&gt;
</code></pre>
<h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
&lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
&lt;/svg&gt;
</code></pre>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function () {
$('.tab-container .content:first').show()
$('#tabs li').click(function (e) {
var tabContent = $('.tab-container .content')
var index = $(this).index()
if ($(this).hasClass('active')) {
return
} else {
$('#tabs li').removeClass('active')
$(this).addClass('active')
tabContent.hide().eq(index).fadeIn()
}
})
})
</script>
</body>
</html>

View File

@@ -0,0 +1,23 @@
@font-face {
font-family: "iconfont"; /* Project id 3859326 */
src: url('./iconfont.woff2?t=1673399426700') format('woff2'),
url('./iconfont.woff?t=1673399426700') format('woff'),
url('./iconfont.ttf?t=1673399426700') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-zhantiepeizhi:before {
content: "\e6b0";
}
.icon-fuzhi:before {
content: "\ec7a";
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,23 @@
{
"id": "3859326",
"name": "luckysheet移动端",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "422435",
"name": "粘贴配置",
"font_class": "zhantiepeizhi",
"unicode": "e6b0",
"unicode_decimal": 59056
},
{
"icon_id": "5993150",
"name": "复制",
"font_class": "fuzhi",
"unicode": "ec7a",
"unicode_decimal": 60538
}
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -88,7 +88,7 @@
return;
}
// mask.style.display = "flex";
LuckyExcel.transformExcelToLuckyByUrl(value, name, function(exportJson, luckysheetfile){
LuckyExcel.transformExcelToLuckyByUrl(value, name, function(exportJson, luckysheetfile){
if(exportJson.sheets==null || exportJson.sheets.length==0){
alert("读取excel文件内容失败!");
return;
@@ -100,10 +100,9 @@
lang: "zh",
showtoolbarConfig:{
image: true,
print: false, //关闭打印按钮 启用也不能用 等以后看情况而定
exportXlsx: false, //关闭导出按钮 启用也不能用 等以后看情况而定
print: true, //关闭打印按钮 启用也不能用 等以后看情况而定
exportXlsx: true, //关闭导出按钮 启用也不能用 等以后看情况而定
},
allowCopy: true, // 是否允许拷贝
showtoolbar: true, // 是否显示工具栏
showinfobar: false, // 是否显示顶部信息栏
@@ -120,15 +119,9 @@
sheetFormulaBar: false, // 是否显示公式栏
enableAddBackTop: true,//返回头部按钮
forceCalculation: false, //下面是导出插件 默认关闭
enableAddRow: false, // 允许增加行
plugins: [{ name: 'chart' }, { name: 'exportXlsx', config: { url: 'luckyToXlsx' } }, {
name: 'print', config: {
license: ''
}
}],
data:exportJson.sheets,
title:exportJson.info.name,
userInfo:exportJson.info.name.creator
data: exportJson.sheets,
title: exportJson.info.name,
userInfo: exportJson.info.name.creator,
});
});
}