Browse Source

增加项目

qin_v8_isTrue
herenshan112 9 months ago
parent
commit
07d03a5de6
  1. 21
      src/api/common/tableButton.ts
  2. 1
      src/api/lowCode/form/type.ts
  3. 9
      src/components/lowCode/assistant/departmentOrg.vue
  4. 46
      src/components/lowCode/assistant/digitpage.vue
  5. 22
      src/components/lowCode/assistant/editTime.vue
  6. 7
      src/components/lowCode/assistant/founder.vue
  7. 6
      src/components/lowCode/assistant/founderTime.vue
  8. 121
      src/components/lowCode/assistant/quillEditor.vue
  9. 280
      src/components/lowCode/assistant/quillEditorNew.vue
  10. 2
      src/components/lowCode/assistant/tinymce.vue
  11. 6
      src/components/lowCode/assistant/uploadPage.vue
  12. 19
      src/components/lowCode/assistant/videoUpAndPlay.vue
  13. 30
      src/components/lowCode/formItem.vue
  14. 20
      src/utils/pinia/stores/modules/userOrders.ts
  15. 2
      src/utils/router/index.ts
  16. 67
      src/views/formTable/myTask.vue
  17. 15
      src/views/formTable/page/calendar.vue
  18. 76
      src/views/formTable/page/calendar/itemPage.vue
  19. 102
      src/views/formTable/page/calendar/weekPage.vue
  20. 2
      src/views/formTable/page/flowAndLog.vue
  21. 4
      src/views/formTable/taskListPage.vue
  22. 10
      src/views/login/index.vue
  23. 48
      src/views/login/unconLogin.vue

21
src/api/common/tableButton.ts

@ -0,0 +1,21 @@
export interface tableButton {
control: any;
id?: string;
name?: string;
field?: string;
type?: string;
attribute:string;
pattern?: string;
fieldClass?: string;
activeValue?: string;
inactiveValue?: string;
options?: optionsInfo[];
config?:any;
label?: string;
}
export interface optionsInfo {
label: string;
value: string;
}

1
src/api/lowCode/form/type.ts

@ -70,6 +70,7 @@ export interface tableFormStruct {
},
dict: Object,
refreshTable: boolean,
isOpen:boolean,
view:{
list:{
status:boolean,

9
src/components/lowCode/assistant/departmentOrg.vue

@ -188,6 +188,7 @@ const orgTreeProps ={
}
</script>
<template>
<div class="inputbox">
<el-tree-select
v-loading="peopleLoading"
element-loading-text="Loading..."
@ -198,10 +199,12 @@ const orgTreeProps ={
:filterable="true"
node-key="id"
clearable
:disabled="type == 4"
disabled
/>
</div>
</template>
<style lang='scss' scoped>
.inputbox{
width:100%;
}
</style>

46
src/components/lowCode/assistant/digitpage.vue

@ -49,9 +49,53 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
return AnalysisInputCss(ele?.inputStyle,sty)
}
}
const config = computed(() => {
return props.data.config || {}
})
/****input slot处理***/
const getInputSlot = (key?: string) => {
const slot = key === 'p' ? config.value.prepend : config.value.append
const has = slot.indexOf('key:') === 0
if (!has) {
return false
}
const slotKey = slot.replace('key:', '')
const control = getControlByName(slotKey)
if (!control || Object.keys(control)?.length === 0) {
return false
}
return control
}
</script>
<template>
<el-input v-bind="$props" v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" oninput ="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^\./g, '')" placeholder="请输入"></el-input>
<el-input v-bind="$props" v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" oninput ="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^\./g, '')" placeholder="请输入">
<template #prepend v-if="config.prepend">
<div v-if="getInputSlot('p')">
<SelectDesign
:data="getInputSlot('p')"
:disabled="judgeIsDisabled(data.name)"
:transform-option="transformOption"
@change="inputSlotChange"
type="slot"
/>
</div>
<span v-else>{{ config.append }}</span>
</template>
<template #append v-if="config.append">
<div v-if="getInputSlot()">
<SelectDesign
:data="getInputSlot()"
:disabled="judgeIsDisabled(data.name)"
:transform-option="transformOption"
@change="inputSlotChange"
type="slot"
/>
</div>
<span v-else>{{ config.append }}</span>
</template>
</el-input>
</template>
<style lang='scss' scoped>

22
src/components/lowCode/assistant/editTime.vue

