Преглед на файлове

Merge branch '165' of uskycloud/usky-web-mobile into master

gez преди 8 месеца
родител
ревизия
8d18574053

+ 20 - 0
src/api/business/project.js

@@ -9,6 +9,7 @@ import { request } from "@/utils/request";
  * @method ProjectsSelect 项目下拉
  * @method ProjectsWeekList 导入上一篇
  * @method ProjectsList 项目列表
+ * @method ProjectsInsertUpdate 项目新增
  */
 export function projectApi() {
     return {
@@ -60,6 +61,25 @@ export function projectApi() {
                 method: 'GET',
                 data: data
             })
+        },
+        ProjectsInsertUpdate(data) {
+            return request({
+                url: '/service-iot/pmProject/add',
+                method: 'POST',
+                data: data
+            })
+        },
+        ProjectsDelete(param) {
+            return request({
+                url: '/service-iot/pmProject/del?projectId=' + param,
+                method: 'GET',
+            })
+        },
+        ProjectsExit(param) {
+            return request({
+                url: '/service-iot/pmProject/exitProject?projectId=' + param,
+                method: 'GET',
+            })
         }
     };
 }

+ 14 - 32
src/pages.json

@@ -66,15 +66,7 @@
           "titleNView": false
         }
       }
-    },
-    //分析 开始
-    {
-      "path": "pages/business/analyse/index",
-      "style": {
-        "navigationBarTitleText": "分析"
-      }
     }
