ll
liukangdong
2024-10-12 ac9336875dea20beef20a2fee481929b882d2a15
ll
已修改15个文件
224 ■■■■■ 文件已修改
admin/src/api/system/sms.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/QueryForm/queryForm.vue 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/RichEditor.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/relativeMember.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitorSources.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/leaveAuth.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/subscribe.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/waybill.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/system/smsMessage.vue 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/driver.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/pages/index/control.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/PlatformCall.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/system/sms.js
@@ -8,3 +8,11 @@
export function SmsStatusUpdate (data) {
  return request.post('/visitsAdmin/cloudService/business/smsConfig/updateById', data)
}
// 短信通知 批量状态更新
export function SmsStatussUpdate (data) {
  return request.get('/visitsAdmin/cloudService/business/smsConfig/updateStatus/batch', {
    params: {
      ...data
    }
  })
}
admin/src/components/common/QueryForm/queryForm.vue
@@ -2,15 +2,13 @@
  <div class="doumee-filter">
    <el-form inline label-suffix=":" @submit.native.prevent>
      <template v-for="(item, index) in queryFormConfig.formItems">
        <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label">
        <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed">
          <el-input v-model="searchForm[item.filed]"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.placeholder ? item.placeholder : '请输入' + item.label" class="w200"
            :placeholder="item.label" class="w200"
            @change="changeForm(item.filed)" @keyup.enter.native="handlekeyup(item.keyup || false)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label"
          :label="item.label">
        <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label">
          <el-input v-model="searchForm[item.filedStrt]"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.start" style="width: 150px" />
@@ -19,49 +17,42 @@
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.end" style="width: 150px" />
        </el-form-item>
        <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label">
        <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed">
          <el-select v-model="searchForm[item.filed]" :filterable="item.filterable || true"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.placeholder ? item.placeholder : '请选择' + item.label" class="w200"
            :placeholder="item.label" class="w200"
            @change="changeForm(item.filed)">
            <el-option v-for="opt, i in item.options" :key="i" :value="item.valueCode ? opt[item.valueCode] : opt.value"
              :label="item.labelCode ? opt[item.labelCode] : opt.label" />
          </el-select>
        </el-form-item>
        <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || '日期'">
        <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" type="date" value-format="yyyy-MM-dd" class="w200"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.placeholder || '请选择日期'" :picker-options="item.pickerOptions || {}"
            :placeholder="item.label" :picker-options="item.pickerOptions || {}"
            @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || ''">
        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange"
            range-separator="至"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :start-placeholder="item.start || ''" :end-placeholder="item.end || ''"
            :picker-options="item.pickerOptions || {}" class="w400" @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || '选择时间'">
        <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed">
          <el-time-picker v-model="searchForm[item.filed]" is-range range-separator="至" format="HH:mm"
            value-format="HH:mm" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围" class="w400"
            @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || '选择日期'">
        <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
            :default-time="['00:00:00', '23:59:59']"
            value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :default-time="['00:00:00', '23:59:59']"
            :picker-options="item.pickerOptions || pickerOptions" range-separator="至"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :start-placeholder="item.start || '开始时间'" :end-placeholder="item.end || '结束时间'" class="w400"
            @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label">
        <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed">
          <slot :name="item.filed" />
        </el-form-item>
      </template>
