gukai 2 years ago
parent 3fcedabe2b
commit 171ea44f27

@ -3,15 +3,19 @@
<view v-if="props.modelValue && props.modelValue.length" @click="open(true)" class="flex gap-2 overflow-x-auto"> <view v-if="props.modelValue && props.modelValue.length" @click="open(true)" class="flex gap-2 overflow-x-auto">
<view class=" border-gray-100 border-solid flex rounded-[14px] relative" <view class=" border-gray-100 border-solid flex rounded-[14px] relative"
v-for="img of (Array.isArray(props.modelValue) ? props.modelValue : [props.modelValue])" :key="img"> v-for="img of (Array.isArray(props.modelValue) ? props.modelValue : [props.modelValue])" :key="img">
<wd-img mode="aspectFill" radius="10" :width="100" :height="100" :src="img" /> <wd-img mode="aspectFill" radius="10" :width="width" :height="height" :src="img" />
</view> </view>
</view> </view>
<view v-else @click="open(true)" class="flex gap-2 overflow-x-auto"> <view v-else @click="open(true)" class="flex gap-2 overflow-x-auto">
<view style="width: 100px;height: 100px;" <view
:style="{
width: width + 'px',
height: height + 'px',
}"
class=" border-gray-100 border-solid flex rounded-[14px] relative flex-col items-center justify-center"> class=" border-gray-100 border-solid flex rounded-[14px] relative flex-col items-center justify-center">
<wd-icon name="image" size="28px"></wd-icon> <wd-icon name="image" size="28px"></wd-icon>
<view class="mt-2 font-bold text-[12px]">请选择</view> <view class="mt-2 font-bold text-[12px]" v-if="height > 70"></view>
</view> </view>
</view> </view>
@ -126,6 +130,14 @@ const props = defineProps({
type: Number, type: Number,
default: 1 default: 1
}, },
width: {
type: Number,
default: 100
},
height: {
type: Number,
default: 100
},
}) })
const LArr = ref([]) const LArr = ref([])

