| | |
| | | method: "delete", |
| | | }); |
| | | }; |
| | | |
| | | export const getDeviceLedger = () => { |
| | | return request({ |
| | | url: "/device/ledger/getDeviceLedger", |
| | | method: "get", |
| | | }); |
| | | }; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | /** |
| | | * @desc è®¾å¤æ¥ä¿®å表 |
| | | * @param {å页æ¥è¯¢} params |
| | | * @returns |
| | | */ |
| | | export const getRepairPage = (params) => { |
| | | return request({ |
| | | url: "/device/repair/page", |
| | | method: "get", |
| | | params, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * @desc æ°å¢æ¥ä¿® |
| | | * @param {æ¥ä¿®åæ°} data |
| | | * @returns |
| | | */ |
| | | export const addRepair = (data) => { |
| | | return request({ |
| | | url: "/device/repair", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * @desc ç¼è¾æ¥ä¿® |
| | | * @param {æ¥ä¿®åæ°} data |
| | | * @returns |
| | | */ |
| | | export const editRepair = (data) => { |
| | | return request({ |
| | | url: "/device/repair", |
| | | method: "put", |
| | | data, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * @desc æ ¹æ®idæ¥è¯¢ä¸æ¡æ¥ä¿® |
| | | * @param {æ¥ä¿®id} id |
| | | * @returns |
| | | */ |
| | | export const getRepairById = (id) => { |
| | | return request({ |
| | | url: `/device/repair/${id}`, |
| | | method: "get", |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * @desc å 餿¥ä¿® |
| | | * @param {ç¼å·} ids |
| | | * @returns |
| | | */ |
| | | export const delRepair = (ids) => { |
| | | return request({ |
| | | url: `/device/repair/${ids}`, |
| | | method: "delete", |
| | | }); |
| | | }; |
| | | |
| | | export const addMaintain = (data) => { |
| | | return request({ |
| | | url: `/device/repair/repair`, |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }; |
| | |
| | | // éè´å°è´¦é¡µé¢æ¥å£ |
| | | import request from '@/utils/request' |
| | | import request from "@/utils/request"; |
| | | |
| | | // å页æ¥è¯¢ |
| | | export function paymentLedgerList(query) { |
| | | return request({ |
| | | url: '/purchase/paymentRegistration/paymentLedgerList', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | return request({ |
| | | url: "/purchase/paymentRegistration/paymentLedgerList", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å页æ¥è¯¢ |
| | | export function paymentRecordList(supplierId) { |
| | | return request({ |
| | | url: '/purchase/paymentRegistration/getPaymentRecordList/'+ supplierId, |
| | | method: 'get' |
| | | }) |
| | | return request({ |
| | | url: "/purchase/paymentRegistration/getPaymentRecordList/" + supplierId, |
| | | method: "get", |
| | | }); |
| | | } |
| | |
| | | <h3 class="drawer-title">主é¢é£æ ¼è®¾ç½®</h3>
|
| | | </div>
|
| | | <div class="setting-drawer-block-checbox">
|
| | | <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')">
|
| | | <div
|
| | | class="setting-drawer-block-checbox-item"
|
| | | @click="handleTheme('theme-dark')"
|
| | | >
|
| | | <img src="@/assets/images/dark.svg" alt="dark" />
|
| | | <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
| | | <div
|
| | | v-if="sideTheme === 'theme-dark'"
|
| | | class="setting-drawer-block-checbox-selectIcon"
|
| | | style="display: block"
|
| | | >
|
| | | <i aria-label="徿 : check" class="anticon anticon-check">
|
| | | <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
| | | <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
| | | <svg
|
| | | viewBox="64 64 896 896"
|
| | | data-icon="check"
|
| | | width="1em"
|
| | | height="1em"
|
| | | :fill="theme"
|
| | | aria-hidden="true"
|
| | | focusable="false"
|
| | | class
|
| | | >
|
| | | <path
|
| | | d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"
|
| | | />
|
| | | </svg>
|
| | | </i>
|
| | | </div>
|
| | | </div>
|
| | | <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')">
|
| | | <div
|
| | | class="setting-drawer-block-checbox-item"
|
| | | @click="handleTheme('theme-light')"
|
| | | >
|
| | | <img src="@/assets/images/light.svg" alt="light" />
|
| | | <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
| | | <div
|
| | | v-if="sideTheme === 'theme-light'"
|
| | | class="setting-drawer-block-checbox-selectIcon"
|
| | | style="display: block"
|
| | | >
|
| | | <i aria-label="徿 : check" class="anticon anticon-check">
|
| | | <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
| | | <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
| | | <svg
|
| | | viewBox="64 64 896 896"
|
| | | data-icon="check"
|
| | | width="1em"
|
| | | height="1em"
|
| | | :fill="theme"
|
| | | aria-hidden="true"
|
| | | focusable="false"
|
| | | class
|
| | | >
|
| | | <path
|
| | | d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"
|
| | | />
|
| | | </svg>
|
| | | </i>
|
| | | </div>
|
| | |
| | | <div class="drawer-item">
|
| | | <span>主é¢é¢è²</span>
|
| | | <span class="comp-style">
|
| | | <el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange"/>
|
| | | <el-color-picker
|
| | | v-model="theme"
|
| | | :predefine="predefineColors"
|
| | | @change="themeChange"
|
| | | />
|
| | | </span>
|
| | | </div>
|
| | | <el-divider />
|
| | |
| | | <div class="drawer-item">
|
| | | <span>å¼å¯ TopNav</span>
|
| | | <span class="comp-style">
|
| | | <el-switch v-model="settingsStore.topNav" @change="topNavChange" class="drawer-switch" />
|
| | | <el-switch
|
| | | v-model="settingsStore.topNav"
|
| | | @change="topNavChange"
|
| | | class="drawer-switch"
|
| | | />
|
| | | </span>
|
| | | </div>
|
| | |
|
| | |
| | |
|
| | | <el-divider />
|
| | |
|
| | | <el-button type="primary" plain icon="DocumentAdd" @click="saveSetting">ä¿åé
ç½®</el-button>
|
| | | <el-button type="primary" plain icon="DocumentAdd" @click="saveSetting"
|
| | | >ä¿åé
ç½®</el-button
|
| | | >
|
| | | <el-button plain icon="Refresh" @click="resetSetting">éç½®é
ç½®</el-button>
|
| | | </el-drawer>
|
| | |
|
| | | </template>
|
| | |
|
| | | <script setup>
|
| | | import variables from '@/assets/styles/variables.module.scss'
|
| | | import axios from 'axios'
|
| | | import { ElLoading, ElMessage } from 'element-plus'
|
| | | import { useDynamicTitle } from '@/utils/dynamicTitle'
|
| | | import useAppStore from '@/store/modules/app'
|
| | | import useSettingsStore from '@/store/modules/settings'
|
| | | import usePermissionStore from '@/store/modules/permission'
|
| | | import { handleThemeStyle } from '@/utils/theme'
|
| | | import variables from "@/assets/styles/variables.module.scss";
|
| | | import axios from "axios";
|
| | | import { ElLoading, ElMessage } from "element-plus";
|
| | | import { useDynamicTitle } from "@/utils/dynamicTitle";
|
| | | import useAppStore from "@/store/modules/app";
|
| | | import useSettingsStore from "@/store/modules/settings";
|
| | | import usePermissionStore from "@/store/modules/permission";
|
| | | import { handleThemeStyle } from "@/utils/theme";
|
| | |
|
| | | const { proxy } = getCurrentInstance()
|
| | | const appStore = useAppStore()
|
| | | const settingsStore = useSettingsStore()
|
| | | const permissionStore = usePermissionStore()
|
| | | const showSettings = ref(false)
|
| | | const theme = ref(settingsStore.theme)
|
| | | const sideTheme = ref(settingsStore.sideTheme)
|
| | | const storeSettings = computed(() => settingsStore)
|
| | | const predefineColors = ref(["#800020", "#81D8D0", "#E85827", "#008C8C", "#002FA7", "#F9DC24", "#B05923", "#003153", "#8F4B28", "#4C0009"])
|
| | | const { proxy } = getCurrentInstance();
|
| | | const appStore = useAppStore();
|
| | | const settingsStore = useSettingsStore();
|
| | | const permissionStore = usePermissionStore();
|
| | | const showSettings = ref(false);
|
| | | const theme = ref(settingsStore.theme);
|
| | | const sideTheme = ref(settingsStore.sideTheme);
|
| | | const storeSettings = computed(() => settingsStore);
|
| | | const predefineColors = ref([
|
| | | "#002fa7",
|
| | | "#81D8D0",
|
| | | "#E85827",
|
| | | "#008C8C",
|
| | | "#002FA7",
|
| | | "#F9DC24",
|
| | | "#B05923",
|
| | | "#003153",
|
| | | "#8F4B28",
|
| | | "#4C0009",
|
| | | ]);
|
| | |
|
| | | /** æ¯å¦éè¦topnav */
|
| | | function topNavChange(val) {
|
| | | if (!val) {
|
| | | appStore.toggleSideBarHide(false)
|
| | | permissionStore.setSidebarRouters(permissionStore.defaultRoutes)
|
| | | appStore.toggleSideBarHide(false);
|
| | | permissionStore.setSidebarRouters(permissionStore.defaultRoutes);
|
| | | }
|
| | | }
|
| | |
|
| | | function themeChange(val) {
|
| | | settingsStore.theme = val
|
| | | handleThemeStyle(val)
|
| | | settingsStore.theme = val;
|
| | | handleThemeStyle(val);
|
| | | }
|
| | |
|
| | | function handleTheme(val) {
|
| | | settingsStore.sideTheme = val
|
| | | sideTheme.value = val
|
| | | settingsStore.sideTheme = val;
|
| | | sideTheme.value = val;
|
| | | }
|
| | |
|
| | | function saveSetting() {
|
| | | proxy.$modal.loading("æ£å¨ä¿åå°æ¬å°ï¼è¯·ç¨å...")
|
| | | proxy.$modal.loading("æ£å¨ä¿åå°æ¬å°ï¼è¯·ç¨å...");
|
| | | let layoutSetting = {
|
| | | "topNav": storeSettings.value.topNav,
|
| | | "tagsView": storeSettings.value.tagsView,
|
| | | "fixedHeader": storeSettings.value.fixedHeader,
|
| | | "sidebarLogo": storeSettings.value.sidebarLogo,
|
| | | "dynamicTitle": storeSettings.value.dynamicTitle,
|
| | | "sideTheme": storeSettings.value.sideTheme,
|
| | | "theme": storeSettings.value.theme
|
| | | }
|
| | | localStorage.setItem("layout-setting", JSON.stringify(layoutSetting))
|
| | | setTimeout(proxy.$modal.closeLoading(), 1000)
|
| | | topNav: storeSettings.value.topNav,
|
| | | tagsView: storeSettings.value.tagsView,
|
| | | fixedHeader: storeSettings.value.fixedHeader,
|
| | | sidebarLogo: storeSettings.value.sidebarLogo,
|
| | | dynamicTitle: storeSettings.value.dynamicTitle,
|
| | | sideTheme: storeSettings.value.sideTheme,
|
| | | theme: storeSettings.value.theme,
|
| | | };
|
| | | localStorage.setItem("layout-setting", JSON.stringify(layoutSetting));
|
| | | setTimeout(proxy.$modal.closeLoading(), 1000);
|
| | | }
|
| | |
|
| | | function resetSetting() {
|
| | | proxy.$modal.loading("æ£å¨æ¸
é¤è®¾ç½®ç¼åå¹¶å·æ°ï¼è¯·ç¨å...")
|
| | | localStorage.removeItem("layout-setting")
|
| | | setTimeout("window.location.reload()", 1000)
|
| | | proxy.$modal.loading("æ£å¨æ¸
é¤è®¾ç½®ç¼åå¹¶å·æ°ï¼è¯·ç¨å...");
|
| | | localStorage.removeItem("layout-setting");
|
| | | setTimeout("window.location.reload()", 1000);
|
| | | }
|
| | |
|
| | | function openSetting() {
|
| | | showSettings.value = true
|
| | | showSettings.value = true;
|
| | | }
|
| | |
|
| | | defineExpose({
|
| | | openSetting
|
| | | })
|
| | | openSetting,
|
| | | });
|
| | | </script>
|
| | |
|
| | | <style lang='scss' scoped>
|
| | | <style lang="scss" scoped>
|
| | | .setting-drawer-title {
|
| | | margin-bottom: 12px;
|
| | | color: var(--el-text-color-primary, rgba(0, 0, 0, 0.85));
|
| | |
| | | margin: -3px 8px 0px 0px;
|
| | | }
|
| | | }
|
| | | </style> |
| | | </style>
|
| | |
| | | import defaultSettings from '@/settings'
|
| | | import { useDark, useToggle } from '@vueuse/core'
|
| | | import { useDynamicTitle } from '@/utils/dynamicTitle'
|
| | | import defaultSettings from "@/settings";
|
| | | import { useDark, useToggle } from "@vueuse/core";
|
| | | import { useDynamicTitle } from "@/utils/dynamicTitle";
|
| | |
|
| | | const isDark = useDark()
|
| | | const toggleDark = useToggle(isDark)
|
| | | const isDark = useDark();
|
| | | const toggleDark = useToggle(isDark);
|
| | |
|
| | | const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings
|
| | | const {
|
| | | sideTheme,
|
| | | showSettings,
|
| | | topNav,
|
| | | tagsView,
|
| | | fixedHeader,
|
| | | sidebarLogo,
|
| | | dynamicTitle,
|
| | | } = defaultSettings;
|
| | |
|
| | | const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
|
| | | const storageSetting = JSON.parse(localStorage.getItem("layout-setting")) || "";
|
| | |
|
| | | const useSettingsStore = defineStore(
|
| | | 'settings',
|
| | | {
|
| | | state: () => ({
|
| | | title: '',
|
| | | theme: storageSetting.theme || '#2C51D9',
|
| | | sideTheme: storageSetting.sideTheme || sideTheme,
|
| | | showSettings: showSettings,
|
| | | topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
| | | tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
|
| | | fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
|
| | | sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,
|
| | | dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
|
| | | isDark: isDark.value
|
| | | }),
|
| | | actions: {
|
| | | // ä¿®æ¹å¸å±è®¾ç½®
|
| | | changeSetting(data) {
|
| | | const { key, value } = data
|
| | | if (this.hasOwnProperty(key)) {
|
| | | this[key] = value
|
| | | }
|
| | | },
|
| | | // 设置ç½é¡µæ é¢
|
| | | setTitle(title) {
|
| | | this.title = title
|
| | | useDynamicTitle()
|
| | | },
|
| | | // 忢æé»æ¨¡å¼
|
| | | toggleTheme() {
|
| | | this.isDark = !this.isDark
|
| | | toggleDark()
|
| | | const useSettingsStore = defineStore("settings", {
|
| | | state: () => ({
|
| | | title: "",
|
| | | theme: storageSetting.theme || "#002fa7",
|
| | | sideTheme: storageSetting.sideTheme || sideTheme,
|
| | | showSettings: showSettings,
|
| | | topNav:
|
| | | storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
| | | tagsView:
|
| | | storageSetting.tagsView === undefined
|
| | | ? tagsView
|
| | | : storageSetting.tagsView,
|
| | | fixedHeader:
|
| | | storageSetting.fixedHeader === undefined
|
| | | ? fixedHeader
|
| | | : storageSetting.fixedHeader,
|
| | | sidebarLogo:
|
| | | storageSetting.sidebarLogo === undefined
|
| | | ? sidebarLogo
|
| | | : storageSetting.sidebarLogo,
|
| | | dynamicTitle:
|
| | | storageSetting.dynamicTitle === undefined
|
| | | ? dynamicTitle
|
| | | : storageSetting.dynamicTitle,
|
| | | isDark: isDark.value,
|
| | | }),
|
| | | actions: {
|
| | | // ä¿®æ¹å¸å±è®¾ç½®
|
| | | changeSetting(data) {
|
| | | const { key, value } = data;
|
| | | if (this.hasOwnProperty(key)) {
|
| | | this[key] = value;
|
| | | }
|
| | | }
|
| | | })
|
| | | },
|
| | | // 设置ç½é¡µæ é¢
|
| | | setTitle(title) {
|
| | | this.title = title;
|
| | | useDynamicTitle();
|
| | | },
|
| | | // 忢æé»æ¨¡å¼
|
| | | toggleTheme() {
|
| | | this.isDark = !this.isDark;
|
| | | toggleDark();
|
| | | },
|
| | | },
|
| | | });
|
| | |
|
| | | export default useSettingsStore
|
| | | export default useSettingsStore;
|
| | |
| | | modalOptions, |
| | | handleConfirm, |
| | | closeModal, |
| | | } = useModal(); |
| | | } = useModal({ title: "设å¤å°è´¦" }); |
| | | |
| | | const sendForm = async () => { |
| | | loading.value = true; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-form :model="form" label-width="80px"> |
| | | <el-form-item label="维修人"> |
| | | <el-input v-model="form.maintenanceName" placeholder="请è¾å
¥ç»´ä¿®äºº" /> |
| | | </el-form-item> |
| | | <el-form-item label="ç»´ä¿®ç»æ"> |
| | | <el-input v-model="form.maintenanceResult" placeholder="请è¾å
¥ç»´ä¿®ç»æ" /> |
| | | </el-form-item> |
| | | <el-form-item label="ç»´ä¿®ç»æ"> |
| | | <el-date-picker |
| | | v-model="form.maintenanceTime" |
| | | placeholder="è¯·éæ©ç»´ä¿®æ¥æ" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | type="date" |
| | | clearable |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import useFormData from "@/hooks/useFormData"; |
| | | |
| | | defineOptions({ |
| | | name: "设å¤ç»´ä¿®è¡¨å", |
| | | }); |
| | | |
| | | const { form, resetForm } = useFormData({ |
| | | maintenanceName: undefined, // ç»´ä¿®åç§° |
| | | maintenanceResult: undefined, // ç»´ä¿®ç»æ |
| | | maintenanceTime: undefined, // ç»´ä¿®æ¥æ |
| | | }); |
| | | |
| | | const setForm = (data) => { |
| | | form.maintenanceName = data.maintenanceName; |
| | | form.maintenanceResult = data.maintenanceResult; |
| | | form.maintenanceTime = data.maintenanceTime; |
| | | }; |
| | | |
| | | const getForm = () => { |
| | | return form; |
| | | }; |
| | | |
| | | defineExpose({ |
| | | getForm, |
| | | setForm, |
| | | resetForm, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-form :model="form" label-width="100px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°"> |
| | | <el-select v-model="form.deviceLedgerId" @change="setDeviceModel"> |
| | | <el-option |
| | | v-for="(item, index) in deviceOptions" |
| | | :key="index" |
| | | :label="item.deviceName" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è§æ ¼åå·"> |
| | | <el-input |
| | | v-model="form.deviceModel" |
| | | placeholder="请è¾å
¥è§æ ¼åå·" |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥ä¿®æ¥æ"> |
| | | <el-date-picker |
| | | v-model="form.repairTime" |
| | | placeholder="è¯·éæ©æ¥ä¿®æ¥æ" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | type="date" |
| | | clearable |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥ä¿®äºº"> |
| | | <el-input v-model="form.repairName" placeholder="请è¾å
¥æ¥ä¿®äºº" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æ
éç°è±¡"> |
| | | <el-input |
| | | v-model="form.remark" |
| | | :rows="2" |
| | | type="textarea" |
| | | placeholder="请è¾å
¥æ
éç°è±¡" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import useFormData from "@/hooks/useFormData"; |
| | | import { getDeviceLedger } from "@/api/equipmentManagement/ledger"; |
| | | import { onMounted } from "vue"; |
| | | |
| | | defineOptions({ |
| | | name: "è®¾å¤æ¥ä¿®è¡¨å", |
| | | }); |
| | | |
| | | const deviceOptions = ref([]); |
| | | |
| | | const loadDeviceName = async () => { |
| | | const { data } = await getDeviceLedger(); |
| | | deviceOptions.value = data; |
| | | }; |
| | | |
| | | const { form, resetForm } = useFormData({ |
| | | deviceLedgerId: undefined, // 设å¤Id |
| | | deviceName: undefined, // 设å¤åç§° |
| | | deviceModel: undefined, // è§æ ¼åå· |
| | | repairTime: undefined, // æ¥ä¿®æ¥æ |
| | | repairName: undefined, // æ¥ä¿®äºº |
| | | remark: undefined, // æ
éç°è±¡ |
| | | }); |
| | | |
| | | const setDeviceModel = (id) => { |
| | | const option = deviceOptions.value.find((item) => item.id === id); |
| | | form.deviceModel = option.deviceModel; |
| | | }; |
| | | |
| | | const getForm = () => { |
| | | return form; |
| | | }; |
| | | |
| | | const setForm = (data) => { |
| | | form.deviceLedgerId = data.deviceLedgerId; |
| | | form.deviceName = data.deviceName; |
| | | form.deviceModel = data.deviceModel; |
| | | form.repairTime = data.repairTime; |
| | | form.repairName = data.repairName; |
| | | form.remark = data.remark; |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | loadDeviceName(); |
| | | }); |
| | | |
| | | defineExpose({ |
| | | loadDeviceName, |
| | | resetForm, |
| | | getForm, |
| | | setForm, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-drawer v-model="visible" :title="modalOptions.title" direction="ltr"> |
| | | <MaintainForm ref="maintainFormRef" /> |
| | | <template #footer> |
| | | <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button> |
| | | <el-button type="primary" @click="sendForm" :loading="loading"> |
| | | {{ modalOptions.confirmText }} |
| | | </el-button> |
| | | </template> |
| | | </el-drawer> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { useModal } from "@/hooks/useModal"; |
| | | import MaintainForm from "../Form/MaintainForm.vue"; |
| | | import { addMaintain } from "@/api/equipmentManagement/repair"; |
| | | |
| | | defineOptions({ |
| | | name: "ç»´ä¿®æ¨¡ææ¡", |
| | | }); |
| | | |
| | | const maintainFormRef = ref(); |
| | | const emits = defineEmits(["ok"]); |
| | | |
| | | const { |
| | | id, |
| | | visible, |
| | | loading, |
| | | openModal, |
| | | modalOptions, |
| | | handleConfirm, |
| | | closeModal, |
| | | } = useModal({ title: "设å¤ç»´ä¿®" }); |
| | | |
| | | const sendForm = async () => { |
| | | loading.value = true; |
| | | const form = await maintainFormRef.value.getForm(); |
| | | const { code } = await addMaintain({ id: id.value, ...form }); |
| | | if (code == 200) { |
| | | emits("ok"); |
| | | maintainFormRef.value.resetForm(); |
| | | closeModal(); |
| | | } |
| | | loading.value = false; |
| | | }; |
| | | |
| | | const open = async (id, row) => { |
| | | openModal(id); |
| | | await nextTick(); |
| | | maintainFormRef.value.setForm(row); |
| | | }; |
| | | |
| | | defineExpose({ |
| | | open, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog v-model="visible" :title="modalOptions.title" @close="close"> |
| | | <RepairForm ref="repairFormRef" /> |
| | | <template #footer> |
| | | <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button> |
| | | <el-button type="primary" @click="sendForm" :loading="loading"> |
| | | {{ modalOptions.confirmText }} |
| | | </el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { useModal } from "@/hooks/useModal"; |
| | | import RepairForm from "../Form/RepairForm.vue"; |
| | | import { |
| | | addRepair, |
| | | editRepair, |
| | | getRepairById, |
| | | } from "@/api/equipmentManagement/repair"; |
| | | import { ElMessage } from "element-plus"; |
| | | |
| | | defineOptions({ |
| | | name: "è®¾å¤æ¥ä¿®å¼¹çª", |
| | | }); |
| | | |
| | | const emits = defineEmits(["ok"]); |
| | | |
| | | const repairFormRef = ref(); |
| | | const { |
| | | id, |
| | | visible, |
| | | loading, |
| | | openModal, |
| | | modalOptions, |
| | | handleConfirm, |
| | | closeModal, |
| | | } = useModal({ title: "è®¾å¤æ¥ä¿®" }); |
| | | |
| | | const sendForm = async () => { |
| | | loading.value = true; |
| | | const form = await repairFormRef.value.getForm(); |
| | | const { code } = id.value |
| | | ? await editRepair({ id: unref(id), ...form }) |
| | | : await addRepair(form); |
| | | if (code == 200) { |
| | | ElMessage.success(`${id ? "ç¼è¾" : "æ°å¢"}æ¥ä¿®æå`); |
| | | closeModal(); |
| | | emits("ok"); |
| | | } |
| | | loading.value = false; |
| | | }; |
| | | |
| | | const openEdit = async (id) => { |
| | | const { data } = await getRepairById(id); |
| | | openModal(id); |
| | | await nextTick(); |
| | | await repairFormRef.value.setForm(data); |
| | | }; |
| | | |
| | | const close = () => { |
| | | repairFormRef.value.resetForm(); |
| | | closeModal(); |
| | | }; |
| | | |
| | | defineExpose({ |
| | | openModal, |
| | | openEdit, |
| | | }); |
| | | </script> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="table_list"> |
| | | <div class="actions"> |
| | | <el-text class="mx-1" size="large">è®¾å¤æ¥ä¿®</el-text> |
| | | <div> |
| | | <el-button |
| | | type="primary" |
| | | icon="Plus" |
| | | :disabled="multipleList.length !== 1" |
| | | @click="addMaintain" |
| | | > |
| | | æ°å¢ç»´ä¿® |
| | | </el-button> |
| | | <el-button type="success" icon="Van" @click="addRepair"> |
| | | æ°å¢æ¥ä¿® |
| | | </el-button> |
| | | <el-button |
| | | type="danger" |
| | | icon="Delete" |
| | | :disabled="multipleList.length <= 0" |
| | | @click="delRepairByIds(multipleList.map((item) => item.id))" |
| | | > |
| | | æ¹éå é¤ |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | <PIMTable |
| | | rowKey="id" |
| | | isSelection |
| | | :column="columns" |
| | | :tableData="dataList" |
| | | :page="{ |
| | | current: pagination.currentPage, |
| | | size: pagination.pageSize, |
| | | total: pagination.total, |
| | | }" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <template #statusRef="{ row }"> |
| | | <el-tag v-if="row.status === 1" type="success">å®ç»</el-tag> |
| | | <el-tag v-if="row.status === 0" type="error">å¾
ç»´ä¿®</el-tag> |
| | | </template> |
| | | <template #operation="{ row }"> |
| | | <el-button |
| | | type="primary" |
| | | text |
| | | icon="editPen" |
| | | @click="editRepair(row.id)" |
| | | > |
| | | ç¼è¾ |
| | | </el-button> |
| | | <el-button |
| | | type="danger" |
| | | text |
| | | icon="delete" |
| | | @click="delRepairByIds(row.id)" |
| | | > |
| | | å é¤ |
| | | </el-button> |
| | | </template> |
| | | </PIMTable> |
| | | </div> |
| | | <RepairModal ref="repairModalRef" @ok="getTableData" /> |
| | | <MaintainModal ref="maintainModalRef" @ok="getTableData" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { usePaginationApi } from "@/hooks/usePaginationApi"; |
| | | import { getRepairPage, delRepair } from "@/api/equipmentManagement/repair"; |
| | | import { onMounted } from "vue"; |
| | | import RepairModal from "./Modal/RepairModal.vue"; |
| | | import { ElMessageBox, ElMessage } from "element-plus"; |
| | | import dayjs from "dayjs"; |
| | | import MaintainModal from "./Modal/MaintainModal.vue"; |
| | | |
| | | defineOptions({ |
| | | name: "è®¾å¤æ¥ä¿®", |
| | | }); |
| | | |
| | | // æ¨¡ææ¡å®ä¾ |
| | | const repairModalRef = ref(); |
| | | const maintainModalRef = ref(); |
| | | |
| | | // è¡¨æ ¼å¤éæ¡éä¸é¡¹ |
| | | const multipleList = ref([]); |
| | | |
| | | // è¡¨æ ¼é©å |
| | | const { filters, columns, dataList, pagination, getTableData, resetFilters } = |
| | | usePaginationApi( |
| | | getRepairPage, |
| | | { |
| | | searchText: undefined, |
| | | }, |
| | | [ |
| | | { |
| | | label: "设å¤åç§°", |
| | | align: "center", |
| | | prop: "deviceName", |
| | | }, |
| | | { |
| | | label: "è§æ ¼åå·", |
| | | align: "center", |
| | | prop: "deviceModel", |
| | | }, |
| | | { |
| | | label: "æ¥ä¿®æ¥æ", |
| | | align: "center", |
| | | prop: "repairTime", |
| | | formatData: (cell) => dayjs(cell).format("YYYY-MM-DD"), |
| | | }, |
| | | { |
| | | label: "æ¥ä¿®äºº", |
| | | align: "center", |
| | | prop: "repairName", |
| | | }, |
| | | { |
| | | label: "æ
éç°è±¡", |
| | | align: "center", |
| | | prop: "remark", |
| | | }, |
| | | { |
| | | label: "维修人", |
| | | align: "center", |
| | | prop: "maintenanceName", |
| | | }, |
| | | { |
| | | label: "ç»´ä¿®ç»æ", |
| | | align: "center", |
| | | prop: "maintenanceResult", |
| | | }, |
| | | { |
| | | label: "ç»´ä¿®æ¥æ", |
| | | align: "center", |
| | | prop: "maintenanceTime", |
| | | formatData: (cell) => (cell ? dayjs(cell).format("YYYY-MM-DD") : ""), |
| | | }, |
| | | { |
| | | label: "ç¶æ", |
| | | align: "center", |
| | | prop: "status", |
| | | dataType: "slot", |
| | | slot: "statusRef", |
| | | }, |
| | | { |
| | | fixed: "right", |
| | | label: "æä½", |
| | | dataType: "slot", |
| | | slot: "operation", |
| | | align: "center", |
| | | width: "200px", |
| | | }, |
| | | ] |
| | | ); |
| | | |
| | | // å¤éååä»ä¹ |
| | | const handleSelectionChange = (selectionList) => { |
| | | multipleList.value = selectionList; |
| | | }; |
| | | |
| | | // æ°å¢æ¥ä¿® |
| | | const addRepair = () => { |
| | | repairModalRef.value.openModal(); |
| | | }; |
| | | |
| | | // ç¼è¾æ¥ä¿® |
| | | const editRepair = (id) => { |
| | | repairModalRef.value.openEdit(id); |
| | | }; |
| | | |
| | | // æ°å¢ç»´ä¿® |
| | | const addMaintain = () => { |
| | | const row = multipleList.value[0]; |
| | | maintainModalRef.value.open(row.id, row); |
| | | }; |
| | | |
| | | // åè¡å é¤ |
| | | const delRepairByIds = async (ids) => { |
| | | ElMessageBox.confirm("确认å 餿¥ä¿®æ°æ®, æ¤æä½ä¸å¯é?", "è¦å", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }).then(async () => { |
| | | const { code } = await delRepair(ids); |
| | | if (code === 200) { |
| | | ElMessage.success("å 餿å"); |
| | | getTableData(); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getTableData(); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | .actions { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
| | |
| | | label: "å«ç¨åä»·(å
)", |
| | | prop: "taxInclusiveUnitPrice", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : "-"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å«ç¨æ»ä»·(å
)", |
| | | prop: "taxInclusiveTotalPrice", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : "-"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "ä¸å«ç¨æ»ä»·(å
)", |
| | | prop: "taxExclusiveTotalPrice", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : "-"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "æ¬æ¬¡æ¥ç¥¨éé¢(å
)", |
| | | prop: "ticketsAmount", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : "-"; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | label: "æªæ¥ç¥¨éé¢(å
)", |
| | | prop: "futureTicketsAmount", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : "-"; |
| | | }, |
| | | }, |
| | | ], |
| | |
| | | prop: "taxInclusiveUnitPrice", |
| | | width: 150, |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | salesContractNo: form.salesContractNo, |
| | | projectName: form.projectName, |
| | | productData: form.productData, |
| | | issUerId: form.issUerId, // å½å
¥äºº |
| | | issueDate: form.entryDate, |
| | | issUerId: form.issUerId, // å½å
¥äººid |
| | | issUer: form.issUer, // å½å
¥äºº |
| | | salesContractNoId: form.salesContractNoId, |
| | | supplierName: form.supplierName, |
| | |
| | | label: "ååéé¢(å
)", |
| | | prop: "contractAmount", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å·²å¼ç¥¨éé¢(å
)", |
| | | prop: "receiptPaymentAmount", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å¾
å¼ç¥¨éé¢(å
)", |
| | | prop: "unReceiptPaymentAmount", |
| | | formatData: (val) => { |
| | | return parseFloat(val).toFixed(2) ?? 0; |
| | | return val ? parseFloat(val).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | // { |
| | |
| | | label: "å票éé¢(å
)", |
| | | prop: "invoiceAmount", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | | label: "已仿¬¾éé¢(å
)", |
| | | prop: "paymentAmountTotal", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å¾
仿¬¾éé¢(å
)", |
| | | prop: "unPaymentAmountTotal", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | ]); |
| | |
| | | label: "仿¬¾éé¢", |
| | | prop: "currentPaymentAmount", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | label: "å票éé¢(å
)", |
| | | prop: "invoiceAmount", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | | label: "仿¬¾éé¢(å
)", |
| | | prop: "currentPaymentAmount", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | prop: "taxInclusiveTotalPrice", |
| | | align: "center", |
| | | formatData: (cell) => { |
| | | return parseFloat(cell).toFixed(2); |
| | | return cell ? parseFloat(cell).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | prop: "ticketsAmount", |
| | | align: "center", |
| | | formatData: (cell) => { |
| | | return parseFloat(cell).toFixed(2); |
| | | return cell ? parseFloat(cell).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | prop: "unTicketsPrice", |
| | | align: "center", |
| | | formatData: (cell) => { |
| | | return parseFloat(cell).toFixed(2); |
| | | return cell ? parseFloat(cell).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | productData: [], |
| | | invoiceNo: "", |
| | | createUer: "", |
| | | issueDate: "", |
| | | }, |
| | | rules: { |
| | | salesLedgerId: [{ required: true, message: "è¯·éæ©", trigger: "change" }], |
| | |
| | | label: "忬¾éé¢ï¼å
ï¼", |
| | | prop: "receiptPaymentAmount", |
| | | formatData: (params) => { |
| | | return parseFloat(params).toFixed(2); |
| | | return params ? parseFloat(params).toFixed(2) : 0; |
| | | }, |
| | | }, |
| | | { |