@@ -100,13 +91,13 @@
      default: () => { }
    }
  },
  data () {
  data() {
    return {
      showZk: false,
      pickerOptions: {
        shortcuts: [{
          text: '近7天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 6)
@@ -115,7 +106,7 @@
        },
        {
          text: '近30天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 29)
@@ -124,7 +115,7 @@
        },
        {
          text: '近60天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 59)
@@ -133,14 +124,14 @@
        },
        {
          text: '近90天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 89)
            picker.$emit('pick', [start, end])
          }
        }],
        disabledDate (time) {
        disabledDate(time) {
          var curDate = new Date(new Date().toLocaleDateString()).getTime()
          var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1)
          return time.getTime() > preDate
@@ -151,31 +142,31 @@
  emits: ['input', 'handleQuery', 'clear'],
  computed: {
    searchForm: {
      get () {
      get() {
        return this.value
      },
      set (value) {
      set(value) {
        this.$emit('input', value)
      }
    }
  },
  methods: {
    handleQuery () {
    handleQuery() {
      this.$emit('handleQuery')
    },
    handlekeyup (pd) {
    handlekeyup(pd) {
      if (pd) {
        this.$emit('handleQuery')
      }
    },
    changeForm (filed) {
    changeForm(filed) {
      this.$emit('changeForm', filed)
    },
    zkBtn () {
    zkBtn() {
      this.showZk = !this.showZk
      this.$emit('zkBtn', this.zk)
    },
    clear () {
    clear() {
      this.$emit('clear')
    }
  }
admin/src/components/common/RichEditor.vue
@@ -1,7 +1,7 @@
<template>
  <div :style="styleEditor">
    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
    <Editor style="height: 300px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
    <Editor style="max-height: 300px;min-height: 100px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
            @onCreated="onCreated" @onChange="onChange" />
  </div>
</template>
@@ -10,6 +10,7 @@
import Vue from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { Loading } from 'element-ui';
let loadingInstance = null
export default Vue.extend({
  props: {
    richData: { // 父组件传递的数据
@@ -149,7 +150,7 @@
            timeout: 10 * 1000, //10 秒
            // 上传前
            onBeforeUpload(files) {
              Loading.service({
              loadingInstance = Loading.service({
                lock: true,
                text: '上传中...',
                spinner: 'el-icon-loading',
@@ -162,7 +163,7 @@
              console.log(res);
              // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
              // 先关闭等待的Message
              Loading.service({
              loadingInstance = Loading.service({
                lock: true,
                text: '上传中...',
                spinner: 'el-icon-loading',
@@ -187,6 +188,7 @@
            // 单个文件上传失败
            onFailed(file, res) {
              console.log(`${file.originalFilename} 上传失败`, res);
              loadingInstance.close();
            },
            // 上传进度的回调函数
            onProgress(progress) {
@@ -195,6 +197,7 @@
            },
            // 上传错误,或者触发 timeout 超时
            onError(file, err, res) {
              loadingInstance.close();
              console.log(`${file.originalFilename} 上传出错`, err, res);
            }
          },
admin/src/views/business/internalMember.vue
@@ -58,7 +58,7 @@
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
            v-permissions="['business:member:delete']">批量删除</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()"
            icon="el-icon-plus">下发授权</el-button></li>
            >下发授权</el-button></li>
        <li style="float: right">
          <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1"
            @change="search">是否包含下级组织</el-checkbox>
admin/src/views/business/relativeMember.vue
@@ -65,8 +65,8 @@
            icon="el-icon-plus" v-permissions="['business:traintime:create']">培训期导入</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
            v-permissions="['business:member:delete']">批量删除</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()"
            icon="el-icon-plus">下发授权</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()">下发授权</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">导出</el-button></li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
@@ -147,7 +147,7 @@
        <el-table-column label="卡片" min-width="80px">
          <template slot-scope="{row}">
            <el-button @click="$refs.cardOpeningRecord.open('开卡记录', row.id)" type="text">{{ row.memberCardCount ||
              '0'}}</el-button>
              '0' }}</el-button>
          </template>
        </el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
@@ -383,6 +383,7 @@
<style lang="scss" scoped>
@import '@/assets/style/variables.scss';
.box {
  width: 100%;
  display: flex;
@@ -399,6 +400,7 @@
    height: 100%;
  }
}
.zhuguan {
  color: $primary-color;
  border: 1px solid $primary-color;
admin/src/views/business/visitorSources.vue
@@ -75,25 +75,28 @@
        />
      </el-form-item>
      <el-form-item label="在园须知:" prop="visitNotice">
        <el-tiptap
        <!-- <el-tiptap
          style="width: 50%"
          v-model="form.visitNotice"
          :extensions="extensions"
        />
        /> -->
        <RichEditor style="width: 70%" :richData="form.visitNotice" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
      </el-form-item>
      <el-form-item label="访客预约指南:" prop="visitNotice">
        <el-tiptap
        <!-- <el-tiptap
          style="width: 50%"
          v-model="form.visitTips"
          :extensions="extensions"
        />
        /> -->
        <RichEditor style="width: 70%" :richData="form.visitTips" :styleEditor="styleEditor" @getWangedditor="getWangedditor1" :readonly="false"/>
      </el-form-item>
      <el-form-item label="访客入园导览图:" prop="visitNotice">
        <el-tiptap
        <!-- <el-tiptap
          style="width: 50%"
          v-model="form.visitMap"
          :extensions="extensions"
        />
        /> -->
        <RichEditor style="width: 70%" :richData="form.visitMap" :styleEditor="styleEditor" @getWangedditor="getWangedditor2" :readonly="false"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submit">保存配置项</el-button>
@@ -104,6 +107,7 @@
<script>
import { getVisitConfigDTO, updateVisitConfig } from '@/api/system/common'
import RichEditor from '@/components/common/RichEditor'
import {
  // necessary extensions
  Doc,
@@ -131,7 +135,9 @@
import { upload } from '@/api/system/common'
export default {
  name: 'visitorSources',
  components: {
    RichEditor
  },
  data() {
    return {
      form: {
@@ -148,6 +154,7 @@
        visitTips: '',
        frezzDays: null
      },
      styleEditor:'border: 1px solid #ccc;display: inline-block;',
      extensions: [
        new Doc(),
        new Text(),
@@ -188,6 +195,15 @@
  },
  methods: {
    getWangedditor(val){
      this.form.visitNotice =val
    },
    getWangedditor1(val){
      this.form.visitTips =val
    },
    getWangedditor2(val){
      this.form.visitMap =val
    },
    getData() {
      getVisitConfigDTO({})
        .then(res => {
admin/src/views/platform/LogisticsRecord/leaveAuth.vue
@@ -121,6 +121,15 @@
            label: '驾驶员'
          },
          {
            filed: 'queryStatusForPower',
            type: 'select',
            label: '授权状态',
            options: [
              { value: '9,10', label: '已授权' },
              { value: '6', label: '未授权' }
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '作业完成时间搜索',
admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -171,6 +171,18 @@
            label: '合同单号'
          },
          {
            filed: 'status',
            type: 'select',
            label: '审批结果',
            options: [
              { value: 0, label: '待审批' },
              { value: 1, label: '审批中' },
              { value: 2, label: '审批通过' },
              { value: 3, label: '审批驳回' },
              { value: 4, label: '已取消' },
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '操作时间',
@@ -289,7 +301,7 @@
        selDate: [],
        fastdate: 0,
      }
      this.getList()
      this.changeRadio('0')
    },
    handleDetail(row) {
      this.isShowDriver = true
admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -105,6 +105,23 @@
            label: '车牌号'
          },
          {
            filed: 'status',
            type: 'select',
            label: '作业状态',
            options: [
              { value: 3, label: '入园等待' },
              { value: 4, label: '月台等待' },
              { value: 5, label: '作业中' },
              { value: 6, label: '作业完成' },
              { value: 7, label: '转移中' },
              { value: 8, label: '异常挂起' },
              { value: 9, label: '已授权离园' },
              { value: 10, label: '已离园' },
              { value: 11, label: '已过号' },
              { value: 12, label: '已取消' },
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '操作时间',
admin/src/views/system/smsMessage.vue
@@ -1,20 +1,22 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)"
      @clear="clear">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear">
    </QueryForm>
    <!-- <div class="pt16">
      <el-button :loading="exLoading" @click="handleEx"
        v-permissions="['business:platformjob:exportExcel']">导出</el-button>
    </div> -->
    <el-table class="mb20" v-loading="loading" :data="list" stripe>
    <div class="pt16 mb10">
      <el-button type="primary" @click="batchStatus(0)"
        v-permissions="['business:platformjob:update']">批量启用</el-button>
      <el-button @click="batchStatus(1)" v-permissions="['business:platformjob:update']">批量禁用</el-button>
    </div>
    <el-table @selection-change="handleSelectionChange" class="mb20" v-loading="loading" :data="list" stripe>
      <el-table-column align="center" type="selection" width="55">
      </el-table-column>
      <el-table-column prop="name" label="消息标题" min-width="160" show-overflow-tooltip />
      <el-table-column prop="code" label="消息编码" min-width="150" show-overflow-tooltip />
      <el-table-column prop="content" label="消息模板" min-width="300" show-overflow-tooltip />
      <el-table-column label="状态" width="120" align="center" fixed="right">
        <template v-slot="scope">
          <el-switch v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1">
          </el-switch>
          <el-switch v-permissions="['business:platformjob:update']" v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1">
          </el-switch>
        </template>
      </el-table-column>
    </el-table>
@@ -25,7 +27,7 @@
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import { getSmsList, SmsStatusUpdate } from '@/api/system/sms'
import { getSmsList, SmsStatusUpdate, SmsStatussUpdate } from '@/api/system/sms'
import GlobalWindow from '@/components/common/GlobalWindow'
import { Message } from 'element-ui'
@@ -38,6 +40,7 @@
  },
  data() {
    return {
      ids: [],
      isShowDetail: false,
      exLoading: false,
      loading: false,
@@ -78,8 +81,32 @@
    this.getList()
  },
  methods: {
    handleSelectionChange(val) {
      this.ids = val.map(i => i.id)
      console.log('ids', this.ids)
    },
    batchStatus(status) {
      const { ids } = this
      if (ids.length == 0) return Message.error('请先选择要更改的短信通知')
      this.$confirm(`确定${status == 0 ? '启用' : '禁用'}选中的所有短信通知吗?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        SmsStatussUpdate({
          ids: ids.join(','),
          status
        }).then(res => {
          Message.success('批量更新成功')
          this.getList()
        }, () => {
          this.getList()
        })
      })
    },
    changeStatus(row) {
      console.log('row', row);
      console.log('row', row)
      SmsStatusUpdate({
        ...row
      }).then(res => {
@@ -109,8 +136,8 @@
        this.loading = false
      })
    },
    clear() {
      this.pagination.page = 1
      this.filters = {}
h5/pages/staff/task/driver.vue
@@ -101,7 +101,11 @@
      </view>
    </view>
    <view class="emyty"></view>
    <view class="main_footer">
    <view v-if="
      info.approveDateVO != null &&
      info.approveDateVO.canBeApproved != null &&
      info.approveDateVO.canBeApproved == 1
    " class="main_footer">
      <view class="btn" @click="handleSub('0')">拒绝</view>
      <view class="btn agree" @click="handleSub('1')">同意</view>
    </view>
pda/manifest.json
@@ -18,7 +18,7 @@
            "proxy": {
                "/gateway_interface": {
                    // 这个字段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址
                    "target" : "http://10.50.250.253:8088/gateway_interface", // 代理服务器域名或IP地址
                    // "target": "http://192.168.0.100:10010", // 代理服务器域名或IP地址
                    "changeOrigin": true, // 允许跨域 
                    "pathRewrite": {
pda/pages/index/control.vue
@@ -36,7 +36,7 @@
        },
        getPlatformGroup() {
            getPlatformGroupList({
                queryData: 1,
                queryData: 0,
                queryType: 0
            }).then(res => {
                this.platformGroupList = res.data || []
pda/utils/config.js
@@ -1,6 +1,6 @@
export const baseUrl = 'gateway_interface/'
// export const baseUrl = 'http://10.50.250.178:8088/gateway_interface/'
// export const baseUrl = 'gateway_interface/'
export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
screen/src/views/PlatformCall.vue
@@ -30,7 +30,6 @@
            }else{
              item.optTimeTemp = '-'
            }
          }
          // item.optTimeTemp = dayjs.duration(Math.abs(new Date().getTime() - item.optTime)).format('HH:mm')
        }