-    //分析 结束
   ],
   "subPackages": [
     // 公共
@@ -249,29 +241,7 @@
     // 消息
     {
       "root": "pages/info",
-      "pages": [
-        {
-          "path": "fireBase/fireBase",
-          "style": {
-            "navigationBarTitleText": "消防知识库",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "pushList/pushList",
-          "style": {
-            "navigationBarTitleText": "消息推送",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "fireBashDetail/fireBashDetail",
-          "style": {
-            "navigationBarTitleText": "火灾逃生十大要诀",
-            "enablePullDownRefresh": false
-          }
-        }
-      ]
+      "pages": []
     },
     // 智慧安防
     {
@@ -669,7 +639,7 @@
         {
           "path": "projectMange/record/index",
           "style": {
-            "navigationBarTitleText": "报告记录",
+            "navigationBarTitleText": "工作报告",
             "enablePullDownRefresh": false,
             "navigationStyle": "custom",
             "app-plus": {
@@ -726,6 +696,18 @@
             }
           }
         },
+        {
+          "path": "projectMange/list/addEdit",
+          "style": {
+            "navigationBarTitleText": "",
+            "enablePullDownRefresh": false,
+            "navigationStyle": "custom",
+            "app-plus": {
+              "bounce": "none",
+              "titleNView": false
+            }
+          }
+        },
         {
           "path": "projectMange/mall/index",
           "style": {

+ 0 - 81
src/pages/business/analyse/index.vue

@@ -1,81 +0,0 @@
-<template>
-  <view class="analyse-wrapper" style="height: 100%">
-    <view class="justify-center align-center text-center">
-      <u-image src="@/static/images/analyse/analyse-bg.png" width="100%" height="273rpx" :showLoading="false" :fade="false"></u-image>
-    </view>
-    <view class="cu-list menu-avatar padding-lr-sm padding-top-sm" style="height: calc(100% - 8.53125rem)">
-      <view class="cu-item mb10" @tap="goMonthReport()">
-        <view class="cu-avatar">
-          <image class="image-bg" src="@/static/images/analyse/yb-icon.png" />
-        </view>
-        <view class="content">
-          <view class="">月报</view>
-        </view>
-        <view class="nav-right">
-          <view class="text-grey">
-            <text class="icon iconfont mr5 ml20">&#xe629;</text>
-          </view>
-        </view>
-      </view>
-      <view class="cu-item mb10" @tap="goBuildingCheck()">
-        <view class="cu-avatar">
-          <image class="image-bg" src="@/static/images/analyse/build-icon.png" />
-        </view>
-        <view class="content">
-          <view class="">建筑体检</view>
-        </view>
-        <view class="nav-right">
-          <view class="text-grey">
-            <text class="icon iconfont mr5 ml20">&#xe629;</text>
-          </view>
-        </view>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  data() {
-    return {};
-  },
-  methods: {
-    goMonthReport() {
-      // uni.navigateTo({
-      // 	url: '/pages/analyse/monthReport/monthReport',
-      // });
-    },
-    goBuildingCheck() {
-      // uni.navigateTo({
-      // 	url: '/pages/analyse/buildingCheck/buildingCheck',
-      // });
-    },
-  },
-};
-</script>
-
-<style lang="scss">
-//消息页面
-.image-bg {
-  width: 100%;
-  height: 100%;
-}
-
-//分析页面
-.analyse-wrapper {
-  .cu-list.menu-avatar .cu-item {
-    border-radius: 5px;
-    padding: 15px 0;
-    box-shadow: 1px 1px 4px rgb(26 26 26 / 10%);
-    .cu-avatar {
-      background-color: rgba(0, 0, 0, 0);
-      left: 13px;
-    }
-
-    .content {
-      left: 65px;
-      font-size: 16px;
-    }
-  }
-}
-</style>

+ 79 - 0
src/pages/business/common/projectMange/components/avatarList.vue

@@ -0,0 +1,79 @@
+<template>
+  <view class="flex flex-wrap">
+    <view class="mr10 mb10" v-for="(user, index) in userList" :key="index" @click="deleteUsers(index)">
+      <u-avatar
+        class="avatar"
+        :src="user.avatar ? user.avatar : '/static/images/404.png'"
+        shape="square"
+        size="40"
+        fontSize="12"
+        color="#ffffff"
+        :bgColor="$settingStore.themeColor.color"
+        v-if="user.avatar"
+      ></u-avatar>
+      <u-avatar
+        class="avatar"
+        :text="user.label.length > 2 ? user.label.slice(1, 3) : user.label"
+        shape="square"
+        size="40"
+        fontSize="12"
+        color="#ffffff"
+        :bgColor="$settingStore.themeColor.color"
+        v-else
+      ></u-avatar>
+      <view class="font12 text-center mt5">{{ user.label }}</view>
+    </view>
+  </view>
+</template>
+<script setup>
+/*----------------------------------依赖引入-----------------------------------*/
+import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+/*----------------------------------接口引入-----------------------------------*/
+/*----------------------------------组件引入-----------------------------------*/
+/*----------------------------------store引入-----------------------------------*/
+import { useStores, commonStores } from "@/store/modules/index";
+/*----------------------------------公共方法引入-----------------------------------*/
+/*----------------------------------公共变量-----------------------------------*/
+const { proxy } = getCurrentInstance();
+const commonStore = commonStores();
+/*----------------------------------变量声明-----------------------------------*/
+const emit = defineEmits(["deleteUsers"]);
+const props = defineProps({
+  userList: {
+    type: Object,
+    default: [],
+  },
+});
+
+const { userList } = toRefs(props);
+
+/** 删除回调事件 */
+function deleteUsers(index) {
+  emit("deleteUsers", index);
+}
+</script>
+<style lang="scss" scoped>
+.avatar {
+  position: relative;
+
+  &::after {
+    position: absolute;
+    content: "✖";
+    display: inline-block;
+    padding: 2px 4px;
+    border-radius: 100%;
+    cursor: pointer;
+    font-size: 8px;
+    text-align: center;
+    background-color: #ccc;
+    color: #fff;
+    top: -5px;
+    right: -5px;
+  }
+
+  &::after:hover {
+    background-color: #ccc;
+  }
+}
+</style>

+ 391 - 0
src/pages/business/common/projectMange/list/addEdit.vue

@@ -0,0 +1,391 @@
+<template>
+  <u-sticky class="shadow-default" bgColor="#fff" style="top: 0">
+    <u-navbar :titleStyle="{ color: '#000' }" :autoBack="true" :title="pageTitle" :placeholder="true" :safeAreaInsetTop="true" bgColor="#fff">
+      <template #left>
+        <view class="u-navbar__content__left__item">
+          <u-icon name="arrow-left" size="20" color="#000"></u-icon>
+        </view>
+      </template>
+    </u-navbar>
+  </u-sticky>
+
+  <oa-scroll
+    customClass="record-container scroll-height"
+    :isSticky="false"
+    :customStyle="{
+      //#ifdef APP-PLUS || MP-WEIXIN
+      height: 'calc(100vh - 44px)',
+      //#endif
+    }"
+    :refresherLoad="false"
+    :refresherEnabled="false"
+    :refresherDefaultStyle="'none'"
+    :refresherThreshold="44"
+    :lowerThreshold="44"
+    :refresherBackground="'#f5f6f7'"
+    :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
+  >
+    <template #default>
+      <view class="content-area">
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10 required">项目名称</view>
+          <u-input v-model="form.projectName" placeholder="请输入" fontSize="14px" placeholderStyle="color:#909399;font-size:12px" border="none"> </u-input>
+        </view>
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10 required">项目类型</view>
+          <u-input
+            :modelValue="proxy.$common.mapping('label', 'value', form.projectType, project_type)"
+            fontSize="14px"
+            placeholderStyle="color:#909399;font-size:12px"
+            placeholder="请选择"
+            border="none"
+            disabledColor="transparent"
+            disabled
+          />
+          <u-button class="mt20" type="primary" style="width: 100px; height: 25px" @click="handleAction('项目类型', project_type)" shape="circle" icon="plus" size="mini"> 选择项目类型 </u-button>
+        </view>
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10 required">项目状态</view>
+          <u-input
+            :modelValue="proxy.$common.mapping('label', 'value', form.projectStatus, project_status)"
+            fontSize="14px"
+            placeholderStyle="color:#909399;font-size:12px"
+            placeholder="请选择"
+            border="none"
+            disabledColor="transparent"
+            disabled
+          />
+          <u-button class="mt20" type="primary" style="width: 100px; height: 25px" @click="handleAction('项目状态', project_status)" shape="circle" icon="plus" size="mini"> 选择项目状态 </u-button>
+        </view>
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10 required">项目负责人</view>
+          <avatarList :userList="projectHeadList" @deleteUsers="(value) => deleteUsers(value, 'projectHeadList')" />
+          <u-button class="mt20" type="primary" style="width: 100px; height: 25px" @click="insertUsers('projectHeadList')" shape="circle" icon="plus" size="mini"> 选择项目负责人 </u-button>
+        </view>
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10">计划人/天</view>
+          <u-input v-model="form.projectWorkload" placeholder="请输入" fontSize="14px" placeholderStyle="color:#909399;font-size:12px" type="digit" border="none"> </u-input>
+        </view>
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10">项目成员</view>
+          <avatarList :userList="projectMemberList" @deleteUsers="(value) => deleteUsers(value, 'projectMemberList')" />
+          <u-button class="mt20" type="primary" style="width: 100px; height: 25px" @click="insertUsers('projectMemberList')" shape="circle" icon="plus" size="mini"> 选择项目成员 </u-button>
+        </view>
+        <view class="content-area-item mt10 p10 bg-white">
+          <view class="font14 weight mb10">项目描述</view>
+          <u-textarea
+            v-model="form.projectDescribe"
+            placeholder="请输入"
+            placeholderStyle="color:#909399;font-size:12px"
+            confirmType="return"
+            :autoHeight="true"
+            :maxlength="-1"
+            :height="'100%'"
+            border="none"
+            style="padding: 0px"
+            @change="realTimeSaving()"
+          ></u-textarea>
+        </view>
+      </view>
+
+      <view class="app-button">
+        <view class="app-button-padding"></view>
+        <view class="app-button-fixed">
+          <u-button class="app-buttom" type="primary" @click="handleSubmit('提交')" shape="circle"> 提交 </u-button>
+        </view>
+      </view>
+    </template>
+  </oa-scroll>
+
+  <u-picker
+    :show="actionShow"
+    :columns="actionsList"
+    :title="'请选择' + actionTitle"
+    keyName="label"
+    visibleItemCount="6"
+    :defaultIndex="[actionDefaultIndex]"
+    :closeOnClickOverlay="true"
+    @close="actionShow = false"
+    @cancel="actionShow = false"
+    @confirm="selectAction"
+  ></u-picker>
+</template>
+
+<script setup>
+/*----------------------------------依赖引入-----------------------------------*/
+import { onLoad, onShow, onReady, onHide, onLaunch, onUnload, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+/*----------------------------------接口引入-----------------------------------*/
+import { projectApi } from "@/api/business/project.js";
+import { UserList } from "@/api/system/user.js";
+/*----------------------------------组件引入-----------------------------------*/
+import avatarList from "../components/avatarList.vue";
+/*----------------------------------store引入-----------------------------------*/
+import { systemStores } from "@/store/modules/index";
+/*----------------------------------公共方法引入-----------------------------------*/
+import { storageSystem } from "@/utils/storage"; // 公共方法引用
+/*----------------------------------公共变量-----------------------------------*/
+const systemStore = systemStores();
+const { proxy } = getCurrentInstance();
+const { project_status, project_type, project_ascription } = proxy.useDict("project_status", "project_type", "project_ascription");
+const props = defineProps({
+  id: {
+    type: String,
+    default: undefined,
+  },
+});
+/*----------------------------------变量声明-----------------------------------*/
+const uForm = ref(null);
+const state = reactive({
+  pageTitle: "",
+  userDate: [],
+  projectKey: "",
+  projectHeadList: [],
+  projectMemberList: [],
+  form: {
+    projectId: undefined,
+    projectName: "", //项目名称
+    projectType: undefined, //项目类型
+    projectStatus: undefined, //项目状态
+    projectWorkload: "", //计划人/天
+    projectHead: undefined, //项目负责人
+    projectMember: "", //项目成员
+    projectDescribe: "", //项目描述
+    // startTime: "2022-10-01T01:00:00",
+    // endTime: "2023-03-31T23:59:59",
+  },
+
+  actionShow: false,
+  actionTitle: "",
+  actionsList: [],
+  actionDefaultIndex: 0,
+});
+
+const { pageTitle, projectHeadList, projectMemberList, form, rules, actionShow, actionTitle, actionsList, actionDefaultIndex } = toRefs(state);
+
+/** 添加人员按钮事件 */
+function insertUsers(key) {
+  state.projectKey = key;
+  //将人员选中数据传入store中
+  systemStore.mallList.activeUserList = state[key];
+  if (key === "projectHeadList") {
+    proxy.$tab.navigateTo(`/pages/business/common/projectMange/mall/index?number=1`);
+  } else if (key === "projectMemberList") {
+    proxy.$tab.navigateTo(`/pages/business/common/projectMange/mall/index?number=50`);
+  }
+}
+
+/** 删除人员按钮事件 */
+function deleteUsers(index, key) {
+  state[key].splice(index, 1);
+}
+
+/**
+ * @action弹出框点击事件
+ */
+function handleAction(title, event, index, ind) {
+  state.actionTitle = title;
+  state.actionIndex = index;
+  state.actionsList[0] = event;
+  state.actionDefaultIndex = 0;
+  state.actionShow = true;
+}
+
+/**
+ * @action弹出框选择事件
+ */
+function selectAction(e) {
+  if (state.actionTitle == "项目类型") {
+    state.form.projectType = e.value[0].value; //项目名称
+  } else if (state.actionTitle == "项目状态") {
+    state.form.projectStatus = e.value[0].value; //项目名称
+  }
+  state.actionShow = false;
+}
+
+/**
+ * @列表查询
+ * @api接口查询
+ */
+function selectListApi() {
+  projectApi()
+    .ProjectsList({
+      projectId: parseInt(props.id),
+      pageNum: 1,
+      pageSize: 20,
+    })
+    .then((requset) => {
+      if (requset.data.records.length > 0) {
+        const data = requset.data.records[0];
+        state.form.projectId = data.id;
+        state.form.projectName = data.projectName;
+        state.form.projectType = data.projectType;
+        state.form.projectStatus = data.projectStatus;
+        state.form.projectWorkload = data.projectWorkload ? data.projectWorkload : "";
+        state.form.projectHead = data.projectHead;
+        state.form.projectMember = data.projectMember;
+        state.form.projectDescribe = data.projectDescribe;
+      }
+
+      var projectMember = state.form.projectMember.length > 0 ? state.form.projectMember.split(",").map((num) => Number(num)) : [];
+      state.userDate.forEach((e) => {
+        if (projectMember.includes(e.userId)) {
+          state.projectMemberList.push({
+            address: e.address,
+            avatar: e.avatar,
+            deptId: e.deptId,
+            email: e.email,
+            id: e.userId,
+            label: e.nickName,
+            nickName: e.nickName,
+            phonenumber: e.phonenumber,
+            post: e.post,
+            sex: e.sex,
+            userId: e.userId,
+            userName: e.userName,
+          });
+        }
+
+        var projectHead = state.form.projectHead ? [state.form.projectHead] : [];
+        if (projectHead.includes(e.userId)) {
+          state.projectHeadList.push({
+            address: e.address,
+            avatar: e.avatar,
+            deptId: e.deptId,
+            email: e.email,
+            id: e.userId,
+            label: e.nickName,
+            nickName: e.nickName,
+            phonenumber: e.phonenumber,
+            post: e.post,
+            sex: e.sex,
+            userId: e.userId,
+            userName: e.userName,
+          });
+        }
+      });
+    })
+    .catch((err) => {});
+}
+
+/**
+ * @提交
+ */
+function handleSubmit(value) {
+  if (!state.form.projectName) {
+    proxy.$modal.msg("请输入项目名称!");
+    return false;
+  }
+  if (!state.form.projectType) {
+    proxy.$modal.msg("请选择项目类型!");
+    return false;
+  }
+  if (!state.form.projectStatus) {
+    proxy.$modal.msg("请选择项目状态!");
+    return false;
+  }
+  if (state.projectHeadList.length <= 0) {
+    proxy.$modal.msg("请选择项目负责人!");
+    return false;
+  }
+
+  state.form.projectHead = state.projectHeadList[0].id;
+  state.form.projectMember = state.projectMemberList.map((obj) => `${obj.id}`).join(",");
+
+  proxy.$modal.loading("加载中");
+  projectApi()
+    .ProjectsInsertUpdate({
+      id: state.form.projectId,
+      projectName: state.form.projectName, //项目名称
+      projectType: state.form.projectType, //项目类型
+      projectStatus: state.form.projectStatus, //项目状态
+      projectWorkload: state.form.projectWorkload, //计划人/天
+      projectHead: state.form.projectHead, //项目负责人
+      projectMember: state.form.projectMember, //项目成员
+      projectDescribe: state.form.projectDescribe, //项目描述
+      // startTime: "2022-10-01T01:00:00",
+      // endTime: "2023-03-31T23:59:59",
+    })
+    .then(() => {
+      state.projectKey = "";
+      state.projectHeadList = [];
+      state.projectMemberList = [];
+      state.form = {
+        projectId: undefined,
+        projectName: "", //项目名称
+        projectType: undefined, //项目类型
+        projectStatus: undefined, //项目状态
+        projectWorkload: "", //计划人/天
+        projectHead: undefined, //项目负责人
+        projectMember: "", //项目成员
+        projectDescribe: "", //项目描述
+        // startTime: "2022-10-01T01:00:00",
+        // endTime: "2023-03-31T23:59:59",
+      };
+      proxy.$modal.closeLoading();
+      proxy.$modal.msg("提交成功");
+      proxy.$tab.navigateBack(1); //返回到需要执行方法的页面
+    })
+    .catch((errors) => {
+      proxy.$modal.closeLoading();
+      proxy.$modal.msg("提交失败,请稍后重试!");
+    });
+}
+
+onLoad((options) => {
+  UserList({ pageNum: "1", pageSize: "10000" }).then((res) => {
+    state.userDate = res.data.rows;
+  });
+
+  if ("id" in options) {
+    state.pageTitle = "项目编辑";
+    selectListApi();
+  } else {
+    state.pageTitle = "项目新增";
+  }
+});
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+
+  //监听组件返回数据
+  uni.$on("UserMall", function (value) {
+    console.log(value);
+    state[state.projectKey] = value;
+  });
+});
+
+onUnload(() => {
+  uni.$off("UserMall"); //将值删除监听器
+});
+</script>
+
+<style lang="scss" scoped>
+:deep(.u-cell__body) {
+  color: #000000;
+  font-size: 12px;
+  padding: 10px 0px !important;
+}
+
+:deep(.u-collapse-item__content) {
+  overflow: auto;
+}
+
+:deep(.u-collapse-item__content__text) {
+  padding: 0;
+}
+
+:deep(.u-cell__left-icon-wrap) {
+  margin: 0;
+}
+
+.content-area {
+  &-title {
+    text-align: right;
+    color: #909399;
+  }
+}
+</style>

+ 92 - 20
src/pages/business/common/projectMange/list/index.vue

@@ -6,6 +6,11 @@
           <u-icon name="arrow-left" size="20" color="#000"></u-icon>
         </view>
       </template>
+      <template #right>
+        <view class="u-navbar__content__right__item">
+          <u-icon name="more-dot-fill" size="20" color="#000" @click="moreClick('insert', {})"></u-icon>
+        </view>
+      </template>
     </u-navbar>
     <u-tabs
       :list="tabsList"
@@ -43,25 +48,24 @@
   >
     <template #default>
       <view class="menu-list m0">
-        <view class="list-cell" style="color: #666666; line-height: 25px" v-for="(base, index) in dataList" :key="index" @click="handleToDetails(base)">
+        <view class="list-cell" style="color: #666666; line-height: 25px" v-for="(base, index) in dataList" :key="index">
           <view class="content-area-top menu-item">
-            <view class="content-area-top-time">
-              {{ base.createTime ? base.createTime.replace("T", " ") : "" }}
-            </view>
-            <view class="content-area-top-status" v-if="base.projectStatus == 1" style="background-color: #909399"> 未开始 </view>
-            <view class="content-area-top-status" v-if="base.projectStatus == 2" style="background-color: #23dedc"> 进行中 </view>
-            <view class="content-area-top-status" v-if="base.projectStatus == 3" style="background-color: #16bf00"> 已完成 </view>
-            <view class="content-area-top-status" v-if="base.projectStatus == 4" style="background-color: #f9ae3d"> 已暂停 </view>
-            <view class="content-area-top-status" v-if="base.projectStatus == 5" style="background-color: #f56c6c"> 已作废 </view>
+            <view class="content-area-top-time"> </view>
+            <u-icon class="content-area-top-icon" name="more-dot-fill" size="20" color="#000" @click="moreClick('update', base)"></u-icon>
           </view>
           <view class="content-area-row_wrap menu-item">
             <view class="content-area-row_wrap-view"> 项目名称:{{ base.projectName }} </view>
             <view class="content-area-row_wrap-view"> 项目负责人: {{ proxy.$common.mapping("nickName", "userId", base.projectHead, userDate) }} </view>
+            <view class="content-area-row_wrap-view">
+              项目状态:
+              <view class="content-area-row_wrap-view-status" v-if="base.projectStatus == 1" style="background-color: #909399"> 未开始 </view>
+              <view class="content-area-row_wrap-view-status" v-if="base.projectStatus == 2" style="background-color: #23dedc"> 进行中 </view>
+              <view class="content-area-row_wrap-view-status" v-if="base.projectStatus == 3" style="background-color: #16bf00"> 已完成 </view>
+              <view class="content-area-row_wrap-view-status" v-if="base.projectStatus == 4" style="background-color: #f9ae3d"> 已暂停 </view>
+              <view class="content-area-row_wrap-view-status" v-if="base.projectStatus == 5" style="background-color: #f56c6c"> 已作废 </view>
+            </view>
             <view class="content-area-row_wrap-view" style="display: block">
-              项目成员:
-              <span v-for="(userId, index) in base.projectMember.length > 0 ? base.projectMember.split(',') : []" :key="userId">
-                {{ proxy.$common.mapping("nickName", "userId", userId, userDate) }}{{ base.projectMember.split(",").length > index + 1 ? "," : "" }}
-              </span>
+              项目成员:<span>{{ proxy.$common.mapping("nickName", "userId", base.projectMember, userDate) }} </span>
             </view>
           </view>
         </view>
@@ -69,7 +73,16 @@
     </template>
   </oa-scroll>
 
-  <oa-tabbar :tabbarValue="2" :tabbarList="proxy.$constData.projectTabbar" :isTabbar="false"></oa-tabbar>
+  <oa-tabbar :tabbarValue="2" :tabbarList="proxy.$constData.projectTabbar" :isSwitchTab="false"></oa-tabbar>
+
+  <u-modal :show="modalShow" title="" :cancelText="'取消'" :zoom="false" :showConfirmButton="false" :showCancelButton="true" @cancel="modalShow = false">
+    <view class="slot-content">
+      <view @click="handleSubmit('insert')" v-if="modalType === 'insert'">添加项目</view>
+      <view class="mb20" @click="handleSubmit('update')" v-if="modalType === 'update' && modalEvent.projectHead == useStore.userId">编辑项目</view>
+      <view class="mb20" @click="handleSubmit('delete')" v-if="modalType === 'update' && modalEvent.projectHead == useStore.userId">删除项目</view>
+      <view class="mb20" @click="handleSubmit('exit')" v-if="modalType === 'update' && modalEvent.projectHead != useStore.userId">退出项目</view>
+    </view>
+  </u-modal>
 </template>
 
 <script setup>
@@ -81,11 +94,11 @@ import { projectApi } from "@/api/business/project.js";
 import { UserList } from "@/api/system/user.js";
 /*----------------------------------组件引入-----------------------------------*/
 /*----------------------------------store引入-----------------------------------*/
-import { useStores, commonStores } from "@/store/modules/index";
+import { useStores } from "@/store/modules/index";
 /*----------------------------------公共方法引入-----------------------------------*/
 /*----------------------------------公共变量-----------------------------------*/
 const { proxy } = getCurrentInstance();
-const commonStore = commonStores(); //全局公共Store
+const useStore = useStores();
 /*----------------------------------变量声明-----------------------------------*/
 const state = reactive({
   loading: false,
@@ -101,9 +114,12 @@ const state = reactive({
   current: 1,
   total: 0,
   userDate: [],
+  modalShow: false,
+  modalType: "",
+  modalEvent: {},
 });
 
-const { tabsList, tabsCurrent, dataList, pageSize, current, total, userDate } = toRefs(state);
+const { tabsList, tabsCurrent, dataList, pageSize, current, total, userDate, modalShow, modalType, modalEvent } = toRefs(state);
 
 /**
  * @页面初始化
@@ -112,10 +128,46 @@ function init() {
   UserList({ pageNum: "1", pageSize: "10000" }).then((res) => {
     state.userDate = res.data.rows;
   });
-
   selectListApi();
 }
 
+function handleSubmit(type) {
+  if (type === "insert") {
+    proxy.$tab.navigateTo(`/pages/business/common/projectMange/list/addEdit`);
+  } else if (type === "update") {
+    proxy.$tab.navigateTo(`/pages/business/common/projectMange/list/addEdit?id=${state.modalEvent.id}`);
+  } else if (type === "delete") {
+    projectApi()
+      .ProjectsDelete(state.modalEvent.id)
+      .then((requset) => {
+        proxy.$modal.msg("删除成功!");
+        selectListApi();
+      })
+      .catch((errors) => {
+        proxy.$modal.msg("删除失败,请稍后重试!");
+      });
+  } else if (type === "exit") {
+    projectApi()
+      .ProjectsExit(state.modalEvent.id)
+      .then((requset) => {
+        proxy.$modal.msg("退出成功!");
+        selectListApi();
+      })
+      .catch((errors) => {
+        proxy.$modal.msg("退出失败,请稍后重试!");
+      });
+  }
+
+  state.modalShow = false;
+}
+
+/** 更多按钮点击事件 */
+function moreClick(type, event) {
+  state.modalShow = true;
+  state.modalType = type;
+  state.modalEvent = event;
+}
+
 /**
  * @列表查询
  * @api接口查询
@@ -175,7 +227,12 @@ onLoad((options) => {
   init();
 });
 </script>
-
+<style lang="scss" scoped>
+:deep(.u-modal__content) {
+  font-size: 14px;
+  justify-content: left;
+}
+</style>
 <style lang="scss" scoped>
 .list-container {
   .content-area {
@@ -205,6 +262,11 @@ onLoad((options) => {
         border-radius: 20px;
         line-height: 20px;
       }
+
+      &-icon {
+        max-width: 30%;
+        margin: auto 0 auto auto;
+      }
     }
 
     &-row_wrap {
@@ -213,12 +275,22 @@ onLoad((options) => {
 
       &-view {
         display: flex;
-        min-width: 50%;
+        min-width: 100%;
         > .iconfont {
           font-size: 14px;
           color: #909399;
           margin-left: 5px;
         }
+
+        &-status {
+          margin: auto 0 auto 0;
+          font-size: 12px;
+          font-weight: 600;
+          color: #ffffff;
+          padding: 0 5px;
+          border-radius: 20px;
+          line-height: 20px;
+        }
       }
     }
   }

+ 22 - 21
src/pages/business/common/projectMange/mall/components/mall-list.vue

@@ -47,11 +47,11 @@
     <view class="box-foot">
       <view class="box-foot-left" style="justify-self: center">
         <view class="box-foot-left-count" :style="{ color: $settingStore.themeColor.color }">已选择:{{ checkboxUserList.length }}人</view>
-        <view class="box-foot-left-people"> {{ checkboxUserList.toString() || `最多选择${checkBoxNumber}人` }}</view>
+        <view class="box-foot-left-people"> {{ checkboxUserList.toString() || `最多选择${activeUserNumber}人` }}</view>
       </view>
       <view class="box-foot-right">
         <u-button class="app-buttom" type="primary" @click="handleSubmit()" shape="square" :color="$settingStore.themeColor.color">
-          确定({{ checkboxUserList.length + "/" + checkBoxNumber }})
+          确定({{ checkboxUserList.length + "/" + activeUserNumber }})
         </u-button>
       </view>
     </view>
@@ -61,21 +61,24 @@
 <script>
 import uniMallHead from "./mall-head.vue";
 import common from "@/plugins/common.plugins.js";
-import { storageSystem } from "@/utils/storage"; // 公共方法引用
 export default {
   props: {
-    dataList: {
+    userList: {
       type: Array,
       default: () => [],
-    },
+    }, //人员列表汇总
+    activeUserList: {
+      type: Array,
+      default: () => [],
+    }, //选中人员列表
     defaultHeadList: {
       type: Object,
       default: () => {},
     },
-    checkBoxNumber: {
+    activeUserNumber: {
       type: Number,
       default: 200,
-    },
+    }, //选中人员数量
   },
   components: {
     uniMallHead,
@@ -90,25 +93,23 @@ export default {
   },
   mounted() {
     this.init();
+    if (this.activeUserList) {
+      this.activeUserList.forEach((e) => {
+        this.checkboxList.push(e.id);
+        this.checkboxUserData.push(e);
+        this.checkboxUserList.push(e.label);
+      });
+    }
   },
   methods: {
     init() {
       if (Object.keys(this.defaultHeadList).length > 0) {
         this.$refs.refUniMallHead.addTab(this.defaultHeadList);
       }
-      this.currentData = this.dataList;
-
-      var userList = storageSystem.get("project").userList;
-      if (userList) {
-        userList.forEach((e) => {
-          this.checkboxList.push(e.id);
-          this.checkboxUserData.push(e);
-          this.checkboxUserList.push(e.label);
-        });
-      }
+      this.currentData = this.userList;
     },
     tabChange(obj) {
-      this.getCurrentData(obj.id, this.dataList);
+      this.getCurrentData(obj.id, this.userList);
     },
     handelClickItem(item) {
       if (item.children && item.children.length > 0) {
@@ -137,7 +138,7 @@ export default {
     },
     getCurrentData(id, data) {
       if (id === this.defaultHeadList.id) {
-        this.currentData = this.dataList;
+        this.currentData = this.userList;
       } else {
         if (data.length > 0) {
           data.map((item) => {
@@ -152,8 +153,8 @@ export default {
       }
     },
     handleSubmit() {
-      if (this.checkboxList.length >= this.checkBoxNumber) {
-        this.$modal.msg(`最多选择${this.checkBoxNumber}人!`);
+      if (this.checkboxList.length > this.activeUserNumber) {
+        this.$modal.msg(`最多选择${this.activeUserNumber}人!`);
         return false;
       }
       this.$emit("submit", this.checkboxUserData);

+ 20 - 15
src/pages/business/common/projectMange/mall/index.vue

@@ -31,7 +31,15 @@
     :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
   >
     <template #default>
-      <uni-mall-list v-if="dataList.length > 0" :dataList="dataList" :defaultHeadList="defaultHeadList" :checkBoxNumber="checkBoxNumber" @change="handleChange" @submit="handleSubmit"></uni-mall-list>
+      <uni-mall-list
+        v-if="userList.length > 0"
+        :userList="userList"
+        :defaultHeadList="defaultHeadList"
+        :activeUserList="activeUserList"
+        :activeUserNumber="activeUserNumber"
+        @change="handleChange"
+        @submit="handleSubmit"
+      ></uni-mall-list>
     </template>
   </oa-scroll>
 </template>
@@ -45,30 +53,25 @@ import { deptUserTreeSelect } from "@/api/system/user.js";
 /*----------------------------------组件引入-----------------------------------*/
 import uniMallList from "./components/mall-list.vue";
 /*----------------------------------store引入-----------------------------------*/
+import { systemStores } from "@/store/modules/index";
 /*----------------------------------公共方法引入-----------------------------------*/
-import { storageSystem } from "@/utils/storage"; // 公共方法引用
 /*----------------------------------公共变量-----------------------------------*/
 const { proxy } = getCurrentInstance();
+const systemStore = systemStores();
 /*----------------------------------变量声明-----------------------------------*/
 const state = reactive({
   defaultHeadList: { label: "通讯录", id: "18AF75C3-330A-53AC-270E-EAD060BC0E1A" },
-  dataList: [],
-  checkBoxNumber: undefined,
+  userList: [],
+  activeUserList: [],
+  activeUserNumber: undefined,
 });
-const { defaultHeadList, dataList, checkBoxNumber } = toRefs(state);
+const { defaultHeadList, userList, activeUserList, activeUserNumber } = toRefs(state);
 
 function init() {
   deptUserTreeSelect({ pageNum: "1", pageSize: "10000" }).then((res) => {
-    state.dataList = JSON.parse(JSON.stringify(res.data).replace(/value/g, "id"))[0].children;
+    state.userList = JSON.parse(JSON.stringify(res.data).replace(/value/g, "id"))[0].children;
   });
-}
-
-function handleChange(item) {
-  //   if (item.type === "user") {
-  //     uni.navigateTo({
-  //       url: "/pages/datails/datails?user=" + JSON.stringify(item),
-  //     });
-  //   }
+  state.activeUserList = systemStore.mallList.activeUserList;
 }
 
 function handleSubmit(event) {
@@ -76,13 +79,15 @@ function handleSubmit(event) {
   uni.$emit("UserMall", event); //将值存储监听器
 }
 
+function handleChange() {}
+
 onReady(() => {});
 
 onShow(() => {});
 
 onLoad((options) => {
   if ("number" in options) {
-    state.checkBoxNumber = parseInt(options.number);
+    state.activeUserNumber = parseInt(options.number);
   }
   init();
 });

+ 51 - 103
src/pages/business/common/projectMange/write/components/template1.vue

@@ -3,7 +3,7 @@
     <view class="content-area-title font12 mtb5 plr10">实时保存,保存时间 {{ saveTime }}</view>
 
     <view class="content-area-item p10 bg-white">
-      <view class="font14 weight mb10">工作内容</view>
+      <view class="font14 weight mb10 required">工作内容</view>
 
       <u-collapse v-if="form.workContents.length > 0" :accordion="true">
         <u-collapse-item :title="item.projectName + ' ' + (item.workTime ? item.workTime + 'h' : '0h')" :name="item.projectId" v-for="(item, index) in form.workContents" :key="index">
@@ -35,7 +35,7 @@
 
       <u-button class="mt20" type="primary" style="width: 100px; height: 25px" @click="insertProjects()" shape="circle" icon="plus" size="mini"> 添加项目 </u-button>
     </view>
-    <view class="content-area-item mt20 p10 bg-white">
+    <view class="content-area-item mt10 p10 bg-white">
       <view class="font14 weight mb10">明日计划</view>
       <u-textarea
         v-model="form.tomorrowPlan"
@@ -50,7 +50,7 @@
         @change="realTimeSaving()"
       ></u-textarea>
     </view>
-    <view class="content-area-item mt20 p10 bg-white">
+    <view class="content-area-item mt10 p10 bg-white">
       <view class="font14 weight mb10">工作协调</view>
       <u-textarea
         v-model="form.coordinateWork"
@@ -65,78 +65,51 @@
         @change="realTimeSaving()"
       ></u-textarea>
     </view>
-    <view class="content-area-item mt20 p10 bg-white">
+    <view class="content-area-item mt10 p10 bg-white">
       <view class="font14 weight mb10">抄送到人</view>
-      <view class="flex flex-wrap">
-        <view class="mr10 mb10" v-for="(user, index) in userList" :key="index" @click="deleteUsers(index)">
-          <u-avatar
-            class="content-area-item-avatar"
-            :src="user.avatar ? user.avatar : '/static/images/404.png'"
-            shape="square"
-            size="40"
-            fontSize="12"
-            color="#ffffff"
-            :bgColor="$settingStore.themeColor.color"
-            v-if="user.avatar"
-          ></u-avatar>
-          <u-avatar
-            class="content-area-item-avatar"
-            :text="user.label.length > 2 ? user.label.slice(1, 3) : user.label"
-            shape="square"
-            size="40"
-            fontSize="12"
-            color="#ffffff"
-            :bgColor="$settingStore.themeColor.color"
-            v-else
-          ></u-avatar>
-          <view class="font12 text-center mt5">{{ user.label }}</view>
-        </view>
-      </view>
-
+      <avatarList :userList="userList" @deleteUsers="deleteUsers" />
       <u-button class="mt20" type="primary" style="width: 100px; height: 25px" @click="insertUsers()" shape="circle" icon="plus" size="mini"> 选择人员 </u-button>
     </view>
-  </view>
-
-  <view class="content-area-item mt20 p10 bg-white">
-    <view class="flex">
-      <view class="font14 weight">同步钉钉</view>
-      <u-switch
-        style="margin-left: auto"
-        :modelValue="form.sendDingTalk == 0 ? false : true"
-        :ctiveColor="proxy.$settingStore.themeColor.color"
-        size="20"
-        @change="(event) => switchChage(event, 'sendDingTalk')"
-        asyncChange
-      ></u-switch>
-    </view>
-    <view class="flex"> </view>
-  </view>
-
-  <view class="content-area-item mt20 p10 bg-white">
-    <view class="flex">
-      <view class="font14 weight">定时发送</view>
-      <u-switch
-        style="margin-left: auto"
-        :modelValue="form.isRegularlySend == 0 ? false : true"
-        :ctiveColor="proxy.$settingStore.themeColor.color"
-        size="20"
-        @change="(event) => switchChage(event, 'isRegularlySend')"
-        asyncChange
-      ></u-switch>
+    <view class="content-area-item mt10 p10 bg-white">
+      <view class="flex">
+        <view class="font14 weight">同步钉钉</view>
+        <u-switch
+          style="margin-left: auto"
+          :modelValue="form.sendDingTalk == 0 ? false : true"
+          :ctiveColor="proxy.$settingStore.themeColor.color"
+          size="20"
+          @change="(event) => switchChage(event, 'sendDingTalk')"
+          asyncChange
+        ></u-switch>
+      </view>
+      <view class="flex"> </view>
     </view>
-    <view class="flex" v-if="form.isRegularlySend == 0 ? false : true" @click="timeShow = true">
-      <u-input
-        v-model="form.timingTime"
-        placeholder="请选择时间"
-        placeholderStyle="color:#909399;font-size:12px"
-        suffixIcon="arrow-right"
-        suffixIconStyle="color:#909399;font-size:12px;width:10px"
-        border="none"
-        style="padding: 0px; margin: 10px 0"
-        @change="realTimeSaving()"
-        disabledColor="transparent"
-        disabled
-      />
+    <view class="content-area-item mt10 p10 bg-white">
+      <view class="flex">
+        <view class="font14 weight">定时发送</view>
+        <u-switch
+          style="margin-left: auto"
+          :modelValue="form.isRegularlySend == 0 ? false : true"
+          :ctiveColor="proxy.$settingStore.themeColor.color"
+          size="20"
+          @change="(event) => switchChage(event, 'isRegularlySend')"
+          asyncChange
+        ></u-switch>
+      </view>
+      <view class="flex" v-if="form.isRegularlySend == 0 ? false : true" @click="timeShow = true">
+        <u-input
+          v-model="form.timingTime"
+          placeholder="请选择时间"
+          placeholderStyle="color:#909399;font-size:12px"
+          suffixIcon="arrow-right"
+          suffixIconStyle="color:#909399;font-size:12px;width:10px"
+          border="none"
+          style="padding: 0px; margin: 10px 0"
+          @change="realTimeSaving()"
+          disabledColor="transparent"
+          disabled
+        />
+      </view>
     </view>
   </view>
 
@@ -150,8 +123,8 @@
   <u-datetime-picker :show="timeShow" v-model="timeValue" mode="datetime" :closeOnClickOverlay="true" @cancel="timeShow = false" @confirm="timeConfirm"></u-datetime-picker>
 
   <u-modal :show="modalShow" title="" :confirmText="'确定'" :cancelText="'取消'" :zoom="false" :showCancelButton="true" @confirm="modalConfirm" @cancel="modalShow = false">
-    <view class="slot-content">
-      <u-checkbox-group v-model="projectsCheck" placement="row" :size="14" @change="checkboxChange" v-if="projectsList.length > 0">
+    <view class="slot-content" style="max-height: 80vh">
+      <u-checkbox-group v-model="projectsCheck" placement="row" :size="14" v-if="projectsList.length > 0" style="max-height: 100%; overflow: auto">
         <u-checkbox
           :customStyle="{ marginBottom: '8px', width: '50%' }"
           v-for="(item, index) in projectsList"
@@ -175,11 +148,14 @@ import { ref, reactive, computed, getCurrentInstance, toRefs, inject, watchEffec
 import { projectApi } from "@/api/business/project.js";
 import { UserList } from "@/api/system/user.js";
 /*----------------------------------组件引入-----------------------------------*/
+import avatarList from "../../components/avatarList.vue";
 /*----------------------------------store引入-----------------------------------*/
+import { systemStores } from "@/store/modules/index";
 /*----------------------------------公共方法引入-----------------------------------*/
 import { storageSystem } from "@/utils/storage"; // 公共方法引用
 /*----------------------------------公共变量-----------------------------------*/
 const { proxy } = getCurrentInstance();
+const systemStore = systemStores();
 const props = defineProps({
   projectList: {
     type: Object,
@@ -228,11 +204,6 @@ function init() {
     });
 }
 
-function checkboxChange(e) {
-  console.log(e);
-  state.projectsCheck = e;
-}
-
 /** 时间选择器确定按钮点击事件 */
 function timeConfirm(e) {
   state.form.timingTime = proxy.$time.getFormatterDate(e.value);
@@ -250,6 +221,8 @@ function switchChage(e, key) {
 
 /** 添加人员按钮事件 */
 function insertUsers() {
+  //将人员选中数据传入store中
+  systemStore.mallList.activeUserList = state.userList;
   proxy.$tab.navigateTo(`/pages/business/common/projectMange/mall/index?number=200`);
 }
 
@@ -411,30 +384,5 @@ onUnload(() => {
     text-align: right;
     color: #909399;
   }
-
-  &-item {
-    &-avatar {
-      position: relative;
-
-      &::after {
-        position: absolute;
-        content: "✖";
-        display: inline-block;
-        padding: 2px 4px;
-        border-radius: 100%;
-        cursor: pointer;
-        font-size: 8px;
-        text-align: center;
-        background-color: #ccc;
-        color: #fff;
-        top: -5px;
-        right: -5px;
-      }
-
-      &::after:hover {
-        background-color: #ccc;
-      }
-    }
-  }
 }
 </style>

+ 0 - 69
src/pages/info/fireBase/fireBase.vue

@@ -1,69 +0,0 @@
-<template>
-  <view class="fireBashWrapper">
-    <block>
-      <view class="" style="margin-top: 0">
-        <view class="cu-list menu-avatar">
-          <view class="cu-item" v-for="(item, index) in getData" :key="index" @tap="goDetail(item)">
-            <view class="cu-avatar">
-              <image class="image-bg" src="@/static/images/info/fire-base1.png" />
-            </view>
-
-            <view class="content">
-              <view class="pro-title">
-                <view class="cut">{{ item.title }}</view>
-              </view>
-              <view class="pro-des">
-                <view class="text-cut">
-                  {{ item.author }}
-                </view>
-              </view>
-              <view class="pro-date">{{ item.release_time }}</view>
-            </view>
-          </view>
-        </view>
-      </view>
-    </block>
-  </view>
-</template>
-
-<script setup>
-/*----------------------------------依赖引入-----------------------------------*/
-import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance } from "vue";
-/*----------------------------------接口引入-----------------------------------*/
-import { getKnowledgeBaseList } from "@/api/mine/info.js";
-/*----------------------------------组件引入-----------------------------------*/
-/*----------------------------------store引入-----------------------------------*/
-/*----------------------------------公共方法引入-----------------------------------*/
-/*----------------------------------公共变量-----------------------------------*/
-const { proxy } = getCurrentInstance();
-/*----------------------------------变量声明-----------------------------------*/
-const getData = ref([]);
-
-// 列表数据请求
-function getFireBaseList(params = {}) {
-  getKnowledgeBaseList(params).then((res) => {
-    getData.value = res.data;
-  });
-}
-
-// 页面跳转
-function goDetail(item) {
-  proxy.$tab.navigateTo("/pages/info/fireBashDetail/fireBashDetail?id=" + item.id + "&title=" + item.title);
-}
-
-onShow(() => {
-  //调用系统主题颜色
-  proxy.$settingStore.systemThemeColor([1]);
-});
-
-onLoad((option) => {
-  getFireBaseList({ company_code: uni.getStorageSync("selectedCode") });
-});
-</script>
-
-<style lang="scss">
-.processList {
-  position: static;
-}
-</style>

+ 0 - 88
src/pages/info/fireBashDetail/fireBashDetail.vue

@@ -1,88 +0,0 @@
-<template>
-  <view class="p15 fireBashDetailWrapper">
-    <view class="mb15 fireD-tit">{{ getData.title }}</view>
-    <view class="flex justify-between align-center">
-      <view>
-        <!-- <view class="cu-avatar round" style="background-image:url(@/static/images/info/fireBase.png)"></view> -->
-
-        <image class="cu-avatar round" src="@/static/images/info/fireBase.png" />
-
-        <text class="ml10 mr10 font14">{{ getData.author }}</text>
-        <text>{{ getData.release_time }}</text>
-      </view>
-      <view style="color: #999">阅读:{{ getData.frequency }}</view>
-    </view>
-
-    <view class="fireD-content mt15 pt5">
-      <view class="">
-        <view v-html="getData.content"></view>
-      </view>
-    </view>
-
-    <view class="preAndNext" style="display: none">
-      <view class="flex align-top">
-        <view style="width: 120rpx">上一篇:</view>
-        <view style="width: calc(100% - 120rpx)">火灾逃生十大要诀</view>
-      </view>
-      <view class="flex align-top">
-        <view style="width: 120rpx">下一篇:</view>
-        <view style="width: calc(100% - 120rpx)">火灾逃生十大要诀</view>
-      </view>
-    </view>
-
-    <!-- <view class="share grid col-3">
-			<view class="share-item align">
-				<text class="icon iconfont mr10 ml40">&#xe60c;</text>
-				分享
-			</view>
-			<view class="share-item" @click="clickPraise()" :class="[praise?'active':'']"><text class="icon iconfont mr10 ml40"  >&#xe62a;</text>收藏</view>
-			<view class="share-item"  @click="clickZan()" :class="[zan?'active':'']"><text class="icon iconfont mr10 ml40">&#xe600;</text>点赞</view>
-		</view> -->
-  </view>
-</template>
-
-<script setup>
-/*----------------------------------依赖引入-----------------------------------*/
-import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, toRefs } from "vue";
-/*----------------------------------接口引入-----------------------------------*/
-import { getKnowledgeBaseDetails } from "@/api/mine/info.js";
-/*----------------------------------组件引入-----------------------------------*/
-/*----------------------------------store引入-----------------------------------*/
-/*----------------------------------公共方法引入-----------------------------------*/
-/*----------------------------------公共变量-----------------------------------*/
-/*----------------------------------变量声明-----------------------------------*/
-const state = reactive({
-  praise: false,
-  zan: false,
-  getData: {},
-});
-
-const { praise, zan, getData } = toRefs(state);
-
-// 详情页数据请求
-function getFireBaseDetail(params = {}) {
-  getKnowledgeBaseDetails(params).then((res) => {
-    getData.value = res.data[0];
-  });
-}
-
-function clickPraise() {
-  praise.value = !praise.value;
-}
-function clickZan() {
-  zan.value = !zan.value;
-}
-
-onLoad((option) => {
-  getFireBaseDetail({
-    company_code: uni.getStorageSync("selectedCode"),
-    id: option.id,
-  });
-  uni.setNavigationBarTitle({
-    title: option.title,
-  });
-});
-</script>
-
-<style></style>

+ 0 - 151
src/pages/info/pushList/pushList.vue

@@ -1,151 +0,0 @@
-<template>
-  <view class="fireBashWrapper pushListWrapper">
-    <view style="height: 90rpx"></view>
-    <view class="ding">
-      <scroll-view scroll-x class="bg-white nav text-center">
-        <view class="cu-item" :class="index == TabCur ? 'text-blue cur' : ''" v-for="(item, index) in tabNav" :key="index" @tap="tabSelect" :data-id="index">
-          <view class="cu-tag badge">
-            <block class="cu-tag badge" v-if="item.badge != 1">99</block>
-          </view>
-          {{ tabNav[index] }}
-        </view>
-      </scroll-view>
-    </view>
-
-    <block v-if="TabCur == 0">
-      <view class="" style="margin-top: 0">
-        <view class="cu-list menu-avatar">
-          <view class="cu-item" v-for="(item, index) in unporcessList" :key="index" @tap="goFireBaseDetail">
-            <view class="cu-avatar" style="background-image: url(@/static/images/info/push-list.png)"></view>
-            <view class="content">
-              <view class="pro-title">
-                <view class="cut">{{ item.title }}</view>
-              </view>
-              <view class="pro-des">
-                <view class="text-cut">
-                  {{ item.subtit }}
-                </view>
-              </view>
-              <view class="pro-date">{{ item.time }}</view>
-            </view>
-          </view>
-        </view>
-      </view>
-    </block>
-    <block v-if="TabCur == 1">
-      <view class="" style="margin-top: 0">
-        <view class="cu-list menu-avatar">
-          <view class="cu-item" v-for="(item, index) in unporcessList" :key="index" @tap="goFireBaseDetail">
-            <view class="cu-avatar" style="background-image: url(@/static/images/info/push-list.png)"></view>
-            <view class="content">
-              <view class="pro-title">
-                <view class="cut">{{ item.title }}</view>
-              </view>
-              <view class="pro-des">
-                <view class="text-cut">
-                  {{ item.subtit }}
-                </view>
-              </view>
-              <view class="pro-date">{{ item.time }}</view>
-            </view>
-          </view>
-        </view>
-      </view>
-    </block>
-  </view>
-</template>
-
-<script setup>
-/*----------------------------------依赖引入-----------------------------------*/
-import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-/*----------------------------------接口引入-----------------------------------*/
-import {} from "@/api/mine/info.js";
-/*----------------------------------组件引入-----------------------------------*/
-/*----------------------------------store引入-----------------------------------*/
-/*----------------------------------公共方法引入-----------------------------------*/
-/*----------------------------------公共变量-----------------------------------*/
-const { proxy } = getCurrentInstance();
-/*----------------------------------变量声明-----------------------------------*/
-const state = reactive({
-  unporcessList: [
-    { title: "火灾逃生九大要诀", time: "2020-02-12", subtit: "admin" },
-    { title: "火灾逃生九大要诀", time: "2020-02-12", subtit: "admin" },
-  ],
-
-  processedList: proxy.$constData.processedList,
-
-  type: "0",
-  modalName: null,
-  listTouchStart: 0,
-  listTouchDirection: null,
-  CustomBar: CustomBar,
-  TabCur: 0,
-  tabNav: ["未读", "已读"],
-});
-
-const { unporcessList, processedList, type, modalName, listTouchStart, listTouchDirection, CustomBar, TabCur, tabNav } = toRefs(state);
-
-function tabSelect(e) {
-  TabCur.value = e.currentTarget.dataset.id;
-  //   scrollLeft.value = (e.currentTarget.dataset.id - 1) * 60;
-}
-
-// 页面跳转
-function goUnprocessDetail() {
-  uni.navigateTo({
-    url: "/pages/unprocessDetail/unprocessDetail?type=1",
-    success: (res) => {},
-    fail: () => {},
-    complete: () => {},
-  });
-}
-function goProcessedDetail() {
-  uni.navigateTo({
-    url: "/pages/processedDetail/processedDetail?type=1",
-    success: (res) => {},
-    fail: () => {},
-    complete: () => {},
-  });
-}
-function goVideoUnprocessDetail() {
-  uni.navigateTo({
-    url: "/pages/unprocessDetail/unprocessDetail?type=2",
-    success: (res) => {},
-    fail: () => {},
-    complete: () => {},
-  });
-}
-function goVideoProcessedDetail() {
-  uni.navigateTo({
-    url: "/pages/processedDetail/processedDetail?type=2",
-    success: (res) => {},
-    fail: () => {},
-    complete: () => {},
-  });
-}
-</script>
-
-<style lang="scss">
-//已处理未处理消息个数样式
-.nav .cu-item.cur {
-  position: relative;
-  border-bottom: 8rpx solid;
-}
-
-.cu-tag.badge {
-  top: 14rpx;
-  right: 96rpx;
-}
-
-.nav .cu-item {
-  width: 50%;
-  margin: 0;
-
-  .text-blue,
-  .line-blue,
-  .lines-blue {
-    color: #4274e7;
-  }
-}
-</style>

BIN
src/static/images/alarming/profile.jpg


BIN
src/static/images/analyse/analyse-bg.png


BIN
src/static/images/analyse/build-icon.png


BIN
src/static/images/analyse/yb-icon.png


BIN
src/static/images/info/fire-base1.png


BIN
src/static/images/info/fireBase.png


BIN
src/static/images/info/fireD-img.png


BIN
src/static/images/info/info-bg.png


BIN
src/static/images/info/push-list.png


BIN
src/static/images/info/pushList.png


+ 20 - 0
src/static/scss/index.scss

@@ -23,6 +23,26 @@
     box-shadow: 1px 1px 4px rgb(26 26 26 / 10%)
 }
 
+.required {
+    /* 设置定位 */
+    position: relative;
+}
+
+.required::after {
+    /* 星号内容 */
+    content: "*";
+    /* 星号相对于输入框定位 */
+    position: absolute;
+    /* 星号垂直居中 */
+    top: 50%;
+    /* 居中调整 */
+    transform: translateY(-50%);
+    /* 星号颜色 */
+    color: red;
+    margin-left: 5px;
+}
+
+
 
 /* 外边距、内边距全局样式
 ------------------------------- */

+ 3 - 6
src/store/modules/system.js

@@ -7,12 +7,9 @@ import { storage, storageSystem } from "@/utils/storage";
 const systemStores = defineStore(`storage-system`, {
     state: () => ({
         homeList: storageSystem.get("homeList"),
-        infoList: {
-            static: {
-                infoTypeStatic: [],
-                total: undefined
-            }
-        },
+        mallList: {
+            activeUserList: []
+        }
     }),
     unistorage: true,
     actions: {},