@ -81,7 +81,8 @@
<div class="p-2 bg-white"> <div class="p-2 bg-white">
<div class="name mb-2 text-xs">服务内容</div> <div class="name mb-2 text-xs">服务内容</div>
<view class="bg-white px-3 py-1 rounded"> <view class="bg-white px-3 py-1 rounded">
<wd-input type="text" v-model="model.server_project" placeholder="例子: 正品保障,极速发货,7天退换货。多个请使用英文逗号“,”分隔" /> <wd-input type="text" v-model="model.server_project"
placeholder="例子: 正品保障,极速发货,7天退换货。多个请使用英文逗号“,”分隔" />
</view> </view>
</div> </div>
</view> </view>
@ -127,39 +128,95 @@
:Pdata="{ skuDefault, skuLibrary, skuGroup, use_sku: model.use_sku }"> :Pdata="{ skuDefault, skuLibrary, skuGroup, use_sku: model.use_sku }">
</skuEdit> </skuEdit>
<view class="h-2 bg-gray-100"></view>
<view>
<view style="font-size: 36rpx;border-bottom: 1rpx solid #F0F0F0;display: flex;flex-wrap: wrap;align-items: center;">
<view
:style="{
margin: '20rpx',
fontWeight: formats.bold ? '800' : '400'
}"
@click="format('bold', (formats.bold ? false : true))">加粗</view>
<view
:style="{
margin: '20rpx',
fontWeight: formats.italic ? '800' : '400'
}"
@click="format('italic', (formats.italic ? false : true))">斜体</view>
<view
:style="{
margin: '20rpx',
fontWeight: formats.underline ? '800' : '400'
}"
@click="format('underline', (formats.underline ? false : true))">下划线</view>
<view
:style="{
margin: '20rpx',
fontWeight: formats.align == 'center' ? '800' : '400'
}"
@click="format('align', (formats.align == 'center' ? 'left' : 'center'))">居中</view>
<view style="margin: 20rpx;" >
<yUpload :width="40" :height="40" v-model="editor_upload" :size="4"></yUpload>
</view>
</view>
<view style="padding: 10px;">
<editor style="min-height: 70vh;" id="editor" class="ql-container"
placeholder="开始输入..." show-img-size show-img-toolbar
@statuschange="onStatusChange"
show-img-resize :read-only="false" @ready="onEditorReady">
</editor>
</view>
</view>
</wd-cell-group> </wd-cell-group>
<view class="footer mt-4"> <view class="footer mt-4">
<wd-button @click="saveGoods" type="primary" size="large" block>保存</wd-button> <wd-button @click="saveGoods" type="primary" size="large" block>保存</wd-button>
</view> </view>
</wd-form> </wd-form>
</view> </view>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import quill from "quill";
import { useToast, useMessage } from '@/uni_modules/wot-design-uni'; window.Quill = quill;
import goods from '@/api/mall/goods.js';
import system from '@/api/modules/system.js'; import {
import skuEdit from "./components/skuEdit.vue"; ref,
import yUpload from "@/components/yUpload/index.vue"; watch
import { onLoad, onShow } from "@dcloudio/uni-app"; } from 'vue';
import {
/** useToast,
useMessage
} from '@/uni_modules/wot-design-uni';
import goods from '@/api/mall/goods.js';
import system from '@/api/modules/system.js';
import skuEdit from "./components/skuEdit.vue";
import yUpload from "@/components/yUpload/index.vue";
import {
onLoad,
onShow
} from "@dcloudio/uni-app";
/**
* @typedef {import('@/api/mall/goods').GoodsItem} GoodsItem * @typedef {import('@/api/mall/goods').GoodsItem} GoodsItem
*/ */
/** /**
* @typedef {import('@/api/mall/goods').FreightRule} FreightRule * @typedef {import('@/api/mall/goods').FreightRule} FreightRule
*/ */
/** /**
* @typedef {Object} Sku * @typedef {Object} Sku
* @property {string} price - 商品价格 * @property {string} price - 商品价格
* @property {string} stock - 商品库存 * @property {string} stock - 商品库存
* @property {string} original_price - 商品原价 * @property {string} original_price - 商品原价
*/ */
/** /**
* @typedef {Object} Model * @typedef {Object} Model
* @property {number} id - 商品ID * @property {number} id - 商品ID
* @property {Array<string>} shop_classify_list - 商品分类组 * @property {Array<string>} shop_classify_list - 商品分类组
@ -184,42 +241,85 @@ import { onLoad, onShow } from "@dcloudio/uni-app";
* @property {number} check_price - 佣金 * @property {number} check_price - 佣金
*/ */
/** /**
* @typedef {Object} FileItem * @typedef {Object} FileItem
* @property {string} pic_url - 图片URL * @property {string} pic_url - 图片URL
*/ */
/** /**
* @typedef {Object} SkuGroup * @typedef {Object} SkuGroup
* @property {Array<Sku>} skuDefault - 默认规格 * @property {Array<Sku>} skuDefault - 默认规格
* @property {Array<Sku>} skuLibrary - 规格库 * @property {Array<Sku>} skuLibrary - 规格库
* @property {Array<Sku>} skuGroup - 规格组 * @property {Array<Sku>} skuGroup - 规格组
*/ */
/** /**
* @typedef {Object} SkuEditRef * @typedef {Object} SkuEditRef
* @property {SkuGroup} skuGroup - 规格组 * @property {SkuGroup} skuGroup - 规格组
* @property {number} skuDefault - 默认规格 * @property {number} skuDefault - 默认规格
* @property {number} skuLibrary - 规格库 * @property {number} skuLibrary - 规格库
*/ */
/** @type {Ref<Array<FileItem>>} */ /** @type {Ref<Array<FileItem>>} */
const fileList = ref([]); const fileList = ref([]);
/** /**
* @param {Object} param0 * @param {Object} param0
* @param {FileItem} param0.file - 要删除的文件 * @param {FileItem} param0.file - 要删除的文件
* @param {Function} param0.resolve - 删除文件的回调函数 * @param {Function} param0.resolve - 删除文件的回调函数
* @param {number} param0.index - 文件索引 * @param {number} param0.index - 文件索引
* @returns {void} * @returns {void}
*/ */
const beforeRemove = ({ file, resolve, index }) => { const beforeRemove = ({
file,
resolve,
index
}) => {
fileList.value.splice(index, 1); fileList.value.splice(index, 1);
resolve(true); resolve(true);
}; };
const editorCtx = ref(null);
const onEditorReady = () => {
// #ifdef MP-BAIDU
editorCtx.value = requireDynamicLib('editorLib').createEditorContext('editor');
// #endif
// #ifdef APP-PLUS || MP-WEIXIN || H5
uni.createSelectorQuery().select('#editor').context((res) => {
editorCtx.value = res.context
}).exec()
// #endif
}
const formats = ref({});
const onStatusChange = (e) => {
formats.value = e.detail
}
const format = (name, value) => {
editorCtx.value.format(name, value)
}
/** @type {Ref<Model>} */ const editor_upload = ref([]);
const model = ref({ watch(editor_upload, (newX) => {
if (newX && newX.length > 0) {
newX.forEach(item => {
editorCtx.value.insertImage({
src: item,
alt: '图像',
success: function() {
console.log('insert image success')
}
})
})
editor_upload.value = []
}
// console.log(newX, `newX is`)
})
/** @type {Ref<Model>} */
const model = ref({
classify_list: [], // classify_list: [], //
shop_classify_list: [], // shop_classify_list: [], //
name: "", // name: "", //
@ -241,28 +341,28 @@ const model = ref({
is_check: 0, // is_check: 0, //
check_type: 0, // check_type: 0, //
check_price: 0, // check_price: 0, //
}); });
/** @type {Ref<boolean>} */ /** @type {Ref<boolean>} */
const load = ref(false); const load = ref(false);
/** @type {Ref<SkuGroup>} */ /** @type {Ref<SkuGroup>} */
const skuGroup = ref([]); const skuGroup = ref([]);
/** @type {Ref<Array<GoodsItem>>} */ /** @type {Ref<Array<GoodsItem>>} */
const skuDefault = ref([]); const skuDefault = ref([]);
/** @type {Ref<Array<GoodsItem>>} */ /** @type {Ref<Array<GoodsItem>>} */
const skuLibrary = ref([]); const skuLibrary = ref([]);
/** @type {Ref<SkuEditRef>} */ /** @type {Ref<SkuEditRef>} */
const skuEditRef = ref(null); const skuEditRef = ref(null);
/** @type {Ref<Array<FreightRule>>} */ /** @type {Ref<Array<FreightRule>>} */
const freightRules = ref([{ const freightRules = ref([{
label: "默认", label: "默认",
value: "99999999" value: "99999999"
}]); }]);
onLoad(async (e) => { onLoad(async (e) => {
model.value.id = e.id; model.value.id = e.id;
/** /**
@ -291,7 +391,9 @@ onLoad(async (e) => {
}); });
model.value = res.data; model.value = res.data;
model.value.pic_list = res.data.pic_list.map(({ pic_url }) => pic_url); model.value.pic_list = res.data.pic_list.map(({
pic_url
}) => pic_url);
if (!model.value.freight_id) { if (!model.value.freight_id) {
model.value.freight_id = 99999999; model.value.freight_id = 99999999;
@ -307,17 +409,24 @@ onLoad(async (e) => {
skuLibrary.value = res.data.goods_sku; skuLibrary.value = res.data.goods_sku;
} }
skuGroup.value = res.data.sku_group ? res.data.sku_group : []; skuGroup.value = res.data.sku_group ? res.data.sku_group : [];
setTimeout(() => {
editorCtx.value.setContents({
html: res.data.detail
})
}, 1000)
load.value = true; load.value = true;
} else { } else {
load.value = true; load.value = true;
} }
}); });
/** /**
* 保存商品信息 * 保存商品信息
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
const saveGoods = async () => { const saveGoods = async () => {
// //
if (model.value.shop_classify_list.length === 0) { if (model.value.shop_classify_list.length === 0) {
return uni.showToast({ return uni.showToast({
@ -376,7 +485,8 @@ const saveGoods = async () => {
}); });
} }
if (!model.value.sku_list.every(item => Boolean(item.price !== "" && item.stock !== "" && item.original_price !== ""))) { if (!model.value.sku_list.every(item => Boolean(item.price !== "" && item.stock !== "" && item
.original_price !== ""))) {
uni.showToast({ uni.showToast({
title: '规格不完整,请调整!', title: '规格不完整,请调整!',
icon: 'none' icon: 'none'
@ -397,7 +507,21 @@ const saveGoods = async () => {
const shop_classify_list = model.value.shop_classify_list.map(item => JSON.parse(item)); const shop_classify_list = model.value.shop_classify_list.map(item => JSON.parse(item));
const classify_list = model.value.classify_list.map(item => JSON.parse(item)); const classify_list = model.value.classify_list.map(item => JSON.parse(item));
const res = await goods.goodsEdit({ ...model.value, pic_list, freight_id, shop_classify_list, classify_list }); let detail = ''
await editorCtx.value.getContents({
success(res) {
detail = res.html
}
})
const res = await goods.goodsEdit({
...model.value,
pic_list,
freight_id,
shop_classify_list,
classify_list,
detail
});
if (res.code == 0) { if (res.code == 0) {
uni.showToast({ uni.showToast({
@ -407,16 +531,16 @@ const saveGoods = async () => {
uni.navigateBack(); uni.navigateBack();
} }
}; };
/** @type {Ref<Array<Object>>} */ /** @type {Ref<Array<Object>>} */
const classifyList = ref([]); const classifyList = ref([]);
/** /**
* 获取商品分类 * 获取商品分类
* @returns {void} * @returns {void}
*/ */
const getClassify = () => { const getClassify = () => {
/** /**
* 递归展平商品分类 * 递归展平商品分类
* @param {Array<GoodsItem>} categories - 商品分类数组 * @param {Array<GoodsItem>} categories - 商品分类数组
@ -435,7 +559,9 @@ const getClassify = () => {
flatCategories.push(categoryWithParents); flatCategories.push(categoryWithParents);
if (category.children && category.children.length > 0) { if (category.children && category.children.length > 0) {
flatCategories = flatCategories.concat(flattenCategories(category.children, [...parentIds, category.id])); flatCategories = flatCategories.concat(flattenCategories(category.children, [...parentIds, category
.id
]));
} }
} }
@ -445,18 +571,18 @@ const getClassify = () => {
goods.classify.list().then(res => { goods.classify.list().then(res => {
classifyList.value = flattenCategories(res.data); classifyList.value = flattenCategories(res.data);
}); });
}; };
getClassify(); getClassify();
/** @type {Ref<Array<Object>>} */ /** @type {Ref<Array<Object>>} */
const classifySList = ref([]); const classifySList = ref([]);
/** /**
* 获取商品分类 * 获取商品分类
* @returns {void} * @returns {void}
*/ */
const getSClassify = () => { const getSClassify = () => {
/** /**
* 递归展平商品分类 * 递归展平商品分类
* @param {Array<GoodsItem>} categories - 商品分类数组 * @param {Array<GoodsItem>} categories - 商品分类数组
@ -475,7 +601,9 @@ const getSClassify = () => {
flatCategories.push(categoryWithParents); flatCategories.push(categoryWithParents);
if (category.children && category.children.length > 0) { if (category.children && category.children.length > 0) {
flatCategories = flatCategories.concat(flattenCategories(category.children, [...parentIds, category.id])); flatCategories = flatCategories.concat(flattenCategories(category.children, [...parentIds, category
.id
]));
} }
} }
@ -485,10 +613,11 @@ const getSClassify = () => {
goods.classify.Slist().then(res => { goods.classify.Slist().then(res => {
classifySList.value = flattenCategories(res.data); classifySList.value = flattenCategories(res.data);
}); });
}; };
getSClassify();
getSClassify();
</script> </script>
<style lang="scss"></style> <style lang="scss">
// @import "./editor-icon.css";
</style>

@ -43,9 +43,21 @@
</view> </view>
</wd-cell-group> </wd-cell-group>
<wd-input label="详细地址" label-width="100px" v-model="shopData.detail" use-suffix-slot> <wd-input label="详细地址" label-width="100px" v-model="shopData.detail" use-suffix-slot>
</wd-input> </wd-input>
<!-- 地址信息 -->
<wd-cell-group class="flex py-2 w-full" title="经纬度">
<view class="ml-3" style="display: flex;align-items: center;">
{{ shopData.latlngCurrent }}
<view>
<wd-button @click="getLoa"></wd-button>
</view>
</view>
</wd-cell-group>
<!-- 其他信息 --> <!-- 其他信息 -->
<wd-cell-group title="其他信息" border> <wd-cell-group title="其他信息" border>
<!-- 云喇叭通知表单项 --> <!-- 云喇叭通知表单项 -->
@ -92,24 +104,28 @@
</template> </template>
<script> <script>
import { ref } from 'vue'; import {
import yUpload from "@/components/yUpload/index.vue"; ref
import uniDataPicker from "@/components/uni-data-picker/components/uni-data-picker/uni-data-picker.vue"; } from 'vue';
import system from '@/api/modules/system.js'; import yUpload from "@/components/yUpload/index.vue";
import index from '@/api/mall/index.js'; import uniDataPicker from "@/components/uni-data-picker/components/uni-data-picker/uni-data-picker.vue";
import kevyloading from "@/components/kevy-loading/kevy-loading"; import system from '@/api/modules/system.js';
import utils from '@/utils/utils.js' import index from '@/api/mall/index.js';
import shop from '@/api/store/shop.js'; import kevyloading from "@/components/kevy-loading/kevy-loading";
import utils from '@/utils/utils.js'
import shop from '@/api/store/shop.js';
/** /**
* 从本地存储中获取用户信息 * 从本地存储中获取用户信息
*/ */
const user_info = uni.getStorageSync("user_info"); const user_info = uni.getStorageSync("user_info");
export default { export default {
components: { components: {
yUpload, uniDataPicker, kevyloading yUpload,
uniDataPicker,
kevyloading
}, },
data() { data() {
return { return {
@ -133,13 +149,22 @@ export default {
ali_express_app_code: '', ali_express_app_code: '',
zhangyou_device_name: '', zhangyou_device_name: '',
}, },
shippingOptions: [ shippingOptions: [{
{ label: "邮寄", value: 1 }, label: "邮寄",
{ label: "自提", value: 2 }, value: 1
},
{
label: "自提",
value: 2
},
], ],
// //
formRules: { formRules: {
name: [{ required: true, message: "请输入门店名称", trigger: "blur" }], name: [{
required: true,
message: "请输入门店名称",
trigger: "blur"
}],
// //
}, },
// //
@ -187,7 +212,9 @@ export default {
* 处理省市区选择 * 处理省市区选择
* @param {Object} detail - 选择器详细信息 * @param {Object} detail - 选择器详细信息
*/ */
select({ detail }) { select({
detail
}) {
if (detail.value.length) { if (detail.value.length) {
const [province_id, city_id, district_id] = detail.value.map( const [province_id, city_id, district_id] = detail.value.map(
(el) => el.value (el) => el.value
@ -200,6 +227,57 @@ export default {
} }
}, },
getLoa() {
let that = this
uni.getLocation({
type: 'wgs84',
success: function (res) {
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
that.shopData.latitude = res.latitude;
that.shopData.longitude = res.longitude;
that.shopData.latlngCurrent = res.latitude + ',' + res.longitude;
},
fail() {
uni.showToast({
icon: 'none',
title: '定位失败'
})
}
});
return
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
that.shopData.latitude = position.coords.latitude;
that.shopData.longitude = position.coords.longitude;
that.shopData.latlngCurrent = position.coords.latitude + ',' + position.coords.longitude;
console.log(position)
//
}, function(error) {
//
console.log(error)
uni.showToast({
icon: 'none',
title: '定位失败'
})
});
} else {
// Geolocation
console.log('浏览器不支持 Geolocation 接口')
uni.showToast({
icon: 'none',
title: '当前浏览器不支持定位'
})
}
},
/** /**
* 处理表单提交 * 处理表单提交
*/ */
@ -220,10 +298,9 @@ export default {
} }
}, },
}, },
}; };
</script> </script>
<style> <style>
/* 在这里添加样式,根据需要自定义表单样式 */ /* 在这里添加样式,根据需要自定义表单样式 */
</style> </style>

241
package-lock.json generated

@ -322,6 +322,18 @@
"update-browserslist-db": "^1.0.13" "update-browserslist-db": "^1.0.13"
} }
}, },
"call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"requires": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"set-function-length": "^1.2.1"
}
},
"camelcase-css": { "camelcase-css": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@ -398,6 +410,11 @@
} }
} }
}, },
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
},
"color-convert": { "color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@ -445,6 +462,39 @@
"ms": "2.1.2" "ms": "2.1.2"
} }
}, },
"deep-equal": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
"integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
"requires": {
"is-arguments": "^1.1.1",
"is-date-object": "^1.0.5",
"is-regex": "^1.1.4",
"object-is": "^1.1.5",
"object-keys": "^1.1.1",
"regexp.prototype.flags": "^1.5.1"
}
},
"define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"requires": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"gopd": "^1.0.1"
}
},
"define-properties": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"requires": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
}
},
"didyoumean": { "didyoumean": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@ -481,6 +531,19 @@
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true "dev": true
}, },
"es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
"requires": {
"get-intrinsic": "^1.2.4"
}
},
"es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
},
"escalade": { "escalade": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
@ -493,6 +556,21 @@
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true "dev": true
}, },
"eventemitter3": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
"integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg=="
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-diff": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
"integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
},
"fast-glob": { "fast-glob": {
"version": "3.3.2", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@ -561,8 +639,24 @@
"function-bind": { "function-bind": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
"dev": true },
"functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
},
"get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"requires": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
}
}, },
"glob": { "glob": {
"version": "10.3.10", "version": "10.3.10",
@ -592,21 +686,68 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true "dev": true
}, },
"gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"requires": {
"get-intrinsic": "^1.1.3"
}
},
"has-flag": { "has-flag": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true "dev": true
}, },
"has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"requires": {
"es-define-property": "^1.0.0"
}
},
"has-proto": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"requires": {
"has-symbols": "^1.0.3"
}
},
"hasown": { "hasown": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
"integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
"dev": true,
"requires": { "requires": {
"function-bind": "^1.1.2" "function-bind": "^1.1.2"
} }
}, },
"html5-qrcode": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz",
"integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ=="
},
"is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"is-binary-path": { "is-binary-path": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@ -625,6 +766,14 @@
"hasown": "^2.0.0" "hasown": "^2.0.0"
} }
}, },
"is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"requires": {
"has-tostringtag": "^1.0.0"
}
},
"is-extglob": { "is-extglob": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@ -652,6 +801,15 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true "dev": true
}, },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -810,6 +968,25 @@
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
"dev": true "dev": true
}, },
"object-is": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
"integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
"requires": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1"
}
},
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
},
"parchment": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
"integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
},
"path-key": { "path-key": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@ -942,6 +1119,29 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true "dev": true
}, },
"quill": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
"integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
"requires": {
"clone": "^2.1.1",
"deep-equal": "^1.0.1",
"eventemitter3": "^2.0.3",
"extend": "^3.0.2",
"parchment": "^1.1.4",
"quill-delta": "^3.6.2"
}
},
"quill-delta": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
"integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
"requires": {
"deep-equal": "^1.0.1",
"extend": "^3.0.2",
"fast-diff": "1.1.2"
}
},
"read-cache": { "read-cache": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@ -960,6 +1160,17 @@
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
} }
}, },
"regexp.prototype.flags": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
"integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"requires": {
"call-bind": "^1.0.6",
"define-properties": "^1.2.1",
"es-errors": "^1.3.0",
"set-function-name": "^2.0.1"
}
},
"resolve": { "resolve": {
"version": "1.22.8", "version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@ -1006,6 +1217,30 @@
} }
} }
}, },
"set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"requires": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.2"
}
},
"set-function-name": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"requires": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
"has-property-descriptors": "^1.0.2"
}
},
"shebang-command": { "shebang-command": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",

@ -8,6 +8,7 @@
}, },
"dependencies": { "dependencies": {
"html5-qrcode": "^2.3.8", "html5-qrcode": "^2.3.8",
"js-md5": "^0.8.3" "js-md5": "^0.8.3",
"quill": "^1.3.7"
} }
} }

Loading…
Cancel
Save