mirror of
				https://gitee.com/lab1024/smart-admin.git
				synced 2025-11-04 18:33:43 +08:00 
			
		
		
		
	【v3.3.0】 1、uniapp 首页菜单功能区多平台适配;2、菜单组件路径说明;3、长时间不在线自动返回登录页;4、标签页 tab 为圆角;5、升级 sa token 到 1.37.0;6、代码生成表单弹窗 关闭事件;7、接口操作日志@OperateLogAspect 对文件的处理;
This commit is contained in:
		@@ -159,8 +159,8 @@ public class LoginService implements StpInterface {
 | 
			
		||||
 | 
			
		||||
            // 对于万能密码:受限制sa token 要求loginId唯一,万能密码只能插入一段uuid
 | 
			
		||||
            String saTokenLoginId = SUPER_PASSWORD_LOGIN_ID_PREFIX + StringConst.COLON + UUID.randomUUID().toString().replace("-", "") + StringConst.COLON + employeeEntity.getEmployeeId();
 | 
			
		||||
            // 万能密码登录只能登录15分钟
 | 
			
		||||
            StpUtil.login(saTokenLoginId, 900);
 | 
			
		||||
            // 万能密码登录只能登录30分钟
 | 
			
		||||
            StpUtil.login(saTokenLoginId, 1800);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ import org.springframework.core.annotation.AnnotationUtils;
 | 
			
		||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 | 
			
		||||
import org.springframework.web.context.request.RequestContextHolder;
 | 
			
		||||
import org.springframework.web.context.request.ServletRequestAttributes;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import org.springframework.web.servlet.ModelAndView;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
@@ -238,6 +239,7 @@ public abstract class OperateLogAspect {
 | 
			
		||||
            if (arg instanceof HttpServletRequest
 | 
			
		||||
                    || arg instanceof HttpServletResponse
 | 
			
		||||
                    || arg instanceof ModelAndView
 | 
			
		||||
                    || arg instanceof MultipartFile
 | 
			
		||||
                    || arg instanceof BindResult) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  * @Copyright  ${basic.copyright}
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
    <a-$!{insertAndUpdate.pageType}
 | 
			
		||||
  <a-$!{insertAndUpdate.pageType}
 | 
			
		||||
      :title="form.$!{primaryKeyFieldName} ? '编辑' : '添加'"
 | 
			
		||||
      width="$!{insertAndUpdate.width}"
 | 
			
		||||
      :open="visibleFlag"
 | 
			
		||||
@@ -17,223 +17,223 @@
 | 
			
		||||
      #end
 | 
			
		||||
      :maskClosable="false"
 | 
			
		||||
      :destroyOnClose="true"
 | 
			
		||||
    >
 | 
			
		||||
        <a-form ref="formRef" :model="form" :rules="rules" :label-col="{ span: 5 }" >
 | 
			
		||||
  >
 | 
			
		||||
    <a-form ref="formRef" :model="form" :rules="rules" :label-col="{ span: 5 }" >
 | 
			
		||||
        #if($insertAndUpdate.countPerLine == 1)
 | 
			
		||||
            <a-row>
 | 
			
		||||
            #foreach ($field in $formFields)
 | 
			
		||||
                #if($field.frontComponent == "Input")
 | 
			
		||||
          <a-row>
 | 
			
		||||
              #foreach ($field in $formFields)
 | 
			
		||||
                  #if($field.frontComponent == "Input")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-input style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                      <a-input style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "InputNumber")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "InputNumber")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-input-number style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                      <a-input-number style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "Textarea")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "Textarea")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-textarea style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                      <a-textarea style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "BooleanSelect")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "BooleanSelect")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <BooleanSelect v-model:value="form.${field.fieldName}" style="width: 100%" />
 | 
			
		||||
                      <BooleanSelect v-model:value="form.${field.fieldName}" style="width: 100%" />
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "SmartEnumSelect")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "SmartEnumSelect")
 | 
			
		||||
                    <a-form-item label="$codeGeneratorTool.removeEnumDesc($!{field.label})"  name="${field.fieldName}">
 | 
			
		||||
                        <SmartEnumSelect width="100%" v-model:value="form.${field.fieldName}" enumName="$!{field.upperUnderscoreEnum}" placeholder="$codeGeneratorTool.removeEnumDesc($!{field.label})"/>
 | 
			
		||||
                      <SmartEnumSelect width="100%" v-model:value="form.${field.fieldName}" enumName="$!{field.upperUnderscoreEnum}" placeholder="$codeGeneratorTool.removeEnumDesc($!{field.label})"/>
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "DictSelect")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "DictSelect")
 | 
			
		||||
                    <a-form-item label="$codeGeneratorTool.removeEnumDesc($!{field.label})"  name="${field.fieldName}">
 | 
			
		||||
                        <DictSelect width="100%" v-model:value="form.${field.fieldName}" keyCode="$!{field.dict}" placeholder="$!{field.label}"/>
 | 
			
		||||
                      <DictSelect width="100%" v-model:value="form.${field.fieldName}" keyCode="$!{field.dict}" placeholder="$!{field.label}"/>
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "Date")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "Date")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-date-picker valueFormat="YYYY-MM-DD" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}"/>
 | 
			
		||||
                      <a-date-picker valueFormat="YYYY-MM-DD" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}"/>
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "DateTime")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "DateTime")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" />
 | 
			
		||||
                      <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" />
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
                #if($field.frontComponent == "Upload")
 | 
			
		||||
                  #end
 | 
			
		||||
                  #if($field.frontComponent == "Upload")
 | 
			
		||||
                    <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <FileUpload
 | 
			
		||||
                                :defaultFileList="form.$!{field.fieldName}"
 | 
			
		||||
                                :folder="FILE_FOLDER_TYPE_ENUM.COMMON.value"
 | 
			
		||||
                                buttonText="上传 $!{field.label}"
 | 
			
		||||
                                listType="text"
 | 
			
		||||
                                @change="e => form.$!{field.fieldName} = e"
 | 
			
		||||
                        />
 | 
			
		||||
                      <FileUpload
 | 
			
		||||
                          :defaultFileList="form.$!{field.fieldName}"
 | 
			
		||||
                          :folder="FILE_FOLDER_TYPE_ENUM.COMMON.value"
 | 
			
		||||
                          buttonText="上传 $!{field.label}"
 | 
			
		||||
                          listType="text"
 | 
			
		||||
                          @change="e => form.$!{field.fieldName} = e"
 | 
			
		||||
                      />
 | 
			
		||||
                    </a-form-item>
 | 
			
		||||
                #end
 | 
			
		||||
            #end
 | 
			
		||||
            </a-row>
 | 
			
		||||
                  #end
 | 
			
		||||
              #end
 | 
			
		||||
          </a-row>
 | 
			
		||||
        #end
 | 
			
		||||
 | 
			
		||||
        #if($insertAndUpdate.countPerLine > 1)
 | 
			
		||||
            <a-row>
 | 
			
		||||
            #set($span=24 / $!insertAndUpdate.countPerLine )
 | 
			
		||||
            #foreach ($field in $formFields)
 | 
			
		||||
                    <a-col :span="$!{span}">
 | 
			
		||||
                        #if($field.frontComponent == "Input")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <a-input style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "InputNumber")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <a-input-number style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "Textarea")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <a-textarea style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "BooleanSelect")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <BooleanSelect v-model:value="form.${field.fieldName}" style="width: 100%" />
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "SmartEnumSelect")
 | 
			
		||||
                            <a-form-item label="$codeGeneratorTool.removeEnumDesc($!{field.label})"  name="${field.fieldName}">
 | 
			
		||||
                                <SmartEnumSelect width="100%" v-model:value="form.${field.fieldName}" enumName="$!{field.upperUnderscoreEnum}" placeholder="$codeGeneratorTool.removeEnumDesc($!{field.label})"/>
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "DictSelect")
 | 
			
		||||
                            <a-form-item label="$codeGeneratorTool.removeEnumDesc($!{field.label})"  name="${field.fieldName}">
 | 
			
		||||
                                <DictSelect width="100%" v-model:value="form.${field.fieldName}" keyCode="$!{field.dict}" placeholder="$!{field.label}"/>
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "Date")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <a-date-picker valueFormat="YYYY-MM-DD" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}"/>
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "DateTime")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" />
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                        #if($field.frontComponent == "Upload")
 | 
			
		||||
                            <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                                <FileUpload
 | 
			
		||||
                                    :defaultFileList="form.$!{field.fieldName}"
 | 
			
		||||
                                    :folder="FILE_FOLDER_TYPE_ENUM.COMMON.value"
 | 
			
		||||
                                    buttonText="上传 $!{field.label}"
 | 
			
		||||
                                    listType="text"
 | 
			
		||||
                                    @change="e => form.$!{field.fieldName} = e"
 | 
			
		||||
                                />
 | 
			
		||||
                            </a-form-item>
 | 
			
		||||
                        #end
 | 
			
		||||
                     </a-col>
 | 
			
		||||
            #end
 | 
			
		||||
            </a-row>
 | 
			
		||||
          <a-row>
 | 
			
		||||
              #set($span=24 / $!insertAndUpdate.countPerLine )
 | 
			
		||||
              #foreach ($field in $formFields)
 | 
			
		||||
                <a-col :span="$!{span}">
 | 
			
		||||
                    #if($field.frontComponent == "Input")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-input style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "InputNumber")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-input-number style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "Textarea")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-textarea style="width: 100%" v-model:value="form.${field.fieldName}" placeholder="$!{field.label}" />
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "BooleanSelect")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <BooleanSelect v-model:value="form.${field.fieldName}" style="width: 100%" />
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "SmartEnumSelect")
 | 
			
		||||
                      <a-form-item label="$codeGeneratorTool.removeEnumDesc($!{field.label})"  name="${field.fieldName}">
 | 
			
		||||
                        <SmartEnumSelect width="100%" v-model:value="form.${field.fieldName}" enumName="$!{field.upperUnderscoreEnum}" placeholder="$codeGeneratorTool.removeEnumDesc($!{field.label})"/>
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "DictSelect")
 | 
			
		||||
                      <a-form-item label="$codeGeneratorTool.removeEnumDesc($!{field.label})"  name="${field.fieldName}">
 | 
			
		||||
                        <DictSelect width="100%" v-model:value="form.${field.fieldName}" keyCode="$!{field.dict}" placeholder="$!{field.label}"/>
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "Date")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-date-picker valueFormat="YYYY-MM-DD" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}"/>
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "DateTime")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" />
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                    #if($field.frontComponent == "Upload")
 | 
			
		||||
                      <a-form-item label="$!{field.label}"  name="${field.fieldName}">
 | 
			
		||||
                        <FileUpload
 | 
			
		||||
                            :defaultFileList="form.$!{field.fieldName}"
 | 
			
		||||
                            :folder="FILE_FOLDER_TYPE_ENUM.COMMON.value"
 | 
			
		||||
                            buttonText="上传 $!{field.label}"
 | 
			
		||||
                            listType="text"
 | 
			
		||||
                            @change="e => form.$!{field.fieldName} = e"
 | 
			
		||||
                        />
 | 
			
		||||
                      </a-form-item>
 | 
			
		||||
                    #end
 | 
			
		||||
                </a-col>
 | 
			
		||||
              #end
 | 
			
		||||
          </a-row>
 | 
			
		||||
        #end
 | 
			
		||||
        </a-form>
 | 
			
		||||
    </a-form>
 | 
			
		||||
 | 
			
		||||
        <template #footer>
 | 
			
		||||
            <a-space>
 | 
			
		||||
                <a-button @click="onClose">取消</a-button>
 | 
			
		||||
                <a-button type="primary" @click="onSubmit">保存</a-button>
 | 
			
		||||
            </a-space>
 | 
			
		||||
        </template>
 | 
			
		||||
    </a-$!{insertAndUpdate.pageType}>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <a-space>
 | 
			
		||||
        <a-button @click="onClose">取消</a-button>
 | 
			
		||||
        <a-button type="primary" @click="onSubmit">保存</a-button>
 | 
			
		||||
      </a-space>
 | 
			
		||||
    </template>
 | 
			
		||||
  </a-$!{insertAndUpdate.pageType}>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
    import { reactive, ref, nextTick } from 'vue';
 | 
			
		||||
    import _ from 'lodash';
 | 
			
		||||
    import { message } from 'ant-design-vue';
 | 
			
		||||
    import { SmartLoading } from '/@/components/framework/smart-loading';
 | 
			
		||||
    import { $!{name.lowerCamel}Api } from '/@/api/business/$!{name.lowerHyphenCamel}/$!{name.lowerHyphenCamel}-api';
 | 
			
		||||
    import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