@ -132,7 +132,11 @@ const value = computed({
if(zhiVal != null && zhiVal != "") {
zhiVal=zhiVal*1
}
if(zhiVal != null && zhiVal != "") {
return unixTimeToDayTime(zhiVal)
}else{
return getCurrentTime()
}
}
},
set(newVal: any) {
@ -184,10 +188,26 @@ const updateModel = (val: any) => {
attribute: controlAttribute
})
}
//
const getCurrentTime = () => {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1; // 0
const day = now.getDate();
const hours = now.getHours();
const minutes = now.getMinutes();
const seconds = now.getSeconds();
return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
}
</script>
<template>
<div class="inputbox">
<el-input v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" placeholder="系统自动生成" disabled></el-input>
</div>
</template>
<style lang='scss' scoped>
.inputbox{
width:100%;
}
</style>

7
src/components/lowCode/assistant/founder.vue

@ -171,7 +171,9 @@ const getFormFounder = (val: any) => {
}
</script>
<template>
<el-input v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" placeholder="系统自动生成" disabled ></el-input>
<div class="inputbox">
<el-input disabled v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" placeholder="系统自动生成" ></el-input>
</div>
</template>
<style lang='scss' scoped>
.el-form-item--default{
@ -180,4 +182,7 @@ const getFormFounder = (val: any) => {
.el-form-item{
margin-bottom: 0px;
}
.inputbox{
width:100%;
}
</style>

6
src/components/lowCode/assistant/founderTime.vue

@ -174,8 +174,12 @@ const getCurrentTime = () => {
}
</script>
<template>
<div class="inputbox">
<el-input v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" placeholder="系统自动生成" disabled></el-input>
</div>
</template>
<style lang='scss' scoped>
.inputbox{
width:100%;
}
</style>

121
src/components/lowCode/assistant/quillEditor.vue

@ -0,0 +1,121 @@
<!--
@ 作者: 秦东
@ 时间: 2025-03-07 08:45:16
@ 备注: Quill 富文本
-->
<script lang='ts' setup>
import { ref } from 'vue';
//
import { Quill, QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
//
import BlotFormatter from 'quill-blot-formatter'
Quill.register('modules/blotFormatter', BlotFormatter)
//
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
const props = withDefaults(
defineProps<{
modelValue: string
placeholder?: string
width?: string
height?: string
blobUrl?: string
imgUrl?: string
config?: any
type?: number
}>(),
{
modelValue: '',
placeholder: '请输入内容',
width: '100%',
height: '300px',
blobUrl: '',
imgUrl: '',
type:1,
config: () => {
return {}
}
}
)
const emits = defineEmits<{
(e: 'update:modelValue', value: string): void
}>()
// const content = ref(props.modelValue);
const content = computed({
get() {
return props.modelValue
},
set(newVal: any) {
emits('update:modelValue', newVal)
}
})
const toolbarOptions = [
['bold', 'italic', 'underline'],
[{ 'header': [1, 2, 3, false] }],
['image', 'code-block']
];
const handleEditorReady = (editor) => {
console.log('Editor实例:', editor);
};
watch(
() => props.modelValue,
(n: any) => {
if (n && n !== content.value) {
content.value = n
}
}
)
</script>
<template><div class="butBox" @click="openVideo">按钮</div>
<div v-if="type==1 || type == 5" class="edioBox">
<QuillEditor
v-model:content="content"
contentType="html"
:toolbar="toolbarOptions"
@ready="handleEditorReady"
/>
</div>
<div v-else class="edioBoxHtml" v-html="content"></div>
</template>
<style lang='scss' scoped>
.butBox{
width:150px;
height: 50px;
background-color: #FB041A;
display:none;
}
.edioBoxHtml{
width: 100%;
}
.edioBox{
width: 100%;
height: 350px;
.ql-toolbar{
.ql-snow{
height: 300px;
}
}
:deep .ql-toolbar.ql-snow + .ql-container.ql-snow{
height: 300px;
}
}
.ql-editor.ql-fullscreen {
position: fixed;
top: 0;
left: 0;
z-index: 9999;
}
.ql-container {
user-select: auto !important;
-webkit-user-select: auto !important;
}
</style>

280
src/components/lowCode/assistant/quillEditorNew.vue

@ -0,0 +1,280 @@
<!--
@ 作者: 秦东
@ 时间: 2025-03-07 09:23:53
@ 备注:
-->
<script lang='ts' setup>
//
import { Quill, QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
import { newUploadFileApi } from '@/api/common/public'
//
import BlotFormatter from 'quill-blot-formatter'
Quill.register('modules/blotFormatter', BlotFormatter)
const props = withDefaults(
defineProps<{
modelValue: string
placeholder?: string
width?: string
height?: string
blobUrl?: string
imgUrl?: string
config?: any
type?: number
}>(),
{
modelValue: '',
placeholder: '请输入内容',
width: '100%',
height: '300px',
blobUrl: '',
imgUrl: '',
type:1,
config: () => {
return {}
}
}
)
const emits = defineEmits<{
(e: 'update:modelValue', value: string): void
}>()
// const content = ref(props.modelValue);
const content = computed({
get() {
return props.modelValue
},
set(newVal: any) {
emits('update:modelValue', newVal)
}
})
const editorRef = ref(null)
//
const imageHandler = () => {
//
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
//
input.click();
//
input.onchange = async () => {
//
const file = input.files ? input.files[0] : null;
if (file) {
// FormData
const formData = new FormData();
formData.append('file', file);
formData.append('type',"1")
try {
newUploadFileApi(formData)
.then(res =>{
// console.log("",res.data)
// resolve(res.data.url)
const quill = toRaw(editorRef.value).getQuill()
if (quill) {
//
const range = quill.getSelection(true);
//
quill.insertEmbed(range.index, 'image',res.data.url);
}
})
.catch(()=>{
// reject('')
alert('上传出错,请查看你上传的文件是否符合要求!')
})
} catch (error) {
alert('图片上传失败')
}
// try {
// /**
// * @todo file线
// * abc,使 axios POST
// * */
// // todo
// // 使 axios POST ,abc
// // file线
// const res = await abc(formData);
// // Quill
// const quill = toRaw(editorRef.value).getQuill()
// if (quill) {
// //
// const range = quill.getSelection(true);
// //
// quill.insertEmbed(range.index, 'image', res.data);
// }
// } catch (error) {
// alert('')
// }
}
};
}
// toolbar,
const titleConfig = [
{ Choice: '.ql-insertMetric', title: '跳转配置' },
{ Choice: '.ql-bold', title: '加粗' },
{ Choice: '.ql-italic', title: '斜体' },
{ Choice: '.ql-underline', title: '下划线' },
{ Choice: '.ql-header', title: '段落格式' },
{ Choice: '.ql-strike', title: '删除线' },
{ Choice: '.ql-blockquote', title: '块引用' },
{ Choice: '.ql-code', title: '插入代码' },
{ Choice: '.ql-code-block', title: '插入代码段' },
{ Choice: '.ql-font', title: '字体' },
{ Choice: '.ql-size', title: '字体大小' },
{ Choice: '.ql-list[value="ordered"]', title: '编号列表' },
{ Choice: '.ql-list[value="bullet"]', title: '项目列表' },
{ Choice: '.ql-direction', title: '文本方向' },
{ Choice: '.ql-header[value="1"]', title: 'h1' },
{ Choice: '.ql-header[value="2"]', title: 'h2' },
{ Choice: '.ql-align', title: '对齐方式' },
{ Choice: '.ql-color', title: '字体颜色' },
{ Choice: '.ql-background', title: '背景颜色' },
{ Choice: '.ql-image', title: '图像' },
{ Choice: '.ql-video', title: '视频' },
{ Choice: '.ql-link', title: '添加链接' },
{ Choice: '.ql-formula', title: '插入公式' },
{ Choice: '.ql-clean', title: '清除字体格式' },
{ Choice: '.ql-script[value="sub"]', title: '下标' },
{ Choice: '.ql-script[value="super"]', title: '上标' },
{ Choice: '.ql-indent[value="-1"]', title: '向左缩进' },
{ Choice: '.ql-indent[value="+1"]', title: '向右缩进' },
{ Choice: '.ql-header .ql-picker-label', title: '标题大小' },
{ Choice: '.ql-header .ql-picker-item[data-value="1"]', title: '标题一' },
{ Choice: '.ql-header .ql-picker-item[data-value="2"]', title: '标题二' },
{ Choice: '.ql-header .ql-picker-item[data-value="3"]', title: '标题三' },
{ Choice: '.ql-header .ql-picker-item[data-value="4"]', title: '标题四' },
{ Choice: '.ql-header .ql-picker-item[data-value="5"]', title: '标题五' },
{ Choice: '.ql-header .ql-picker-item[data-value="6"]', title: '标题六' },
{ Choice: '.ql-header .ql-picker-item:last-child', title: '标准' },
{ Choice: '.ql-size .ql-picker-item[data-value="small"]', title: '小号' },
{ Choice: '.ql-size .ql-picker-item[data-value="large"]', title: '大号' },
{ Choice: '.ql-size .ql-picker-item[data-value="huge"]', title: '超大号' },
{ Choice: '.ql-size .ql-picker-item:nth-child(2)', title: '标准' },
{ Choice: '.ql-align .ql-picker-item:first-child', title: '居左对齐' },
{ Choice: '.ql-align .ql-picker-item[data-value="center"]', title: '居中对齐' },
{ Choice: '.ql-align .ql-picker-item[data-value="right"]', title: '居右对齐' },
{ Choice: '.ql-align .ql-picker-item[data-value="justify"]', title: '两端对齐' }
]
//
const options = ref({
theme: 'snow', // 使snow
modules: {
//
toolbar: {
container: [
['bold', 'italic', 'underline', 'strike'], // 线 线
[{ color: [] }, { background: [] }], //
[{ align: [] }], //
[{ size: ['small', false, 'large', 'huge'] }], //
[{ font: [] }], //
[{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ direction: 'ltl' }], //
[{ direction: 'rtl' }], //
[{ indent: '-1' }, { indent: '+1' }], //
[{ list: 'ordered' }, { list: 'bullet' }], //
[{ script: 'sub' }, { script: 'super' }], // /
['blockquote', 'code-block'], //
['clean'], //
['link', 'image', 'video'], //
],
handlers: {
image: imageHandler, //
},
},
//
blotFormatter: {
//
// overlay: {
// style: {
// border: '2px solid red',
// }
// },
toolbar: {
mainClassName: 'blot-formatter__toolbar'
}
}
}
})
// imageHandler options
//
const initTitle = () => {
for (let item of titleConfig) {
// .editor
let tip = document.querySelector('.editor ' + item.Choice);
if (tip) {
tip.setAttribute('title', item.title);
}
}
}
//
const customPaste=(e)=>{
//
let newTime = new Date().getTime()
const clipboardData = e.clipboardData //
const types = clipboardData.types //
if (types.includes('Files')) {
e.preventDefault();
e.clipboardData.files.forEach(file=>{
//
//
})
}
}
onMounted(()=>{
nextTick(()=>{
//
initTitle()
})
//
editorRef.value.getQuill().root.addEventListener('customPaste', customPaste, false)
})
watch(
() => props.modelValue,
(n: any) => {
if (n && n !== content.value) {
content.value = n
}
}
)
</script>
<template><div class="butBox" @click="openVideo">按钮</div>
<div class="editor">
<!-- 这两个都是获取值的必要条件 v-model:content contentType="html" -->
<quill-editor
ref="editorRef"
v-model:content="content"
:options="options"
contentType="html"
></quill-editor>
</div>
</template>
<style lang='scss' scoped>
.editor{
width: 100%;
:deep(.ql-editor) {
min-height: 200px;
}
}
.butBox{
width:150px;
height: 50px;
background-color: #FB041A;
display:none;
}
</style>

2
src/components/lowCode/assistant/tinymce.vue

@ -4,6 +4,8 @@
@ 备注: 富文本
-->
<script lang='ts' setup>
import { onMounted, watch, ref, computed, onUnmounted } from 'vue'
import { ElMessage } from 'element-plus'
import { newUploadFileApi } from '@/api/common/public'
const props = withDefaults(
defineProps<{

6
src/components/lowCode/assistant/uploadPage.vue

@ -150,7 +150,9 @@ const uploadSuccess = (response: any, uploadFile: any, uploadFiles: any) => {
:on-success="uploadSuccess"
:on-remove="uploadRemove"
>
<i class="icon-plus" v-if="props.control?.listType=='picture-card'"></i>
<i class="icon-plus" v-if="props.control?.listType=='picture-card'">
<i class="fa fa-upload"></i>
</i>
<el-button type="primary" plain v-else-if="props.control?.listType=='picture'">
<span v-if="props.config?.btnText">{{ props.config?.btnText }} </span>
<span class="fa fa-plus" v-else></span>
@ -159,7 +161,7 @@ const uploadSuccess = (response: any, uploadFile: any, uploadFiles: any) => {
<el-button type="primary" plain v-if="props.config?.btnText">
{{ props.config?.btnText }}
</el-button>
<i class="icon-plus" v-else></i>
<i class="fa fa-upload" v-else></i>
</template>
<template #tip v-if="props.config?.tip">
<div class="el-upload__tip">

19
src/components/lowCode/assistant/videoUpAndPlay.vue

@ -41,18 +41,33 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
return AnalysisInputCss(ele?.inputStyle,sty)
}
}
const openVideo = () => {
console.log("单机播放")
}
</script>
<template>
<div class="butBox" @click="openVideo">按钮</div>
<div>
<video
:src="data?.control.videoMsg[0].url"
:loop="data?.control.videoMsg[0].loop"
:autoplay="data?.control.videoMsg[0].videoAutoPlay"
:style="getFormItemInputStyle(configStyle,2)"
controls
>
<source :src="data?.control.videoMsg[0].url" type="video/mp4">
您的浏览器不支持 HTML5 标签
</video>
</div>
</template>
<style lang='scss' scoped>
.butBox{
width:150px;
height: 50px;
background-color: #FB041A;
display:none;
}
</style>

30
src/components/lowCode/formItem.vue

@ -20,7 +20,7 @@ import wx from 'weixin-js-sdk'
import request from '@/utils/axios/index'
import { Md5 } from 'ts-md5'
import { debounce } from '@/utils/lowCode/item/index'
import { uploadUrl } from '@/api/lowCode/form/fieldUnit'
//
import OrgCitys from '@/components/lowCode/assistant/orgCitys.vue'
import UploadPage from '@/components/lowCode/assistant/uploadPage.vue'
@ -43,7 +43,8 @@ import UrlLink from '@/components/lowCode/assistant/urlLink.vue'
import DepartmentOrg from '@/components/lowCode/assistant/departmentOrg.vue'
import DigitpagePage from '@/components/lowCode/assistant/digitpage.vue'
import OrgCentent from '@/components/lowCode/assistant/org.vue'
import Tinymce from '@/components/lowCode/assistant/tinymce.vue'
import QuillEditor from '@/components/lowCode/assistant/quillEditorNew.vue'
const props = withDefaults(
@ -505,6 +506,9 @@ const currentComponent = computed(() => {
if (props.data.type === "baidumap") {
return markRaw(BaiDuMap);
}
if (props.data.type === "tinymce"){
return markRaw(QuillEditor);
}
if (props.data.type === "owner") {
return markRaw(OwnerPage);
}
@ -549,6 +553,7 @@ const currentComponent = computed(() => {
}
return `el-${props.data.type}`
})
</script>
<template>
<div>
@ -558,6 +563,7 @@ const currentComponent = computed(() => {
<template v-if="data.type=='index'">
</template>
<template class="form-value" v-else>
<el-form-item
v-bind="data.item"
:prop="tProp || data.name"
@ -593,7 +599,7 @@ const currentComponent = computed(() => {
type="slot"
/>
</div>
<span v-else>{{ config.append }}</span>
<span v-else>{{ config.prepend }}</span>
</template>
<template #append v-if="config.append">
<div v-if="getInputSlot()">
@ -872,7 +878,23 @@ const currentComponent = computed(() => {
v-model="value"
/>
<!--富文本-->
<div class="form-value" v-else-if="data.type == 'tinymce'" v-html="value"></div>
<component
v-if="['tinymce'].includes(data.type)"
:is="currentComponent"
v-bind="control"
:disabled="judgeIsDisabled(data.name)"
:placeholder="
data.control.placeholder
? data.control.placeholder
: '请选择' + getLabel(data.item)
"
:data="data"
:type="type"
:tablekey="props.tablekey"
:form-table-set-up="props.alldata"
v-model="value"
/>
<!--地图-->
<component
v-if="['baidumap'].includes(data.type)"

20
src/utils/pinia/stores/modules/userOrders.ts

@ -75,12 +75,16 @@ export const userStror = defineStore("user",() => {
@ 功能: 判断是否已经登录
*/
function judgeIsLogin(userKey?:string,token?:string){
// console.log("判断是否已经登录:",userKeying.value,"------------->",userToken);
console.log("判断是否已经登录:",userKey,"------1------->",token);
console.log("判断是否已经登录:",userKeying.value,"------2------>",userToken.value);
if(userKeying.value == "" || userKeying.value == "" || userKeying.value ==""){
if(userKey != null && userKey != "" && token != null && token != ""){
userKeying.value = userKey
userToken.value = token
tokenIng.value = token
console.log("判断是否已经登录:",userKeying.value,"-------3------>",userToken.value,"-------3------>",tokenIng);
// resolve();
return true
}else{
return false
@ -97,14 +101,14 @@ export const userStror = defineStore("user",() => {
function getInfo() {
return new Promise<UserInfo>((resolve, reject) => {
getUserInfoIng()
.then(({data})=>{
.then((data:any)=>{
// console.log("获取用户信息:角色必须是非null数组!",data);
nickname.value = data.nickname;
avatar.value = data.avatar;
roles.value = data.roles;
perms.value = data.perms;
userInfoCont.value = data
resolve(data);
nickname.value = data.data.nickname;
avatar.value = data.data.avatar;
roles.value = data.data.roles;
perms.value = data.data.perms;
userInfoCont.value = data.data
resolve(data.data);
})
.catch((error:any) => {
reject(error);

2
src/utils/router/index.ts

@ -1,4 +1,4 @@
import { createRouter,createWebHistory,createWebHashHistory,RouteRecordRaw } from "vue-router";
import { createRouter,createWebHashHistory,RouteRecordRaw } from "vue-router";
//进度条
import NProgress from "nprogress";
import "nprogress/nprogress.css";

67
src/views/formTable/myTask.vue

@ -61,10 +61,12 @@ const gainAppTaskList = () => {
if(data.data.list){
appTaskList.value.push(...data.data.list)
}
if(data.total > 0){
if(logCount.value < data.total){
let pagenum = searchInfo.pagesize - data.count
let allPageCount = data.data.total
console.log("获取任务列表内容=====111======>",allPageCount,logCount.value)
if(allPageCount > 0){
if(logCount.value < allPageCount){
let pagenum = searchInfo.pagesize - data.data.count
console.log("获取任务列表内容====pagenum=======>",pagenum)
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
@ -73,8 +75,15 @@ const gainAppTaskList = () => {
loadingList.value = false
}
}else{
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum < 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
}
}else{
loadText.value = "此选项没有数据!"
@ -92,9 +101,9 @@ const gainAppTaskList = () => {
appTaskList.value.push(...data.data.list)
}
if(data.total > 0){
if(logCount.value < data.total){
let pagenum = searchInfo.pagesize - data.count
if(data.data.total > 0){
if(logCount.value < data.data.total){
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
@ -103,8 +112,14 @@ const gainAppTaskList = () => {
loadingList.value = false
}
}else{
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum < 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
}
}else{
loadText.value = "此选项没有数据!"
@ -122,9 +137,9 @@ const gainAppTaskList = () => {
appTaskList.value.push(...data.data.list)
}
if(data.total > 0){
if(logCount.value < data.total){
let pagenum = searchInfo.pagesize - data.count
if(data.data.total > 0){
if(logCount.value < data.data.total){
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
@ -133,8 +148,14 @@ const gainAppTaskList = () => {
loadingList.value = false
}
}else{
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum < 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
}
}else{
loadText.value = "此选项没有数据!"
@ -153,9 +174,9 @@ const gainAppTaskList = () => {
appTaskList.value.push(...data.data.list)
}
if(data.total > 0){
if(logCount.value < data.total){
let pagenum = searchInfo.pagesize - data.count
if(data.data.total > 0){
if(logCount.value < data.data.total){
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
@ -164,8 +185,14 @@ const gainAppTaskList = () => {
loadingList.value = false
}
}else{
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum < 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
}
}else{
loadText.value = "此选项没有数据!"
@ -178,11 +205,11 @@ const gainAppTaskList = () => {
gainAppAllTaskList(searchInfo)
.then(({data}) => {
console.log("获取列表内容",data)
logCount.value = logCount.value + data.count
logCount.value = logCount.value + data.data.count
appTaskList.value.push(...data.list)
if(data.total > 0){
if(logCount.value < data.total){
let pagenum = searchInfo.pagesize - data.count
if(data.data.total > 0){
if(logCount.value < data.data.total){
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
@ -191,8 +218,14 @@ const gainAppTaskList = () => {
loadingList.value = false
}
}else{
let pagenum = searchInfo.pagesize - data.data.count
if (pagenum < 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
}
}else{
loadText.value = "此选项没有数据!"

15
src/views/formTable/page/calendar.vue

@ -64,7 +64,7 @@ const lookInfo = ref<any>({})
const monthPageRef = ref(null)
const weekPageRef = ref(null)
const dayPageRef = ref(null)
const taskScrollbarzf = ref(null)
const searchSend = reactive({
formId: props.appId,
@ -192,7 +192,12 @@ const goTady = () => {
let time = taday.value[0] + "-" + clockFactory(taday.value[1]) + "-" + clockFactory(taday.value[2])
emit('getDate', time);
}
const requeryList = () => {
taskScrollbarzf.value.searchatMonthList()
}
defineExpose({
requeryList
})
</script>
<template>
<div>
@ -213,9 +218,9 @@ const goTady = () => {
</el-button-group>
</div>
</div>
<MonthPage v-if="curtteDayType==1" :ta-day="taday" :search-send="searchSend" />
<WeekPage v-if="curtteDayType==2" :ta-day="taday" :search-send="searchSend" />
<DayPage v-if="curtteDayType==3" :ta-day="taday" :search-send="searchSend" />
<MonthPage ref="taskScrollbarzf" v-if="curtteDayType==1" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" :ta-day="taday" :search-send="searchSend" />
<WeekPage ref="taskScrollbarzf" v-if="curtteDayType==2" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" :ta-day="taday" :search-send="searchSend" />
<DayPage ref="taskScrollbarzf" v-if="curtteDayType==3" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" :ta-day="taday" :search-send="searchSend" />
<AppPageInfo v-model:is-show="openAppPage" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" @searchData="searchSend" />
</div>
</template>

76
src/views/formTable/page/calendar/itemPage.vue

@ -6,6 +6,8 @@
<script lang='ts' setup>
import { PropType } from 'vue';
import DateClass from '@/api/common/calendar/DateClass';
import AppPageInfo from '@/views/formTable/pageInfo.vue'
const props = defineProps({
col: {
type: Object as PropType<dateBase>,
@ -26,6 +28,48 @@ const props = defineProps({
default(){
return {}
}
},
appKey:{
type:String,
default:""
},
appId:{
type:String,
default:""
},
taskTitle:{
type:String,
default:""
},
taskId:{
type:String,
default:""
},
taskKey:{
type:String,
default:""
},
stateListInfo:{
type:Object,
default(){
return {}
}
},
stateForm:{
type:Object,
default(){
return {}
}
},
appFlowInfo:{
type:Object,
default(){
return {}
}
},
formTableStr:{
type:String,
default:"",
}
});
@ -82,18 +126,46 @@ const writeListTitle = (val: any) => {
@ 功能: 打开表单
*/
const lookPageInfo = (val:any) => {
// console.log("2222222222:",val)
console.log("2222222222:",val)
props.stateForm.type=3
lookInfo.value = val
openAppPage.value = true
}
const lookInfo = ref<any>({})
const openAppPage = ref(false)
const appContent = reactive<any>({
appKey:props.appKey,
appId:props.appId,
taskTitle:props.taskTitle,
taskId:props.taskId,
taskKey:props.taskKey,
})
/**
@ 作者: 秦东
@ 时间: 2024-11-13 08:14:52
@ 功能:
*/
const changeTargetDate = (val:any) => {
// console.log("11111111111111111:",val)
console.log("11111111111111111:",val)
}
/**
@ 作者: 秦东
@ 时间: 2024-11-21 14:00:41
@ 功能: 重置查询列表
*/
const requeryList = () => {
console.log("重置查询列表:")
state.page = 1
tableDataList.value = []
nextTick(() => {
searchatWeekList()
})
}
</script>
<template>
<AppPageInfo v-model:is-show="openAppPage" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="props.formTableStr" @searchData="requeryList" />
<div
class="calendar-item-container"
:class="[

102
src/views/formTable/page/calendar/weekPage.vue

@ -26,7 +26,45 @@ const props = defineProps({
default() {
return {};
},
},
appKey:{
type:String,
default:""
},
appId:{
type:String,
default:""
},
taskTitle:{
type:String,
default:""
},
taskId:{
type:String,
default:""
},
taskKey:{
type:String,
default:""
},
stateListInfo:{
type:Object,
default(){
return {}
}
},
stateForm:{
type:Object,
default(){
return {}
}
},
appFlowInfo:{
type:Object,
default(){
return {}
}
},
});
const taday = ref<any>([]);
//
@ -41,7 +79,13 @@ onMounted(()=>{
// selectedTime.value = props.taDay[0] + "-" + clockFactory(props.taDay[1]) + "-" + clockFactory(props.taDay[2])
// })
})
const appContent = reactive<any>({
appKey:props.appKey,
appId:props.appId,
taskTitle:props.taskTitle,
taskId:props.taskId,
taskKey:props.taskKey,
})
/**
@ 作者: 秦东
@ 时间: 2024-07-16 11:53:35
@ -98,7 +142,7 @@ defineExpose({
v-for="(item, index) in WeekBody"
:key="index"
>
<ItemPage :col="item" />
<ItemPage :col="item" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" @searchatWeekList="searchatWeekList" />
</div>
</template>
<template v-else>
@ -128,31 +172,47 @@ defineExpose({
}
.t-calendar-day {
display: flex;
flex-direction: column;
width: 100%;
height: calc(100% - 42px);
.t-calendar-row {
width: 100%;
height: 60px;
display: flex;
flex: 1;
border-bottom: 1px solid #ebeef5;
.t-calendar-col{
padding: 0;
box-sizing: border-box;
flex: 1;
border-left: 1px solid #ebeef5;
padding: 2px;
font-size: 16px;
transition: all 0.2s;
width: calc(100%/7);
}
.t-calendar-col:last-child {
border-right: 1px solid #ebeef5;
}
}
.t-calendar-row:first-child {
.t-calendar-row {
width: calc(100%/7);
font-size: 0.95rem;
border-bottom: 1px solid #ebeef5;
border-top: 1px solid #ebeef5;
border-left: 1px solid #ebeef5;
}
}
// .t-calendar-day {
// display: flex;
// flex-direction: column;
// width: 100%;
// height: calc(100% - 42px);
// .t-calendar-row {
// width: calc(100%/7);
// height: 60px;
// display: flex;
// flex: 1;
// border-bottom: 1px solid #ebeef5;
// .t-calendar-col{
// box-sizing: border-box;
// flex: 1;
// border-left: 1px solid #ebeef5;
// padding: 2px;
// font-size: 16px;
// transition: all 0.2s;
// width: calc(100%/7);
// }
// .t-calendar-col:last-child {
// border-right: 1px solid #ebeef5;
// }
// }
// .t-calendar-row:first-child {
// border-top: 1px solid #ebeef5;
// }
// }
}
</style>

2
src/views/formTable/page/flowAndLog.vue

@ -116,7 +116,7 @@ const newAddPageData = () => {
}else{
console.log("获取流程==2=1=>",props.appPageInfo)
if(props.appPageInfo && props.appPageInfo.runFlowId && props.appPageInfo.runFlowId != "0" && props.appPageInfo.runFlowId != ""){
gainRunTaskFlow({id:props.appPageInfo.runFlowIdStr})
gainRunTaskFlow({id:props.appPageInfo.runFlowId})
.then(({data})=>{
console.log("获取流程==2==>",data)
flowMap.value = data.flowList

4
src/views/formTable/taskListPage.vue

@ -451,10 +451,10 @@ const setUpClick = (val:string,id:string) => {
message: data.mag,
type: "success",
});
cardPageRef.value.getPageData();
cardPageRef.value.requeryList();
});
}).catch(() => {
cardPageRef.value.getPageData();
cardPageRef.value.requeryList();
});
}else{
ElMessage.error("你还未选中要删除的项目!");

10
src/views/login/index.vue

@ -37,7 +37,7 @@ const getSignCode = () => {
}
onBeforeMount(() => {
xingzhi.value = judgingEnvironment();
// xingzhi.value = judgingEnvironment();
// console.log("==============>",route.query.userkey,route.query.token)
// if(!userPinia.judgeIsLogin(route.query.userkey,route.query.token)){
@ -54,7 +54,9 @@ onBeforeMount(() => {
// userPinia.getInfo()
// router.push('/')
// }
xingzhi.value = 2
xingzhi.value = 1
getSignCode()
})
const loginForm = ref(ElForm); //
@ -146,9 +148,9 @@ const judgingEnvironment = () => {
return 3;
}
</script>
<template>{{xingzhi}}
<template>
<div class="appBodyBeiJing appBody contentCenter">
<el-card v-if="xingzhi==1" v-loading="true" element-loading-text="身份验证中!请耐心等待!..." style="max-width: 90%; min-width:80%; height:250px; background-color: rgba(255,255,255,0.1); border: rgba(255,255,255,0.1);" element-loading-background="rgba(255,255,255,0.6)">
<el-card v-if="xingzhi==3" v-loading="true" element-loading-text="身份验证中!请耐心等待!..." style="max-width: 90%; min-width:80%; height:250px; background-color: rgba(255,255,255,0.1); border: rgba(255,255,255,0.1);" element-loading-background="rgba(255,255,255,0.6)">
</el-card>
<el-card v-else style="max-width: 90%; background-color: rgba(255,255,255,0.6); border: rgba(255,255,255,0.6);">
<template #header>

48
src/views/login/unconLogin.vue

@ -0,0 +1,48 @@
<!--
@ 作者: 秦东
@ 时间: 2025-03-10 09:03:40
@ 备注: 无感登陆
-->
<script lang='ts' setup>
import { useRoute,useRouter } from 'vue-router'
import { userStror } from "@/utils/pinia/stores/modules/userOrders";
const userPinia = userStror();
const router = useRouter()
const route = useRoute()
const loading = ref(true)
onBeforeMount(() => {
console.log("------------------------------------------>",userPinia.judgeIsLogin(route.query.userkey,route.query.token))
if(!userPinia.judgeIsLogin(route.query.userkey,route.query.token)){
}else{
userPinia.getInfo()
router.push('/')
}
})
/**
@ 作者: 秦东
@ 时间: 2024-10-23 13:46:25
@ 功能: 判断登录环境
*/
const judgingEnvironment = () => {
let huanjing = window.navigator.userAgent.toLowerCase()
if( (huanjing.match(/MicroMessenger/i) == 'micromessenger') && (huanjing.match(/wxwork/i) == 'wxwork') ){
return 3;
}else if( huanjing.match(/MicroMessenger/i) == 'micromessenger' ){
return 2;
}else{
return 1;
}
return 3;
}
</script>
<template>
<div class="appBodyBeiJing appBody contentCenter">
<el-card v-loading="loading" element-loading-text="身份验证中!请耐心等待!..." style="max-width: 90%; min-width:80%; height:250px; background-color: rgba(255,255,255,0.1); border: rgba(255,255,255,0.1);" element-loading-background="rgba(255,255,255,0.6)">
</el-card>
</div>
</template>
<style lang='scss' scoped>
</style>
Loading…
Cancel
Save