#foreach ($import in $frontImportList)
 | 
			
		||||
    $!{import}
 | 
			
		||||
#end
 | 
			
		||||
  import { reactive, ref, nextTick } from 'vue';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
  import { message } from 'ant-design-vue';
 | 
			
		||||
  import { SmartLoading } from '/@/components/framework/smart-loading';
 | 
			
		||||
  import { $!{name.lowerCamel}Api } from '/@/api/business/$!{name.lowerHyphenCamel}/$!{name.lowerHyphenCamel}-api';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
      #foreach ($import in $frontImportList)
 | 
			
		||||
          $!{import}
 | 
			
		||||
      #end
 | 
			
		||||
 | 
			
		||||
    // ------------------------ 事件 ------------------------
 | 
			
		||||
  // ------------------------ 事件 ------------------------
 | 
			
		||||
 | 
			
		||||
    const emits = defineEmits(['reloadList']);
 | 
			
		||||
  const emits = defineEmits(['reloadList']);
 | 
			
		||||
 | 
			
		||||
    // ------------------------ 显示与隐藏 ------------------------
 | 
			
		||||
    // 是否显示
 | 
			
		||||
    const visibleFlag = ref(false);
 | 
			
		||||
  // ------------------------ 显示与隐藏 ------------------------
 | 
			
		||||
  // 是否显示
 | 
			
		||||
  const visibleFlag = ref(false);
 | 
			
		||||
 | 
			
		||||
    function show(rowData) {
 | 
			
		||||
        Object.assign(form, formDefault);
 | 
			
		||||
        if (rowData && !_.isEmpty(rowData)) {
 | 
			
		||||
            Object.assign(form, rowData);
 | 
			
		||||
        }
 | 
			
		||||
        visibleFlag.value = true;
 | 
			
		||||
        nextTick(() => {
 | 
			
		||||
            formRef.value.clearValidate();
 | 
			
		||||
        });
 | 
			
		||||
  function show(rowData) {
 | 
			
		||||
    Object.assign(form, formDefault);
 | 
			
		||||
    if (rowData && !_.isEmpty(rowData)) {
 | 
			
		||||
      Object.assign(form, rowData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function onClose() {
 | 
			
		||||
        Object.assign(form, formDefault);
 | 
			
		||||
        visibleFlag.value = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // ------------------------ 表单 ------------------------
 | 
			
		||||
 | 
			
		||||
    // 组件ref
 | 
			
		||||
    const formRef = ref();
 | 
			
		||||
 | 
			
		||||
    const formDefault = {
 | 
			
		||||
        $!{primaryKeyFieldName}: undefined,
 | 
			
		||||
#foreach ($field in $formFields)
 | 
			
		||||
        $!{field.fieldName}: undefined, //$!{field.label}
 | 
			
		||||
#end
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let form = reactive({ ...formDefault });
 | 
			
		||||
 | 
			
		||||
    const rules = {
 | 
			
		||||
#foreach ($field in $formFields)
 | 
			
		||||
    #if($field.requiredFlag)
 | 
			
		||||
        $!{field.fieldName}: [{ required: true, message: '$!{field.label} 必填' }],
 | 
			
		||||
    #end
 | 
			
		||||
#end
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // 点击确定,验证表单
 | 
			
		||||
    async function onSubmit() {
 | 
			
		||||
        try {
 | 
			
		||||
            await formRef.value.validateFields();
 | 
			
		||||
            save();
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
            message.error('参数验证错误,请仔细填写表单数据!');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 新建、编辑API
 | 
			
		||||
    async function save() {
 | 
			
		||||
        SmartLoading.show();
 | 
			
		||||
        try {
 | 
			
		||||
            if (form.$!{primaryKeyFieldName}) {
 | 
			
		||||
                await $!{name.lowerCamel}Api.update(form);
 | 
			
		||||
            } else {
 | 
			
		||||
                await $!{name.lowerCamel}Api.add(form);
 | 
			
		||||
            }
 | 
			
		||||
            message.success('操作成功');
 | 
			
		||||
            emits('reloadList');
 | 
			
		||||
            onClose();
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
            smartSentry.captureError(err);
 | 
			
		||||
        } finally {
 | 
			
		||||
            SmartLoading.hide();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    defineExpose({
 | 
			
		||||
        show,
 | 
			
		||||
    visibleFlag.value = true;
 | 
			
		||||
    nextTick(() => {
 | 
			
		||||
      formRef.value.clearValidate();
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function onClose() {
 | 
			
		||||
    Object.assign(form, formDefault);
 | 
			
		||||
    visibleFlag.value = false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // ------------------------ 表单 ------------------------
 | 
			
		||||
 | 
			
		||||
  // 组件ref
 | 
			
		||||
  const formRef = ref();
 | 
			
		||||
 | 
			
		||||
  const formDefault = {
 | 
			
		||||
          $!{primaryKeyFieldName}: undefined,
 | 
			
		||||
      #foreach ($field in $formFields)
 | 
			
		||||
              $!{field.fieldName}: undefined, //$!{field.label}
 | 
			
		||||
      #end
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  let form = reactive({ ...formDefault });
 | 
			
		||||
 | 
			
		||||
  const rules = {
 | 
			
		||||
      #foreach ($field in $formFields)
 | 
			
		||||
          #if($field.requiredFlag)
 | 
			
		||||
                  $!{field.fieldName}: [{ required: true, message: '$!{field.label} 必填' }],
 | 
			
		||||
          #end
 | 
			
		||||
      #end
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // 点击确定,验证表单
 | 
			
		||||
  async function onSubmit() {
 | 
			
		||||
    try {
 | 
			
		||||
      await formRef.value.validateFields();
 | 
			
		||||
      save();
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      message.error('参数验证错误,请仔细填写表单数据!');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // 新建、编辑API
 | 
			
		||||
  async function save() {
 | 
			
		||||
    SmartLoading.show();
 | 
			
		||||
    try {
 | 
			
		||||
      if (form.$!{primaryKeyFieldName}) {
 | 
			
		||||
        await $!{name.lowerCamel}Api.update(form);
 | 
			
		||||
      } else {
 | 
			
		||||
        await $!{name.lowerCamel}Api.add(form);
 | 
			
		||||
      }
 | 
			
		||||
      message.success('操作成功');
 | 
			
		||||
      emits('reloadList');
 | 
			
		||||
      onClose();
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      smartSentry.captureError(err);
 | 
			
		||||
    } finally {
 | 
			
		||||
      SmartLoading.hide();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  defineExpose({
 | 
			
		||||
    show,
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ spring:
 | 
			
		||||
  datasource:
 | 
			
		||||
    url: jdbc:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
 | 
			
		||||
    username: root
 | 
			
		||||
    password: Zhuoda#1024lab
 | 
			
		||||
    password: Zhuoda1024lab
 | 
			
		||||
    initial-size: 10
 | 
			
		||||
    min-idle: 10
 | 
			
		||||
    max-active: 100
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ spring:
 | 
			
		||||
  datasource:
 | 
			
		||||
    url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
 | 
			
		||||
    username: root
 | 
			
		||||
    password: Java@1024
 | 
			
		||||
    password: Zhuoda1024lab
 | 
			
		||||
    initial-size: 2
 | 
			
		||||
    min-idle: 2
 | 
			
		||||
    max-active: 10
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
<!---
 | 
			
		||||
  * 字段 下拉选择框
 | 
			
		||||
  * 
 | 
			
		||||
  *
 | 
			
		||||
  * @Author:    1024创新实验室:罗伊
 | 
			
		||||
  * @Date:      2022-09-12 22:06:45 
 | 
			
		||||
  * @Wechat:    zhuda1024 
 | 
			
		||||
  * @Email:     lab1024@163.com 
 | 
			
		||||
  * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012 
 | 
			
		||||
  * @Date:      2022-09-12 22:06:45
 | 
			
		||||
  * @Wechat:    zhuda1024
 | 
			
		||||
  * @Email:     lab1024@163.com
 | 
			
		||||
  * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
  *
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
@@ -108,7 +108,7 @@
 | 
			
		||||
      emit('update:value', valueList);
 | 
			
		||||
      emit('change', valueList);
 | 
			
		||||
    } else {
 | 
			
		||||
      let findValue = dictValueList.value.find((e) => e.valueCode == value);
 | 
			
		||||
      let findValue = dictValueList.value.find((e) => e.valueCode === value);
 | 
			
		||||
      emit('update:value', findValue.valueCode);
 | 
			
		||||
      emit('change', findValue.valueCode);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
<!--
 | 
			
		||||
  * 标签页
 | 
			
		||||
  * 
 | 
			
		||||
  * @Author:    1024创新实验室-主任:卓大 
 | 
			
		||||
  * @Date:      2022-09-06 20:29:12 
 | 
			
		||||
  * @Wechat:    zhuda1024 
 | 
			
		||||
  * @Email:     lab1024@163.com 
 | 
			
		||||
  * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012 
 | 
			
		||||
  *
 | 
			
		||||
  * @Author:    1024创新实验室-主任:卓大
 | 
			
		||||
  * @Date:      2022-09-06 20:29:12
 | 
			
		||||
  * @Wechat:    zhuda1024
 | 
			
		||||
  * @Email:     lab1024@163.com
 | 
			
		||||
  * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
  <!-- 标签页,共两部分:1、标签 ;2、标签操作区 -->
 | 
			
		||||
@@ -130,6 +130,7 @@
 | 
			
		||||
 | 
			
		||||
  const { useToken } = theme;
 | 
			
		||||
  const { token } = useToken();
 | 
			
		||||
  const borderRadius = token.value.borderRadius + 'px';
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
@@ -199,6 +200,7 @@
 | 
			
		||||
 | 
			
		||||
    :deep(.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab) {
 | 
			
		||||
      padding: 5px 8px 3px 10px;
 | 
			
		||||
      border-radius: v-bind(borderRadius);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    :deep(.ant-tabs-tab-active) {
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@
 | 
			
		||||
          <a-form-item v-if="form.frameFlag" label="外链地址" name="frameUrl">
 | 
			
		||||
            <a-input v-model:value="form.frameUrl" placeholder="请输入外链地址" />
 | 
			
		||||
          </a-form-item>
 | 
			
		||||
          <a-form-item v-else label="组件地址" name="component">
 | 
			
		||||
          <a-form-item v-else label="组件地址" name="component" help="比如 商品列表:/business/erp/goods/goods-list.vue">
 | 
			
		||||
            <a-input v-model:value="form.component" placeholder="请输入组件地址 默认带有开头/@/views" />
 | 
			
		||||
          </a-form-item>
 | 
			
		||||
        </template>
 | 
			
		||||
@@ -91,9 +91,8 @@
 | 
			
		||||
        </a-form-item>
 | 
			
		||||
      </template>
 | 
			
		||||
      <!--      按钮 end   -->
 | 
			
		||||
      <a-form-item label="排序" name="sort">
 | 
			
		||||
      <a-form-item label="排序" name="sort" help="值越小越靠前">
 | 
			
		||||
        <a-input-number v-model:value="form.sort" :min="0" placeholder="请输入排序" style="width: 100px" />
 | 
			
		||||
        <h6 style="color: #ababab">值越小越靠前</h6>
 | 
			
		||||
      </a-form-item>
 | 
			
		||||
    </a-form>
 | 
			
		||||
    <div class="footer">
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								smart-admin-web/typescript-ant-design-vue3/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								smart-admin-web/typescript-ant-design-vue3/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
### **敬请期待,2024年5月开干**
 | 
			
		||||
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
NODE_ENV=development
 | 
			
		||||
VITE_APP_TITLE='SmartAdmin 开发环境(Dev)'
 | 
			
		||||
VITE_APP_API_URL='http://127.0.0.1:1024'
 | 
			
		||||
VITE_APP_API_URL='https://app.smartadmin.vip/smart-app-api'
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
<script>
 | 
			
		||||
  import { useUserStore } from '/@/store/modules/system/user';
 | 
			
		||||
  import { useUserStore } from '@/store/modules/system/user';
 | 
			
		||||
  export default {
 | 
			
		||||
    onLaunch: function () {
 | 
			
		||||
      useUserStore().getLoginInfo();
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
 * @LastEditTime: 2022-06-23
 | 
			
		||||
 * @LastEditors: zhuoda
 | 
			
		||||
 */
 | 
			
		||||
import { postRequest, getRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { postRequest, getRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const goodsApi = {
 | 
			
		||||
  // 添加商品 @author zhuoda
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 * @Email:     lab1024@163.com
 | 
			
		||||
 * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
 */
 | 
			
		||||
import { postRequest, getRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { postRequest, getRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const enterpriseApi = {
 | 
			
		||||
  // 新建企业 @author 开云
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 * @Author: zhuoda
 | 
			
		||||
 * @Date: 2022-08-16 20:34:36
 | 
			
		||||
 */
 | 
			
		||||
import { postRequest, getRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { postRequest, getRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const noticeApi = {
 | 
			
		||||
  // ---------------- 通知公告类型 -----------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
 * @Date:      2022-09-26 14:53:50
 | 
			
		||||
 * @Copyright  1024创新实验室
 | 
			
		||||
 */
 | 
			
		||||
import { postRequest, getRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { postRequest, getRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const changeLogApi = {
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 * @Email:     lab1024@163.com
 | 
			
		||||
 * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
 */
 | 
			
		||||
import { postRequest, getRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { postRequest, getRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const dictApi = {
 | 
			
		||||
  // 分页查询数据字典KEY - @author 卓大
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
 * @Date:      2022-09-26 14:53:50
 | 
			
		||||
 * @Copyright  1024创新实验室
 | 
			
		||||
 */
 | 
			
		||||
import { uploadRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { uploadRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const fileApi = {
 | 
			
		||||
  upload: (file, folder) => {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 * @Email:     lab1024@163.com
 | 
			
		||||
 * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
 */
 | 
			
		||||
import { getRequest, postRequest } from '/@/lib/smart-request';
 | 
			
		||||
import { getRequest, postRequest } from '@/lib/smart-request';
 | 
			
		||||
 | 
			
		||||
export const loginApi = {
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { onMounted, ref, watch } from 'vue';
 | 
			
		||||
  import { dictApi } from '/@/api/support/dict-api';
 | 
			
		||||
  import { dictApi } from '@/api/support/dict-api';
 | 
			
		||||
 | 
			
		||||
  const props = defineProps({
 | 
			
		||||
    keyCode: String,
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,10 @@
 | 
			
		||||
 * @Email:     lab1024@163.com
 | 
			
		||||
 * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
 */
 | 
			
		||||
import { USER_TOKEN } from '/@/constants/local-storage-key-const';
 | 
			
		||||
import { DATA_TYPE_ENUM } from '/@/constants/common-const';
 | 
			
		||||
import { USER_TOKEN } from '@/constants/local-storage-key-const';
 | 
			
		||||
import { DATA_TYPE_ENUM } from '@/constants/common-const';
 | 
			
		||||
import { decryptData, encryptData } from './encrypt';
 | 
			
		||||
import { useUserStore } from '/@/store/modules/system/user';
 | 
			
		||||
import { useUserStore } from '@/store/modules/system/user';
 | 
			
		||||
 | 
			
		||||
const baseUrl = import.meta.env.VITE_APP_API_URL;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ import { store } from './store/index';
 | 
			
		||||
import './theme/index.scss';
 | 
			
		||||
 | 
			
		||||
// 枚举管理
 | 
			
		||||
import smartEnumPlugin from '/@/plugins/smart-enums-plugin';
 | 
			
		||||
import constantsInfo from '/@/constants/index';
 | 
			
		||||
import smartEnumPlugin from '@/plugins/smart-enums-plugin';
 | 
			
		||||
import constantsInfo from '@/constants/index';
 | 
			
		||||
import lodash from 'lodash';
 | 
			
		||||
 | 
			
		||||
export function createApp() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "name" : "",
 | 
			
		||||
    "name" : "smart-app",
 | 
			
		||||
    "appid" : "",
 | 
			
		||||
    "description" : "",
 | 
			
		||||
    "versionName" : "1.0.0",
 | 
			
		||||
@@ -50,7 +50,7 @@
 | 
			
		||||
    "quickapp" : {},
 | 
			
		||||
    /* 小程序特有相关 */
 | 
			
		||||
    "mp-weixin" : {
 | 
			
		||||
        "appid" : "",
 | 
			
		||||
        "appid" : "wx2f5032ef5c4adae4",
 | 
			
		||||
        "setting" : {
 | 
			
		||||
            "urlCheck" : false
 | 
			
		||||
        },
 | 
			
		||||
 
 | 
			
		||||
@@ -83,12 +83,12 @@
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import SmartDetailTabs from '/@/components/smart-detail-tabs/index.vue';
 | 
			
		||||
  import SmartDetailTabs from '@/components/smart-detail-tabs/index.vue';
 | 
			
		||||
  import { ref, reactive } from 'vue';
 | 
			
		||||
  import { enterpriseApi } from '/@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { enterpriseApi } from '@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { onShow, onLoad } from '@dcloudio/uni-app';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '/@/lib/smart-support';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '@/lib/smart-support';
 | 
			
		||||
 | 
			
		||||
  // ----------------------- tab -----------------------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -48,11 +48,11 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref } from 'vue';
 | 
			
		||||
  import { enterpriseApi } from '/@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { regular } from '/@/constants/regular-const';
 | 
			
		||||
  import SmartEnumRadio from '/@/components/smart-enum-radio/index.vue';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '/@/lib/smart-support';
 | 
			
		||||
  import { enterpriseApi } from '@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { regular } from '@/constants/regular-const';
 | 
			
		||||
  import SmartEnumRadio from '@/components/smart-enum-radio/index.vue';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '@/lib/smart-support';
 | 
			
		||||
  import { onLoad, onReady, onShow } from '@dcloudio/uni-app';
 | 
			
		||||
 | 
			
		||||
  // --------------------- 表单 ---------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -55,10 +55,10 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref } from 'vue';
 | 
			
		||||
  import { enterpriseApi } from '/@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { enterpriseApi } from '@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { onPageScroll, onReachBottom, onShow } from '@dcloudio/uni-app';
 | 
			
		||||
  import useMescroll from '@/uni_modules/uni-mescroll/hooks/useMescroll';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
  // --------------------------- 查询 ---------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -30,8 +30,8 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref, toRaw } from 'vue';
 | 
			
		||||
  import DictSelect from '/@/components/dict-select/index.vue';
 | 
			
		||||
  import SmartEnumSelect from '/@/components/smart-enum-select/index.vue';
 | 
			
		||||
  import DictSelect from '@/components/dict-select/index.vue';
 | 
			
		||||
  import SmartEnumSelect from '@/components/smart-enum-select/index.vue';
 | 
			
		||||
 | 
			
		||||
  const emits = defineEmits(['close']);
 | 
			
		||||
  defineExpose({ show });
 | 
			
		||||
 
 | 
			
		||||
@@ -46,10 +46,10 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref } from 'vue';
 | 
			
		||||
  import QueryFormPopUp from './components/goods-query-form-popup.vue';
 | 
			
		||||
  import { goodsApi } from '/@/api/business/goods/goods-api';
 | 
			
		||||
  import { goodsApi } from '@/api/business/goods/goods-api';
 | 
			
		||||
  import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
 | 
			
		||||
  import useMescroll from '@/uni_modules/uni-mescroll/hooks/useMescroll';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import NoticeList from './components/goods-list.vue';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,9 +26,9 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { ref } from 'vue';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import { onShow } from '@dcloudio/uni-app';
 | 
			
		||||
  import { goodsApi } from '/@/api/business/goods/goods-api';
 | 
			
		||||
  import { goodsApi } from '@/api/business/goods/goods-api';
 | 
			
		||||
 | 
			
		||||
  const queryForm = {
 | 
			
		||||
    pageNum: 1,
 | 
			
		||||
 
 | 
			
		||||
@@ -2,67 +2,67 @@
 | 
			
		||||
  <view class="menu-container">
 | 
			
		||||
    <uni-grid :column="5" :highlight="true" :show-border="false" customStyle="display: block;">
 | 
			
		||||
      <!--------------------------------- 第一排--------------------------------->
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="changeHome">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu1.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu1.png"></image>
 | 
			
		||||
          <view class="item-text"> 首页切换 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="navigateTo('/pages/notice/notice-index')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu2.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu2.png"></image>
 | 
			
		||||
          <view class="item-text"> 通知公告 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="navigateTo('/pages/enterprise/enterprise-list')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu3.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu3.png"></image>
 | 
			
		||||
          <view class="item-text"> 客户线索 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="navigateTo('/pages/goods/goods-index')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu4.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu4.png"></image>
 | 
			
		||||
          <view class="item-text"> 品质商品 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="navigateTo('/pages/support/change-log/change-log-list')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu5.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu5.png"></image>
 | 
			
		||||
          <view class="item-text"> 版本更新 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
 | 
			
		||||
      <!--------------------------------- 第二排--------------------------------->
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="navigateTo('/pages/form/form')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu6.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu6.png"></image>
 | 
			
		||||
          <view class="item-text"> 复杂表单 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="navigateTo('/pages/order-detail/order-detail')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu7.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu7.png"></image>
 | 
			
		||||
          <view class="item-text"> 复杂详情 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="switchTab('/pages/list/list')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu9.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu9.png"></image>
 | 
			
		||||
          <view class="item-text"> 列表样式1 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="switchTab('/pages/list2/list')">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu8.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu8.png"></image>
 | 
			
		||||
          <view class="item-text"> 列表样式2 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
      <uni-grid-item class="menu-grid">
 | 
			
		||||
      <uni-grid-item class="menu-grid" style="width: 134rpx; height: 134rpx">
 | 
			
		||||
        <view class="menu-item" @click="developing">
 | 
			
		||||
          <image class="item-image" src="/@/static/images/index/ic_home_menu10.png"></image>
 | 
			
		||||
          <image class="item-image" src="@/static/images/index/ic_home_menu10.png"></image>
 | 
			
		||||
          <view class="item-text"> 接口加密 </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </uni-grid-item>
 | 
			
		||||
@@ -71,7 +71,7 @@
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { SmartToast } from '/@/lib/smart-support';
 | 
			
		||||
  import { SmartToast } from '@/lib/smart-support';
 | 
			
		||||
  const emit = defineEmits(['changeHome']);
 | 
			
		||||
 | 
			
		||||
  function changeHome() {
 | 
			
		||||
@@ -101,7 +101,7 @@
 | 
			
		||||
        margin-top: 20rpx;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    //height: 340rpx;
 | 
			
		||||
    height: 340rpx;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    border-radius: 16rpx;
 | 
			
		||||
    width: 700rpx;
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,8 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { ref } from 'vue';
 | 
			
		||||
  import { noticeApi } from '/@/api/business/oa/notice-api';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { noticeApi } from '@/api/business/oa/notice-api';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import { onShow } from '@dcloudio/uni-app';
 | 
			
		||||
 | 
			
		||||
  const queryForm = {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,10 +4,10 @@
 | 
			
		||||
      <template #right>
 | 
			
		||||
        <view class="right">
 | 
			
		||||
          <view class="">
 | 
			
		||||
            <image src="/@/static/images/index/ic_scan.png" mode=""></image>
 | 
			
		||||
            <image src="@/static/images/index/ic_scan.png" mode=""></image>
 | 
			
		||||
          </view>
 | 
			
		||||
          <view class="">
 | 
			
		||||
            <image src="/@/static/images/index/ic_search.png" mode=""></image>
 | 
			
		||||
            <image src="@/static/images/index/ic_search.png" mode=""></image>
 | 
			
		||||
          </view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </template>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,8 +12,8 @@
 | 
			
		||||
  </view>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
  import checkOutImg from '/@/static/images/login/check-out.png';
 | 
			
		||||
  import checkInImg from '/@/static/images/login/check-in.png';
 | 
			
		||||
  import checkOutImg from '/static/images/login/check-out.png';
 | 
			
		||||
  import checkInImg from '/static/images/login/check-in.png';
 | 
			
		||||
 | 
			
		||||
  import { ref } from 'vue';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,15 +6,15 @@
 | 
			
		||||
    <view class="other-way">
 | 
			
		||||
      <!-- 手机号登录 -->
 | 
			
		||||
      <view v-if="phoneLoginFlag" @click="navigateTo('/pages/login/phone-login')" class="item">
 | 
			
		||||
        <image src="/@/static/images/login/phone-login-icon.png" />
 | 
			
		||||
        <image src="@/static/images/login/phone-login-icon.png" />
 | 
			
		||||
      </view>
 | 
			
		||||
      <!-- 微信登录 -->
 | 
			
		||||
      <view v-if="wxLoginFlag" @click="toWeChatLogin" class="item">
 | 
			
		||||
        <image src="/@/static/images/login/wx-login-icon.png" />
 | 
			
		||||
        <image src="@/static/images/login/wx-login-icon.png" />
 | 
			
		||||
      </view>
 | 
			
		||||
      <!-- 苹果账号登录 -->
 | 
			
		||||
      <view v-if="iosFlag" @click="toAppleLogin" class="item apple">
 | 
			
		||||
        <image src="/@/static/images/login/ios-login-icon.png" />
 | 
			
		||||
        <image src="@/static/images/login/ios-login-icon.png" />
 | 
			
		||||
      </view>
 | 
			
		||||
    </view>
 | 
			
		||||
  </view>
 | 
			
		||||
@@ -98,6 +98,8 @@
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
  .other-way-box {
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    margin-top: 82rpx;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,12 +3,12 @@
 | 
			
		||||
    <view class="top-view">
 | 
			
		||||
      <view class="login"> 登录 </view>
 | 
			
		||||
      <view class="logo">
 | 
			
		||||
        <image src="/@/static/images/login/login-logo.png" />
 | 
			
		||||
        <image src="@/static/images/login/login-logo.png" />
 | 
			
		||||
      </view>
 | 
			
		||||
    </view>
 | 
			
		||||
    <view class="bottom-view">
 | 
			
		||||
      <view class="input-view smart-margin-top10">
 | 
			
		||||
        <image src="/@/static/images/login/login-username.png"></image>
 | 
			
		||||
        <image src="@/static/images/login/login-username.png"></image>
 | 
			
		||||
        <uni-easyinput
 | 
			
		||||
          class="input"
 | 
			
		||||
          placeholder="请输入用户名"
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
      </view>
 | 
			
		||||
 | 
			
		||||
      <view class="input-view smart-margin-top10">
 | 
			
		||||
        <image src="/@/static/images/login/login-password.png"></image>
 | 
			
		||||
        <image src="@/static/images/login/login-password.png"></image>
 | 
			
		||||
        <uni-easyinput
 | 
			
		||||
          class="input"
 | 
			
		||||
          placeholder="请输入密码"
 | 
			
		||||
@@ -33,16 +33,15 @@
 | 
			
		||||
      </view>
 | 
			
		||||
 | 
			
		||||
      <view class="input-view smart-margin-top10">
 | 
			
		||||
        <image src="/@/static/images/login/login-password.png"></image>
 | 
			
		||||
        <image src="@/static/images/login/login-password.png"></image>
 | 
			
		||||
        <uni-easyinput
 | 
			
		||||
          class="input"
 | 
			
		||||
          class="input captcha-input"
 | 
			
		||||
          placeholder="请输入验证码"
 | 
			
		||||
          :clearable="true"
 | 
			
		||||
          :password="false"
 | 
			
		||||
          placeholderStyle="color:#CCCCCC"
 | 
			
		||||
          border="none"
 | 
			
		||||
          v-model="loginForm.captchaCode"
 | 
			
		||||
          style="width: 50%"
 | 
			
		||||
        />
 | 
			
		||||
        <img class="captcha-img" :src="captchaBase64Image" @click="getCaptcha" />
 | 
			
		||||
      </view>
 | 
			
		||||
@@ -54,7 +53,7 @@
 | 
			
		||||
 | 
			
		||||
      <view @click="login" class="button login-btn smart-margin-top20"> 登录 </view>
 | 
			
		||||
      <view @click="login" class="button register-btn smart-margin-top20"> 创建账号 </view>
 | 
			
		||||
      <OtherWayBox class="other-way-box" />
 | 
			
		||||
      <OtherWayBox />
 | 
			
		||||
      <LoginCheckBox class="login-check-box" ref="loginCheckBoxRef" />
 | 
			
		||||
    </view>
 | 
			
		||||
  </view>
 | 
			
		||||
@@ -64,11 +63,11 @@
 | 
			
		||||
  import { onShow } from '@dcloudio/uni-app';
 | 
			
		||||
  import OtherWayBox from './components/other-way-box.vue';
 | 
			
		||||
  import LoginCheckBox from './components/login-check-box.vue';
 | 
			
		||||
  import { loginApi } from '/@/api/system/login-api';
 | 
			
		||||
  import { LOGIN_DEVICE_ENUM } from '/@/constants/system/login-device-const';
 | 
			
		||||
  import { encryptData } from '/@/lib/encrypt';
 | 
			
		||||
  import { useUserStore } from '/@/store/modules/system/user';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { loginApi } from '@/api/system/login-api';
 | 
			
		||||
  import { LOGIN_DEVICE_ENUM } from '@/constants/system/login-device-const';
 | 
			
		||||
  import { encryptData } from '@/lib/encrypt';
 | 
			
		||||
  import { useUserStore } from '@/store/modules/system/user';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
 | 
			
		||||
  const loginForm = reactive({
 | 
			
		||||
    loginName: 'admin',
 | 
			
		||||
@@ -176,6 +175,7 @@
 | 
			
		||||
      .captcha-img {
 | 
			
		||||
        margin-left: 5px;
 | 
			
		||||
        height: 100rpx;
 | 
			
		||||
        width: 40%;
 | 
			
		||||
      }
 | 
			
		||||
      image {
 | 
			
		||||
        margin-left: 30rpx;
 | 
			
		||||
@@ -186,6 +186,9 @@
 | 
			
		||||
        margin: 0 16rpx;
 | 
			
		||||
        background-color: $page-bg-color;
 | 
			
		||||
      }
 | 
			
		||||
      .captcha-input {
 | 
			
		||||
        width: 50%;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .code-login-view {
 | 
			
		||||
      margin: 50rpx 0 0;
 | 
			
		||||
@@ -273,7 +276,7 @@
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 720rpx;
 | 
			
		||||
      background-image: url(/@/static/images/login/login-top-back.png);
 | 
			
		||||
      background-image: url('~@/static/images/login/login-top-back.png');
 | 
			
		||||
      .login {
 | 
			
		||||
        font-weight: bold;
 | 
			
		||||
        margin-top: 70rpx;
 | 
			
		||||
@@ -285,11 +288,6 @@
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .other-way-box {
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    margin-top: 82rpx;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .login-check-box {
 | 
			
		||||
    flex-shrink: 0;
 | 
			
		||||
    margin-top: 150rpx;
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
  </view>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { SmartToast } from '/@/lib/smart-support';
 | 
			
		||||
  import { SmartToast } from '@/lib/smart-support';
 | 
			
		||||
 | 
			
		||||
  const emits = defineEmits(['changeStyle']);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,12 +13,12 @@
 | 
			
		||||
      <view class="user-phone">{{ departmentName }}</view>
 | 
			
		||||
    </view>
 | 
			
		||||
    <view class="vip-flag">
 | 
			
		||||
      <image src="/@/static/images/mine/no-vip-flag.png" mode=""></image>
 | 
			
		||||
      <image src="@/static/images/mine/no-vip-flag.png" mode=""></image>
 | 
			
		||||
    </view>
 | 
			
		||||
  </view>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { useUserStore } from '/@/store/modules/system/user';
 | 
			
		||||
  import { useUserStore } from '@/store/modules/system/user';
 | 
			
		||||
  import { computed } from 'vue';
 | 
			
		||||
 | 
			
		||||
  const actualName = computed(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
  </view>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { useUserStore } from '/@/store/modules/system/user';
 | 
			
		||||
  import { useUserStore } from '@/store/modules/system/user';
 | 
			
		||||
  import { computed } from 'vue';
 | 
			
		||||
 | 
			
		||||
  const actualName = computed(() => {
 | 
			
		||||
@@ -107,7 +107,7 @@
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .vip-card {
 | 
			
		||||
    background-image: url('/@/static/images/mine/vip-bg.png');
 | 
			
		||||
    background-image: url('~@/static/images/mine/vip-bg.png');
 | 
			
		||||
    height: 80rpx;
 | 
			
		||||
    background-repeat: no-repeat;
 | 
			
		||||
    width: 700rpx;
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
  import MineUserBlue from './components/mine-user-blue.vue';
 | 
			
		||||
  import MineUserWhite from './components/mine-user-white.vue';
 | 
			
		||||
  import { ref } from 'vue';
 | 
			
		||||
  import { useUserStore } from '/@/store/modules/system/user';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '/@/lib/smart-support';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { useUserStore } from '@/store/modules/system/user';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '@/lib/smart-support';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
 | 
			
		||||
  const userStore = useUserStore();
 | 
			
		||||
  const blueUserFlag = ref(true);
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { onMounted, reactive, ref, toRaw } from 'vue';
 | 
			
		||||
  import { noticeApi } from '/@/api/business/oa/notice-api';
 | 
			
		||||
  import { noticeApi } from '@/api/business/oa/notice-api';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
  const emits = defineEmits(['close']);
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive } from 'vue';
 | 
			
		||||
  import { noticeApi } from '/@/api/business/oa/notice-api';
 | 
			
		||||
  import { noticeApi } from '@/api/business/oa/notice-api';
 | 
			
		||||
  import { onLoad } from '@dcloudio/uni-app';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
 | 
			
		||||
  const noticeDetail = reactive({
 | 
			
		||||
    title: '',
 | 
			
		||||
 
 | 
			
		||||
@@ -46,10 +46,10 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref } from 'vue';
 | 
			
		||||
  import NoticeQueryFormPopUp from './components/notice-query-form-popup.vue';
 | 
			
		||||
  import { noticeApi } from '/@/api/business/oa/notice-api';
 | 
			
		||||
  import { noticeApi } from '@/api/business/oa/notice-api';
 | 
			
		||||
  import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
 | 
			
		||||
  import useMescroll from '@/uni_modules/uni-mescroll/hooks/useMescroll';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import NoticeList from './components/notice-list.vue';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { ref } from 'vue';
 | 
			
		||||
  import SmartDetailTabs from '/@/components/smart-detail-tabs/index.vue';
 | 
			
		||||
  import SmartDetailTabs from '@/components/smart-detail-tabs/index.vue';
 | 
			
		||||
  import OrderDetailBaseInfo from './components/order-detail-base-info.vue';
 | 
			
		||||
  import DetailModelPath from './components/detail-model-path.vue';
 | 
			
		||||
  import OrderDetailSettle from './components/order-detail-settle.vue';
 | 
			
		||||
 
 | 
			
		||||
@@ -12,9 +12,9 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { inject, reactive } from 'vue';
 | 
			
		||||
  import { changeLogApi } from '/@/api/support/change-log-api';
 | 
			
		||||
  import { changeLogApi } from '@/api/support/change-log-api';
 | 
			
		||||
  import { onLoad } from '@dcloudio/uni-app';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
 | 
			
		||||
  const smartEnumPlugin = inject('smartEnumPlugin');
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,10 +44,10 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref } from 'vue';
 | 
			
		||||
  import { changeLogApi } from '/@/api/support/change-log-api';
 | 
			
		||||
  import { changeLogApi } from '@/api/support/change-log-api';
 | 
			
		||||
  import { onPageScroll, onReachBottom, onShow } from '@dcloudio/uni-app';
 | 
			
		||||
  import useMescroll from '@/uni_modules/uni-mescroll/hooks/useMescroll';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
  // --------------------------- 查询 ---------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -31,14 +31,14 @@
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { reactive, ref } from 'vue';
 | 
			
		||||
  import { enterpriseApi } from '/@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '/@/lib/smart-support';
 | 
			
		||||
  import { enterpriseApi } from '@/api/business/oa/enterprise-api';
 | 
			
		||||
  import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
  import { SmartLoading, SmartToast } from '@/lib/smart-support';
 | 
			
		||||
  import { onLoad, onReady } from '@dcloudio/uni-app';
 | 
			
		||||
  import { fileApi } from '/@/api/support/file-api';
 | 
			
		||||
  import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
 | 
			
		||||
  import { fileApi } from '@/api/support/file-api';
 | 
			
		||||
  import { FILE_FOLDER_TYPE_ENUM } from '@/constants/support/file-const';
 | 
			
		||||
  import _ from 'lodash';
 | 
			
		||||
  import { feedbackApi } from '/@/api/support/feedback-api';
 | 
			
		||||
  import { feedbackApi } from '@/api/support/feedback-api';
 | 
			
		||||
 | 
			
		||||
  // --------------------- 表单 ---------------------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
 * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
 */
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import { FLAG_NUMBER_ENUM } from '/@/constants/common-const';
 | 
			
		||||
import { FLAG_NUMBER_ENUM } from '@/constants/common-const';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  install: (app, smartEnumWrapper) => {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,10 @@
 | 
			
		||||
 * @Copyright  1024创新实验室 ( https://1024lab.net ),Since 2012
 | 
			
		||||
 */
 | 
			
		||||
import { defineStore } from 'pinia';
 | 
			
		||||
import { appDefaultConfig } from '/@/config/app-config';
 | 
			
		||||
import localStorageKeyConst from '/@/constants/local-storage-key-const';
 | 
			
		||||
import { smartSentry } from '/@/lib/smart-sentry';
 | 
			
		||||
import { localRead } from '/@/utils/local-util';
 | 
			
		||||
import { appDefaultConfig } from '@/config/app-config';
 | 
			
		||||
import localStorageKeyConst from '@/constants/local-storage-key-const';
 | 
			
		||||
import { smartSentry } from '@/lib/smart-sentry';
 | 
			
		||||
import { localRead } from '@/utils/local-util';
 | 
			
		||||
 | 
			
		||||
let state = { ...appDefaultConfig };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,8 @@
 | 
			
		||||
 */
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import { defineStore } from 'pinia';
 | 
			
		||||
import { USER_TOKEN } from '/@/constants/local-storage-key-const';
 | 
			
		||||
import { loginApi } from '/@/api/system/login-api';
 | 
			
		||||
import { USER_TOKEN } from '@/constants/local-storage-key-const';
 | 
			
		||||
import { loginApi } from '@/api/system/login-api';
 | 
			
		||||
 | 
			
		||||
const defaultUserInfo = {
 | 
			
		||||
  //员工id
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user