1.润泰生物、安佑农牧-生产管控:生产派工需要新增派工产线及生产人
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // è·å产线æ å½¢ç»æ |
| | | export function getDeptPositionTree() { |
| | | return request({ |
| | | url: '/productionLine/listTree', |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢äº§çº¿æå·¥åº |
| | | export function addDeptPosition(data) { |
| | | return request({ |
| | | url: '/productionLine/add', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // ä¿®æ¹äº§çº¿æå·¥åº |
| | | export function updateDeptPosition(data) { |
| | | return request({ |
| | | url: '/productionLine/update', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // å é¤äº§çº¿æå·¥åº |
| | | export function deleteDeptPosition(id) { |
| | | return request({ |
| | | url: '/productionLine/delete', |
| | | method: 'delete', |
| | | data: id |
| | | }) |
| | | } |
| | | |
| | | // æ¥è¯¢å·¥åºåè¡¨ï¼æ ¹æ®parentIdï¼ |
| | | export function laborConfListPage(query) { |
| | | return request({ |
| | | url: '/productionLine/pageList', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç»å®æºå¨ï¼" prop="speculativeTradingName"> |
| | | <el-select |
| | | v-model="modelForm.speculativeTradingName" |
| | | placeholder="è¯·éæ©ç»å®æºå¨" |
| | | multiple |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="çæº1" value="çæº1" /> |
| | | <el-option label="çæº2" value="çæº2" /> |
| | | <el-option label="çæº3" value="çæº3" /> |
| | | <el-option label="çæº4" value="çæº4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- <el-row>--> |
| | | <!-- <el-col :span="24">--> |
| | | <!-- <el-form-item label="ç»å®æºå¨ï¼" prop="speculativeTradingName">--> |
| | | <!-- <el-select--> |
| | | <!-- v-model="modelForm.speculativeTradingName"--> |
| | | <!-- placeholder="è¯·éæ©ç»å®æºå¨"--> |
| | | <!-- multiple--> |
| | | <!-- clearable--> |
| | | <!-- style="width: 100%"--> |
| | | <!-- >--> |
| | | <!-- <el-option label="çæº1" value="çæº1" />--> |
| | | <!-- <el-option label="çæº2" value="çæº2" />--> |
| | | <!-- <el-option label="çæº3" value="çæº3" />--> |
| | | <!-- <el-option label="çæº4" value="çæº4" />--> |
| | | <!-- </el-select>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | |
| | | label: "åä½", |
| | | prop: "unit", |
| | | }, |
| | | { |
| | | label: "ç»å®æºå¨", |
| | | prop: "speculativeTradingName", |
| | | }, |
| | | // { |
| | | // label: "ç»å®æºå¨", |
| | | // prop: "speculativeTradingName", |
| | | // }, |
| | | { |
| | | dataType: "action", |
| | | label: "æä½", |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-tabs v-model="activeTab" @tab-change="handleTabChange"> |
| | | <el-tab-pane label="ç产åºåº" name="production"> |
| | | <el-tab-pane label="æååºåº" name="production"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">客æ·åç§°ï¼</span>--> |
| | |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="èªå®ä¹åºåº" name="manual"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">ä¾åºååç§°ï¼</span>--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="searchForm.supplierName"--> |
| | | <!-- style="width: 240px"--> |
| | | <!-- placeholder="请è¾å
¥"--> |
| | | <!-- @change="handleQuery"--> |
| | | <!-- <el-tab-pane label="èªå®ä¹åºåº" name="manual">--> |
| | | <!-- <div class="search_form">--> |
| | | <!-- <div>--> |
| | | <!--<!– <span class="search_title">ä¾åºååç§°ï¼</span>–>--> |
| | | <!--<!– <el-input–>--> |
| | | <!--<!– v-model="searchForm.supplierName"–>--> |
| | | <!--<!– style="width: 240px"–>--> |
| | | <!--<!– placeholder="请è¾å
¥"–>--> |
| | | <!--<!– @change="handleQuery"–>--> |
| | | <!--<!– clearable–>--> |
| | | <!--<!– prefix-icon="Search"–>--> |
| | | <!--<!– />–>--> |
| | | <!-- <span class="search_title ml10">åºåºæ¥æï¼</span>--> |
| | | <!-- <el-date-picker--> |
| | | <!-- v-model="searchForm.timeStr"--> |
| | | <!-- type="date"--> |
| | | <!-- placeholder="è¯·éæ©æ¥æ"--> |
| | | <!-- value-format="YYYY-MM-DD"--> |
| | | <!-- format="YYYY-MM-DD"--> |
| | | <!-- clearable--> |
| | | <!-- prefix-icon="Search"--> |
| | | <!-- @change="handleQuery"--> |
| | | <!-- />--> |
| | | <span class="search_title ml10">åºåºæ¥æï¼</span> |
| | | <el-date-picker |
| | | v-model="searchForm.timeStr" |
| | | type="date" |
| | | placeholder="è¯·éæ©æ¥æ" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | clearable |
| | | @change="handleQuery" |
| | | /> |
| | | <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button @click="handleOut">导åº</el-button> |
| | | <el-button type="danger" plain @click="handleDelete">å é¤</el-button> |
| | | <el-button type="primary" plain @click="handlePrint">æå°</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | | <el-table |
| | | :data="tableData" |
| | | border |
| | | v-loading="tableLoading" |
| | | @selection-change="handleSelectionChange" |
| | | :expand-row-keys="expandedRowKeys" |
| | | :row-key="(row) => row.id" |
| | | show-summary |
| | | style="width: 100%" |
| | | :summary-method="summarizeMainTable" |
| | | height="calc(100vh - 18.5em)" |
| | | > |
| | | <el-table-column align="center" type="selection" width="55" /> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column label="åºåºæ¥æ" prop="createTime" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="ä¾åºååç§°" prop="supplierName" width="250" show-overflow-tooltip /> --> |
| | | <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> |
| | | <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> |
| | | <el-table-column label="åä½" prop="unit" show-overflow-tooltip /> |
| | | <el-table-column label="ç©åç±»å" prop="itemType" show-overflow-tooltip /> |
| | | <el-table-column label="åºåºæ°é" prop="inboundNum" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="å«ç¨åä»·(å
)" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å«ç¨æ»ä»·(å
)" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç¨ç(%)" prop="taxRate" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ä¸å«ç¨æ»ä»·(å
)" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />--> |
| | | <el-table-column label="åºåºäºº" prop="createBy" show-overflow-tooltip /> |
| | | </el-table> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :page="page.current" |
| | | :limit="page.size" |
| | | @pagination="paginationChange" |
| | | /> |
| | | </div> |
| | | </el-tab-pane> |
| | | <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- <div>--> |
| | | <!-- <el-button @click="handleOut">导åº</el-button>--> |
| | | <!-- <el-button type="danger" plain @click="handleDelete">å é¤</el-button>--> |
| | | <!-- <el-button type="primary" plain @click="handlePrint">æå°</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="table_list">--> |
| | | <!-- <el-table--> |
| | | <!-- :data="tableData"--> |
| | | <!-- border--> |
| | | <!-- v-loading="tableLoading"--> |
| | | <!-- @selection-change="handleSelectionChange"--> |
| | | <!-- :expand-row-keys="expandedRowKeys"--> |
| | | <!-- :row-key="(row) => row.id"--> |
| | | <!-- show-summary--> |
| | | <!-- style="width: 100%"--> |
| | | <!-- :summary-method="summarizeMainTable"--> |
| | | <!-- height="calc(100vh - 18.5em)"--> |
| | | <!-- >--> |
| | | <!-- <el-table-column align="center" type="selection" width="55" />--> |
| | | <!-- <el-table-column align="center" label="åºå·" type="index" width="60" />--> |
| | | <!-- <el-table-column label="åºåºæ¥æ" prop="createTime" show-overflow-tooltip />--> |
| | | <!-- <!– <el-table-column label="ä¾åºååç§°" prop="supplierName" width="250" show-overflow-tooltip /> –>--> |
| | | <!-- <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="åä½" prop="unit" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç©åç±»å" prop="itemType" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="åºåºæ°é" prop="inboundNum" show-overflow-tooltip />--> |
| | | <!--<!– <el-table-column label="å«ç¨åä»·(å
)" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="å«ç¨æ»ä»·(å
)" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ç¨ç(%)" prop="taxRate" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ä¸å«ç¨æ»ä»·(å
)" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />–>--> |
| | | <!-- <el-table-column label="åºåºäºº" prop="createBy" show-overflow-tooltip />--> |
| | | <!-- </el-table>--> |
| | | <!-- <pagination--> |
| | | <!-- v-show="total > 0"--> |
| | | <!-- :total="total"--> |
| | | <!-- layout="total, sizes, prev, pager, next, jumper"--> |
| | | <!-- :page="page.current"--> |
| | | <!-- :limit="page.size"--> |
| | | <!-- @pagination="paginationChange"--> |
| | | <!-- />--> |
| | | <!-- </div>--> |
| | | <!-- </el-tab-pane>--> |
| | | </el-tabs> |
| | | |
| | | <!-- æå°é¢è§å¼¹çª --> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-tabs v-model="activeTab" @tab-change="handleTabChange"> |
| | | <el-tab-pane label="ç产åºåº" name="production"> |
| | | <el-tab-pane label="æååºåº" name="production"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">客æ·åç§°ï¼</span>--> |
| | |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="èªå®ä¹åºåº" name="manual"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">ä¾åºååç§°ï¼</span>--> |
| | | <!-- <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请è¾å
¥" @change="handleQuery"--> |
| | | <!-- clearable prefix-icon="Search" />--> |
| | | <span class="search_title ml10">å
¥åºæ¥æï¼</span> |
| | | <el-date-picker |
| | | v-model="searchForm.timeStr" |
| | | type="date" |
| | | placeholder="è¯·éæ©æ¥æ" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | clearable |
| | | @change="handleQuery" |
| | | /> |
| | | <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button @click="handleOut">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | | <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange" |
| | | :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%" |
| | | :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> |
| | | <el-table-column align="center" type="selection" width="55" /> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column label="å
¥åºæ¶é´" prop="inboundDate" width="100" show-overflow-tooltip /> |
| | | <el-table-column label="å
¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip /> --> |
| | | <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> |
| | | <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> |
| | | <el-table-column label="åä½" prop="unit" width="70" show-overflow-tooltip /> |
| | | <el-table-column label="ç©åç±»å" prop="itemType" show-overflow-tooltip /> |
| | | <el-table-column label="å
¥åºæ°é" prop="inboundNum" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="å«ç¨åä»·" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <el-table-column label="å
¥åºäºº" prop="createBy" show-overflow-tooltip /> |
| | | <el-table-column fixed="right" label="æä½" width="100" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" size="small" @click="openForm(scope.row);">é¢ç¨</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" |
| | | :page="page.current" :limit="page.size" @pagination="paginationChange" /> |
| | | </div> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="èªå®ä¹åºåº" name="manual">--> |
| | | <!-- <div class="search_form">--> |
| | | <!-- <div>--> |
| | | <!--<!– <span class="search_title">ä¾åºååç§°ï¼</span>–>--> |
| | | <!--<!– <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请è¾å
¥" @change="handleQuery"–>--> |
| | | <!--<!– clearable prefix-icon="Search" />–>--> |
| | | <!-- <span class="search_title ml10">å
¥åºæ¥æï¼</span>--> |
| | | <!-- <el-date-picker--> |
| | | <!-- v-model="searchForm.timeStr"--> |
| | | <!-- type="date"--> |
| | | <!-- placeholder="è¯·éæ©æ¥æ"--> |
| | | <!-- value-format="YYYY-MM-DD"--> |
| | | <!-- format="YYYY-MM-DD"--> |
| | | <!-- clearable--> |
| | | <!-- @change="handleQuery"--> |
| | | <!-- />--> |
| | | <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- <div>--> |
| | | <!-- <el-button @click="handleOut">导åº</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="table_list">--> |
| | | <!-- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"--> |
| | | <!-- :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"--> |
| | | <!-- :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">--> |
| | | <!-- <el-table-column align="center" type="selection" width="55" />--> |
| | | <!-- <el-table-column align="center" label="åºå·" type="index" width="60" />--> |
| | | <!-- <el-table-column label="å
¥åºæ¶é´" prop="inboundDate" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å
¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip />--> |
| | | <!-- <!– <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip /> –>--> |
| | | <!-- <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="åä½" prop="unit" width="70" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç©åç±»å" prop="itemType" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å
¥åºæ°é" prop="inboundNum" show-overflow-tooltip />--> |
| | | <!--<!– <el-table-column label="å«ç¨åä»·" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!-- <el-table-column label="å
¥åºäºº" prop="createBy" show-overflow-tooltip />--> |
| | | <!-- <el-table-column fixed="right" label="æä½" width="100" align="center">--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <el-button link type="primary" size="small" @click="openForm(scope.row);">é¢ç¨</el-button>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <!-- </el-table>--> |
| | | <!-- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"--> |
| | | <!-- :page="page.current" :limit="page.size" @pagination="paginationChange" />--> |
| | | <!-- </div>--> |
| | | <!-- </el-tab-pane>--> |
| | | </el-tabs> |
| | | <el-dialog v-model="dialogFormVisible" :title="'æ°å¢åºåº'" width="40%" @close="closeDia"> |
| | | <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-tabs v-model="activeTab" @tab-change="handleTabChange"> |
| | | <el-tab-pane label="ç产å
¥åº" name="production"> |
| | | <el-tab-pane label="æåå
¥åº" name="production"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">客æ·åç§°ï¼</span>--> |
| | |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="èªå®ä¹å
¥åº" name="manual"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">ä¾åºååç§°ï¼</span>--> |
| | | <!-- <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请è¾å
¥" @change="handleQuery"--> |
| | | <!-- clearable prefix-icon="Search" />--> |
| | | <span class="search_title ml10">å
¥åºæ¥æï¼</span> |
| | | <el-date-picker |
| | | v-model="searchForm.timeStr" |
| | | type="date" |
| | | placeholder="è¯·éæ©æ¥æ" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | clearable |
| | | @change="handleQuery" |
| | | /> |
| | | <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button type="primary" @click="openForm('add', 'manual')">æ°å¢å
¥åº</el-button> |
| | | <el-button @click="handleOut">导åº</el-button> |
| | | <el-button type="danger" plain @click="handleDelete">å é¤</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | | <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange" |
| | | :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%" |
| | | :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> |
| | | <el-table-column align="center" type="selection" width="55" /> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column label="å
¥åºæ¶é´" prop="inboundDate" width="100" show-overflow-tooltip /> |
| | | <el-table-column label="å
¥åºæ¹æ¬¡" prop="inboundBatches" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip /> --> |
| | | <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> |
| | | <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> |
| | | <el-table-column label="åä½" prop="unit" width="70" show-overflow-tooltip /> |
| | | <el-table-column label="ç©åç±»å" prop="itemType" show-overflow-tooltip /> |
| | | <el-table-column label="å
¥åºæ°é" prop="inboundNum" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="å«ç¨åä»·" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <el-table-column label="å
¥åºäºº" prop="createBy" width="80" show-overflow-tooltip /> |
| | | <el-table-column fixed="right" label="æä½" width="100" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" size="small" @click="openForm('edit', scope.row, 'manual');">ç¼è¾</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" |
| | | :page="page.current" :limit="page.size" @pagination="paginationChange" /> |
| | | </div> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="èªå®ä¹å
¥åº" name="manual">--> |
| | | <!-- <div class="search_form">--> |
| | | <!-- <div>--> |
| | | <!--<!– <span class="search_title">ä¾åºååç§°ï¼</span>–>--> |
| | | <!--<!– <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请è¾å
¥" @change="handleQuery"–>--> |
| | | <!--<!– clearable prefix-icon="Search" />–>--> |
| | | <!-- <span class="search_title ml10">å
¥åºæ¥æï¼</span>--> |
| | | <!-- <el-date-picker--> |
| | | <!-- v-model="searchForm.timeStr"--> |
| | | <!-- type="date"--> |
| | | <!-- placeholder="è¯·éæ©æ¥æ"--> |
| | | <!-- value-format="YYYY-MM-DD"--> |
| | | <!-- format="YYYY-MM-DD"--> |
| | | <!-- clearable--> |
| | | <!-- @change="handleQuery"--> |
| | | <!-- />--> |
| | | <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- <div>--> |
| | | <!-- <el-button type="primary" @click="openForm('add', 'manual')">æ°å¢å
¥åº</el-button>--> |
| | | <!-- <el-button @click="handleOut">导åº</el-button>--> |
| | | <!-- <el-button type="danger" plain @click="handleDelete">å é¤</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="table_list">--> |
| | | <!-- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"--> |
| | | <!-- :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"--> |
| | | <!-- :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">--> |
| | | <!-- <el-table-column align="center" type="selection" width="55" />--> |
| | | <!-- <el-table-column align="center" label="åºå·" type="index" width="60" />--> |
| | | <!-- <el-table-column label="å
¥åºæ¶é´" prop="inboundDate" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å
¥åºæ¹æ¬¡" prop="inboundBatches" show-overflow-tooltip />--> |
| | | <!-- <!– <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip /> –>--> |
| | | <!-- <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="åä½" prop="unit" width="70" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç©åç±»å" prop="itemType" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å
¥åºæ°é" prop="inboundNum" show-overflow-tooltip />--> |
| | | <!--<!– <el-table-column label="å«ç¨åä»·" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!-- <el-table-column label="å
¥åºäºº" prop="createBy" width="80" show-overflow-tooltip />--> |
| | | <!-- <el-table-column fixed="right" label="æä½" width="100" align="center">--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <el-button link type="primary" size="small" @click="openForm('edit', scope.row, 'manual');">ç¼è¾</el-button>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <!-- </el-table>--> |
| | | <!-- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"--> |
| | | <!-- :page="page.current" :limit="page.size" @pagination="paginationChange" />--> |
| | | <!-- </div>--> |
| | | <!-- </el-tab-pane>--> |
| | | </el-tabs> |
| | | |
| | | <form-dia ref="formDia" @close="handleQuery" @success="handleQuery"></form-dia> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-tabs v-model="activeTab" @tab-change="handleTabChange"> |
| | | <el-tab-pane label="ç产å
¥åº" name="production"> |
| | | <el-tab-pane label="æåå
¥åº" name="production"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">客æ·åç§°ï¼</span>--> |
| | |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="èªå®ä¹å
¥åº" name="manual"> |
| | | <div class="search_form"> |
| | | <div> |
| | | <!-- <span class="search_title">ä¾åºååç§°ï¼</span>--> |
| | | <!-- <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请è¾å
¥" @change="handleQuery"--> |
| | | <!-- clearable prefix-icon="Search" />--> |
| | | <span class="search_title ml10">å
¥åºæ¥æï¼</span> |
| | | <el-date-picker |
| | | v-model="searchForm.timeStr" |
| | | type="date" |
| | | placeholder="è¯·éæ©æ¥æ" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | clearable |
| | | @change="handleQuery" |
| | | /> |
| | | <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button @click="handleOut">导åº</el-button> |
| | | <el-button type="danger" plain @click="handleDelete">å é¤</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | | <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange" |
| | | :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%" |
| | | :row-class-name="tableRowClassName" |
| | | :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> |
| | | <el-table-column align="center" type="selection" width="55" /> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column label="å
¥åºæ¥æ" prop="createTime" width="100" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip />--> |
| | | <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> |
| | | <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> |
| | | <el-table-column label="åä½" prop="unit" width="80" show-overflow-tooltip /> |
| | | <el-table-column label="ç©åç±»å" prop="itemType" width="120" show-overflow-tooltip /> |
| | | <el-table-column label="åºåæ°é" prop="inboundNum" width="100" show-overflow-tooltip /> |
| | | <el-table-column label="å·²åºåºæ°é" prop="totalInboundNum" width="100" show-overflow-tooltip /> |
| | | <el-table-column label="å¾
åºåºæ°é" prop="inboundNum0" width="100" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="å«ç¨åä»·" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç¨ç(%)" prop="taxRate" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />--> |
| | | <el-table-column label="å
¥åºäºº" prop="createBy" width="80" show-overflow-tooltip /> |
| | | <el-table-column fixed="right" label="æä½" width="100" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">ç¼è¾</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" |
| | | :page="page.current" :limit="page.size" @pagination="paginationChange" /> |
| | | </div> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="èªå®ä¹å
¥åº" name="manual">--> |
| | | <!-- <div class="search_form">--> |
| | | <!-- <div>--> |
| | | <!--<!– <span class="search_title">ä¾åºååç§°ï¼</span>–>--> |
| | | <!--<!– <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请è¾å
¥" @change="handleQuery"–>--> |
| | | <!--<!– clearable prefix-icon="Search" />–>--> |
| | | <!-- <span class="search_title ml10">å
¥åºæ¥æï¼</span>--> |
| | | <!-- <el-date-picker--> |
| | | <!-- v-model="searchForm.timeStr"--> |
| | | <!-- type="date"--> |
| | | <!-- placeholder="è¯·éæ©æ¥æ"--> |
| | | <!-- value-format="YYYY-MM-DD"--> |
| | | <!-- format="YYYY-MM-DD"--> |
| | | <!-- clearable--> |
| | | <!-- @change="handleQuery"--> |
| | | <!-- />--> |
| | | <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- <div>--> |
| | | <!-- <el-button @click="handleOut">导åº</el-button>--> |
| | | <!-- <el-button type="danger" plain @click="handleDelete">å é¤</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="table_list">--> |
| | | <!-- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"--> |
| | | <!-- :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"--> |
| | | <!-- :row-class-name="tableRowClassName"--> |
| | | <!-- :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">--> |
| | | <!-- <el-table-column align="center" type="selection" width="55" />--> |
| | | <!-- <el-table-column align="center" label="åºå·" type="index" width="60" />--> |
| | | <!-- <el-table-column label="å
¥åºæ¥æ" prop="createTime" width="100" show-overflow-tooltip />--> |
| | | <!--<!– <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip />–>--> |
| | | <!-- <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="åä½" prop="unit" width="80" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="ç©åç±»å" prop="itemType" width="120" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="åºåæ°é" prop="inboundNum" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å·²åºåºæ°é" prop="totalInboundNum" width="100" show-overflow-tooltip />--> |
| | | <!-- <el-table-column label="å¾
åºåºæ°é" prop="inboundNum0" width="100" show-overflow-tooltip />--> |
| | | <!--<!– <el-table-column label="å«ç¨åä»·" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ç¨ç(%)" prop="taxRate" width="100" show-overflow-tooltip />–>--> |
| | | <!--<!– <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> |
| | | <!-- <el-table-column label="å
¥åºäºº" prop="createBy" width="80" show-overflow-tooltip />--> |
| | | <!-- <el-table-column fixed="right" label="æä½" width="100" align="center">--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">ç¼è¾</el-button>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <!-- </el-table>--> |
| | | <!-- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"--> |
| | | <!-- :page="page.current" :limit="page.size" @pagination="paginationChange" />--> |
| | | <!-- </div>--> |
| | | <!-- </el-tab-pane>--> |
| | | </el-tabs> |
| | | <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? 'æ°å¢åºå' : 'ç¼è¾åºå'" width="70%" |
| | | @close="closeDia"> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container line-management"> |
| | | <div class="config-wrap"> |
| | | <div class="left"> |
| | | <div class="header"> |
| | | <div>产线管ç</div> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="addLine">æ°å¢äº§çº¿</el-button> |
| | | </div> |
| | | </div> |
| | | <el-tree |
| | | :data="lineTree" |
| | | node-key="id" |
| | | :props="{ label: 'name' }" |
| | | @node-click="onNodeClick" |
| | | highlight-current |
| | | class="tree" |
| | | > |
| | | <template #default="{ data }"> |
| | | <span> |
| | | <el-tag size="small" type="warning" effect="plain" style="margin-right:4px;"> |
| | | 产线 |
| | | </el-tag> |
| | | {{ data.name }} |
| | | </span> |
| | | <span class="ops"> |
| | | <el-button link size="small" type="primary" @click.stop="openRenameDialog(data)">éå½å</el-button> |
| | | <el-button link size="small" type="danger" @click.stop="confirmRemoveNode(data)">å é¤</el-button> |
| | | </span> |
| | | </template> |
| | | </el-tree> |
| | | </div> |
| | | <div class="right"> |
| | | <div v-if="currentLine" class="process-config"> |
| | | <div class="title"> |
| | | <span>å·¥åºç®¡çï¼{{ currentLine.label }}</span> |
| | | </div> |
| | | <div class="q-toolbar"> |
| | | <el-button size="small" type="primary" @click="openAddProcessDialog">æ°å¢å·¥åº</el-button> |
| | | </div> |
| | | <el-table :data="processList" border size="small" v-loading="processLoading"> |
| | | <el-table-column label="å·¥åºåç§°" prop="name" /> |
| | | <el-table-column label="æä½" width="160" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" size="small" @click="openEditProcessDialog(scope.row)">ç¼è¾</el-button> |
| | | <el-button link type="danger" size="small" @click="onDeleteProcess(scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="pagination-container"> |
| | | <el-pagination |
| | | v-model:current-page="processQueryParams.current" |
| | | v-model:page-size="processQueryParams.size" |
| | | :page-sizes="[10, 20, 50, 100]" |
| | | :layout="'total, sizes, prev, pager, next, jumper'" |
| | | :total="total" |
| | | @size-change="handleProcessSizeChange" |
| | | @current-change="handleProcessCurrentChange" |
| | | /> |
| | | </div> |
| | | </div> |
| | | <div v-else class="empty">è¯·éæ©å·¦ä¾§äº§çº¿è¿è¡å·¥åºé
ç½®</div> |
| | | </div> |
| | | </div> |
| | | <!-- æ°å¢äº§çº¿å¼¹çª --> |
| | | <el-dialog v-model="addDialogVisible" :title="addDialogTitle" width="420px"> |
| | | <el-form :model="addForm" :rules="addRules" ref="addFormRef" label-width="80px"> |
| | | <el-form-item label="产线åç§°" prop="name"> |
| | | <el-input v-model="addForm.name" placeholder="请è¾å
¥äº§çº¿åç§°" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="onCancelAdd">å æ¶</el-button> |
| | | <el-button type="primary" @click="onConfirmAdd" :loading="addLoading">确 认</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- éå½åå¼¹çª --> |
| | | <el-dialog v-model="renameDialogVisible" :title="renameDialogTitle" width="420px"> |
| | | <el-form :model="renameForm" :rules="addRules" ref="renameFormRef" label-width="80px"> |
| | | <el-form-item label="产线åç§°" prop="name"> |
| | | <el-input v-model="renameForm.name" placeholder="请è¾å
¥äº§çº¿åç§°" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="onCancelRename">å æ¶</el-button> |
| | | <el-button type="primary" @click="onConfirmRename" :loading="renameLoading">确 认</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | <!-- æ°å¢/ç¼è¾å·¥åºå¼¹çª --> |
| | | <el-dialog v-model="addProcessDialogVisible" :title="addProcessDialogTitle" width="420px"> |
| | | <el-form :model="addProcessForm" label-width="80px"> |
| | | <el-form-item label="å·¥åºåç§°" prop="name"> |
| | | <el-input v-model="addProcessForm.name" placeholder="请è¾å
¥å·¥åºåç§°" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="onCancelAddProcess">å æ¶</el-button> |
| | | <el-button type="primary" :loading="addProcessSaving" @click="onConfirmAddProcess">ä¿ å</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, reactive, computed, watch, onMounted } from 'vue' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { getDeptPositionTree, addDeptPosition, updateDeptPosition, deleteDeptPosition, laborConfListPage } from '@/api/lavorissce/issue' |
| | | |
| | | // ç»æï¼äº§çº¿å表 |
| | | const lines = reactive([]) // [{id,name,processes:[{id,processName,processCode,standardTime,status}]}] |
| | | |
| | | // å 载产线å表 |
| | | async function loadLineTree() { |
| | | try { |
| | | const res = await getDeptPositionTree() |
| | | const data = res.data |
| | | lines.splice(0, lines.length, ...data) |
| | | } catch (e) { |
| | | // éé»å¤±è´¥ï¼ä¿çæ¬å°ç¤ºä¾æ°æ® |
| | | } |
| | | } |
| | | |
| | | const lineTree = computed(() => lines) |
| | | |
| | | const currentLine = ref(null) |
| | | // å³ä¾§ï¼å½å产线çå·¥åºå表 |
| | | const processList = ref([]) |
| | | const processLoading = ref(false) |
| | | |
| | | // å·¥åºå页忰 |
| | | const processQueryParams = reactive({ |
| | | current: 1, |
| | | size: 10 |
| | | }) |
| | | const total = ref(0) |
| | | |
| | | // å 载工åºå表 |
| | | async function loadProcessList(lineId) { |
| | | if (!lineId) { |
| | | if (!currentLine.value) return |
| | | lineId = currentLine.value.id |
| | | } |
| | | |
| | | try { |
| | | processLoading.value = true |
| | | const res = await laborConfListPage({ |
| | | id: lineId, |
| | | current: processQueryParams.current, |
| | | size: processQueryParams.size |
| | | }) |
| | | // æ°æ¥å£è¿åçæ¯æ å½¢ç»æï¼ç´æ¥ä½¿ç¨è¿åçæ°æ® |
| | | processList.value = res.data.records.map(it => ({ |
| | | ...it, |
| | | id: it.id, |
| | | name: it.name |
| | | })) |
| | | total.value = res.data.total |
| | | } finally { |
| | | processLoading.value = false |
| | | } |
| | | } |
| | | |
| | | // å·¥åºå页äºä»¶å¤ç |
| | | function handleProcessSizeChange(val) { |
| | | processQueryParams.size = val |
| | | processQueryParams.current = 1 |
| | | loadProcessList() |
| | | } |
| | | |
| | | function handleProcessCurrentChange(val) { |
| | | processQueryParams.current = val |
| | | loadProcessList() |
| | | } |
| | | |
| | | // æ°å¢å·¥åºå¼¹çªç¶æä¸é»è¾ï¼ä¾æ¨¡æ¿ä½¿ç¨ï¼ |
| | | const addProcessDialogVisible = ref(false) |
| | | const addProcessDialogTitle = ref('æ°å¢å·¥åº') |
| | | const addProcessSaving = ref(false) |
| | | const addProcessForm = reactive({ id: undefined, name: '' }) |
| | | |
| | | function openAddProcessDialog() { |
| | | if (!currentLine.value) return |
| | | addProcessDialogTitle.value = 'æ°å¢å·¥åº' |
| | | addProcessForm.id = undefined |
| | | addProcessForm.name = '' |
| | | addProcessDialogVisible.value = true |
| | | } |
| | | |
| | | function openEditProcessDialog(row) { |
| | | if (!currentLine.value || !row) return |
| | | addProcessDialogTitle.value = 'ç¼è¾å·¥åº' |
| | | addProcessForm.id = row.id |
| | | addProcessForm.name = row.name |
| | | addProcessDialogVisible.value = true |
| | | } |
| | | |
| | | function onCancelAddProcess() { |
| | | addProcessDialogVisible.value = false |
| | | } |
| | | |
| | | async function onConfirmAddProcess() { |
| | | if (!currentLine.value.id) { |
| | | ElMessage.error('请å
éæ©äº§çº¿') |
| | | return |
| | | } |
| | | addProcessSaving.value = true |
| | | try { |
| | | if (addProcessForm.id) { |
| | | // ç¼è¾å·¥åº |
| | | await updateDeptPosition({ |
| | | id: addProcessForm.id, |
| | | name: addProcessForm.name, |
| | | type: 2 // å·¥åºç±»å |
| | | }) |
| | | } else { |
| | | // æ°å¢å·¥åº |
| | | await addDeptPosition({ |
| | | parentId: currentLine.value.id, |
| | | name: addProcessForm.name, |
| | | type: 2 // å·¥åºç±»å |
| | | }) |
| | | } |
| | | |
| | | // éæ°å 载工åºå表 |
| | | await loadProcessList() |
| | | |
| | | addProcessDialogVisible.value = false |
| | | ElMessage.success('ä¿åæå') |
| | | } catch (e) { |
| | | ElMessage.error((e && (e.msg || e.message)) || 'ä¿å失败') |
| | | } finally { |
| | | addProcessSaving.value = false |
| | | } |
| | | } |
| | | |
| | | async function onDeleteProcess(row) { |
| | | if (!currentLine.value || !row) return |
| | | try { |
| | | await ElMessageBox.confirm('ç¡®å®å é¤è¯¥å·¥åºåï¼', 'æç¤º', { type: 'warning' }) |
| | | } catch { |
| | | return |
| | | } |
| | | try { |
| | | await deleteDeptPosition([row.id]) |
| | | // éæ°å 载工åºå表 |
| | | await loadProcessList() |
| | | ElMessage.success('å 餿å') |
| | | } catch (e) { |
| | | ElMessage.error((e && (e.msg || e.message)) || 'å é¤å¤±è´¥') |
| | | } |
| | | } |
| | | |
| | | // æ°å¢äº§çº¿å¼¹çªç¶æ |
| | | const addDialogVisible = ref(false) |
| | | const addDialogTitle = ref('æ°å¢äº§çº¿') |
| | | const addLoading = ref(false) |
| | | const addFormRef = ref() |
| | | const addForm = reactive({ name: '', type: 1, parentId: undefined }) |
| | | const addRules = { name: [{ required: true, message: '请è¾å
¥äº§çº¿åç§°', trigger: 'blur' }] } |
| | | |
| | | // éå½å产线弹çªç¶æ |
| | | const renameDialogVisible = ref(false) |
| | | const renameLoading = ref(false) |
| | | const renameFormRef = ref() |
| | | const renameForm = reactive({ id: undefined, type: 1, name: '' }) |
| | | const renameDialogTitle = ref('éå½å产线') |
| | | |
| | | function newLine() { |
| | | return { |
| | | id: Date.now(), |
| | | label: 'æ°äº§çº¿', |
| | | hrPositionId: undefined, |
| | | processes: [] |
| | | } |
| | | } |
| | | |
| | | async function addLine() { |
| | | openAddDialog() |
| | | } |
| | | |
| | | function openAddDialog() { |
| | | addForm.name = '' |
| | | addForm.type = 1 |
| | | addForm.parentId = undefined |
| | | addDialogTitle.value = 'æ°å¢äº§çº¿' |
| | | addDialogVisible.value = true |
| | | } |
| | | |
| | | function onCancelAdd() { |
| | | addDialogVisible.value = false |
| | | } |
| | | |
| | | async function onConfirmAdd() { |
| | | addFormRef.value?.validate(async (valid) => { |
| | | if (!valid) return |
| | | try { |
| | | addLoading.value = true |
| | | const payload = { name: addForm.name, type: addForm.type, parentId: 0 } |
| | | await addDeptPosition(payload) |
| | | addDialogVisible.value = false |
| | | await loadLineTree() |
| | | } finally { |
| | | addLoading.value = false |
| | | } |
| | | }) |
| | | } |
| | | |
| | | function onNodeClick(node) { |
| | | console.log(node); |
| | | |
| | | currentLine.value = node |
| | | // éæ©äº§çº¿æ¶ï¼å 载工åºå表 |
| | | loadProcessList() |
| | | } |
| | | |
| | | function openRenameDialog(node) { |
| | | renameForm.id = node.id |
| | | renameForm.type = 1 |
| | | renameForm.name = node.name |
| | | renameDialogTitle.value = 'éå½å产线' |
| | | renameDialogVisible.value = true |
| | | } |
| | | |
| | | function onCancelRename() { |
| | | renameDialogVisible.value = false |
| | | } |
| | | |
| | | async function onConfirmRename() { |
| | | renameFormRef.value?.validate(async (valid) => { |
| | | if (!valid) return |
| | | try { |
| | | renameLoading.value = true |
| | | await updateDeptPosition({ id: renameForm.id, name: renameForm.name, type: renameForm.type }) |
| | | renameDialogVisible.value = false |
| | | await loadLineTree() |
| | | } finally { |
| | | renameLoading.value = false |
| | | } |
| | | }) |
| | | } |
| | | |
| | | async function confirmRemoveNode(node) { |
| | | const id = node.id |
| | | // ç®å确认 |
| | | try { |
| | | await deleteDeptPosition([id]) |
| | | await loadLineTree() |
| | | } catch (e) { |
| | | // ignore errors |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | onMounted(() => { |
| | | loadLineTree() |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .labor-issue { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | } |
| | | .config-wrap { |
| | | display: flex; |
| | | gap: 16px; |
| | | align-items: stretch; |
| | | } |
| | | .left, .right { |
| | | background: #fff; |
| | | border: 1px solid var(--el-border-color, #ebeef5); |
| | | border-radius: 8px; |
| | | box-shadow: var(--el-box-shadow-light, 0 2px 12px 0 rgba(0,0,0,.1)); |
| | | } |
| | | .left { width: 340px; padding: 12px; } |
| | | .right { flex: 1; padding: 14px; } |
| | | .header { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | margin-bottom: 10px; |
| | | flex-direction: column; |
| | | } |
| | | .header :deep(.el-button+.el-button) { margin-left: 8px; } |
| | | .tree { |
| | | max-height: calc(100vh - 300px); |
| | | overflow: auto; |
| | | padding: 6px; |
| | | border-radius: 6px; |
| | | background: #fafafa; |
| | | } |
| | | .ops { margin-left: 8px; opacity: 0.6; transition: opacity .2s; } |
| | | :deep(.el-tree-node__content):hover .ops { opacity: 1; } |
| | | |
| | | .q-toolbar { margin-bottom: 10px; } |
| | | .empty { color: #999; padding: 48px; text-align: center; } |
| | | |
| | | .summary-wrap { display: flex; flex-direction: column; gap: 16px; } |
| | | .people, .summary { |
| | | background: #fff; |
| | | border: 1px solid var(--el-border-color, #ebeef5); |
| | | border-radius: 8px; |
| | | padding: 12px; |
| | | box-shadow: var(--el-box-shadow-light, 0 2px 12px 0 rgba(0,0,0,.06)); |
| | | } |
| | | .summary .header { |
| | | font-weight: 600; |
| | | margin-bottom: 12px; |
| | | } |
| | | </style> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="å·¥åº" prop="process" width="150"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.process" placeholder="请è¾å
¥å·¥åº" /> |
| | | <el-select |
| | | v-model="scope.row.process" |
| | | placeholder="鿩工åº" |
| | | style="width: 100%;" |
| | | filterable |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="process in processList" |
| | | :key="process.id" |
| | | :label="process.name" |
| | | :value="process.name" |
| | | /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åä½" prop="unit" width="90"> |
| | |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å·¥æ¶å®é¢" width="200" prop="workHours"> |
| | | <el-table-column label="å·¥èµ" width="200" prop="workHours"> |
| | | <template #default="scope"> |
| | | <el-input-number |
| | | v-model="scope.row.workHours" |
| | |
| | | import {ref, getCurrentInstance} from "vue"; |
| | | import {userListNoPageByTenantId} from "@/api/system/user.js"; |
| | | import {processScheduling} from "@/api/productionManagement/operationScheduling.js"; |
| | | import {laborConfListPage} from "@/api/lavorissce/issue.js"; |
| | | const { proxy } = getCurrentInstance() |
| | | const { work_step } = proxy.useDict("work_step") |
| | | const emit = defineEmits(['close']) |
| | |
| | | const specificationModelFromRow = ref(''); |
| | | const pendingNum = ref(0); |
| | | const userList = ref([]) |
| | | const processList = ref([]) |
| | | const receive = ref('') |
| | | const productionLineIdFromRow = ref(''); |
| | | const productionUserIdFromRow = ref(''); |
| | | |
| | | // æå¼å¼¹æ¡ |
| | | const openDialog = (type, row) => { |
| | |
| | | userListNoPageByTenantId().then((res) => { |
| | | userList.value = res.data; |
| | | }); |
| | | // æ ¹æ®é䏿°æ®çproductionLineIdæ¥è¯¢å·¥åºå表 |
| | | if (row?.productionLineId) { |
| | | laborConfListPage({ id: row.productionLineId, current: -1, size: -1 }).then((res) => { |
| | | processList.value = res.data.records || []; |
| | | }); |
| | | } |
| | | pendingNum.value = row?.pendingNum ?? 0; |
| | | unitFromRow.value = row?.unit ?? ''; |
| | | idFromRow.value = row?.id ?? ''; |
| | | specificationModelFromRow.value = row?.specificationModel ?? ''; |
| | | productionLineIdFromRow.value = row?.productionLineId ?? ''; |
| | | productionUserIdFromRow.value = row?.productionUserId ?? ''; |
| | | tableData.value = [createRow()]; |
| | | } |
| | | |
| | |
| | | proxy.$modal.msgError('æäº§æ°éå计ä¸è½è¶
è¿å¾
æäº§æ°é'); |
| | | return; |
| | | } |
| | | // 3. å° receive åæ®µæ·»å å°æ¯æ¡æ°æ®ä¸ï¼å¹¶ç§»é¤ loss åæ®µ |
| | | // 3. å° receiveãproductionLineIdãproductionUserId åæ®µæ·»å å°æ¯æ¡æ°æ®ä¸ï¼å¹¶ç§»é¤ loss åæ®µ |
| | | const submitData = tableData.value.map(row => { |
| | | const { loss, ...rest } = row; |
| | | return { |
| | | ...rest, |
| | | receive: receive.value |
| | | receive: receive.value, |
| | | productionLineId: productionLineIdFromRow.value, |
| | | productionUserId: productionUserIdFromRow.value |
| | | }; |
| | | }); |
| | | processScheduling(submitData).then((res) => { |
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: "产线", |
| | | prop: "productionLineName", |
| | | width: 120, |
| | | }, |
| | | { |
| | | label: "ç产人", |
| | | prop: "productionUserName", |
| | | width: 120, |
| | | }, |
| | | { |
| | | label: "æ´¾å·¥æ¥æ", |
| | | prop: "schedulingDate", |
| | | width: 120, |
| | |
| | | prop: "specificationModel", |
| | | width: 150, |
| | | }, |
| | | { |
| | | label: "ç»å®æºå¨", |
| | | prop: "speculativeTradingName", |
| | | width: 220, |
| | | }, |
| | | // { |
| | | // label: "ç»å®æºå¨", |
| | | // prop: "speculativeTradingName", |
| | | // width: 220, |
| | | // }, |
| | | { |
| | | label: "åä½", |
| | | prop: "unit", |
| | |
| | | width: 100, |
| | | }, |
| | | { |
| | | label: "å·¥æ¶å®é¢", |
| | | label: "å·¥èµ", |
| | | prop: "workHours", |
| | | width: 100, |
| | | }, |
| | | { |
| | | label: "å·¥èµ", |
| | | prop: "wages", |
| | | width: 100, |
| | | }, |
| | | // { |
| | | // label: "å·¥èµ", |
| | | // prop: "wages", |
| | | // width: 100, |
| | | // }, |
| | | ]); |
| | | const tableData = ref([]); |
| | | const tableLoading = ref(false); |
| | |
| | | <el-table-column label="项ç®åç§°" prop="projectName" width="250" /> |
| | | <el-table-column label="产å大类" prop="productCategory" width="150" /> |
| | | <el-table-column label="è§æ ¼åå·" prop="specificationModel" width="200" /> |
| | | <el-table-column label="ç»å®æºå¨" prop="speculativeTradingName" width="120" /> |
| | | <!-- <el-table-column label="ç»å®æºå¨" prop="speculativeTradingName" width="120" />--> |
| | | <el-table-column label="æ»æ°é" prop="quantity" width="100" align="right" /> |
| | | <el-table-column label="å·²æäº§" prop="schedulingNum" width="100" align="right" fixed="right" /> |
| | | <el-table-column label="å¾
æäº§" prop="pendingQuantity" width="100" align="right" fixed="right" /> |
| | |
| | | <el-input v-model="form.specificationModel" placeholder="请è¾å
¥" clearable disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»å®æºå¨ï¼" prop="speculativeTradingName"> |
| | | <el-input v-model="form.speculativeTradingName" placeholder="èªå¨è·å" clearable disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <!-- <el-col :span="12">--> |
| | | <!-- <el-form-item label="ç»å®æºå¨ï¼" prop="speculativeTradingName">--> |
| | | <!-- <el-input v-model="form.speculativeTradingName" placeholder="èªå¨è·å" clearable disabled/>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ»æ°éï¼" prop="quantity"> |
| | | <el-input v-model="form.quantity" placeholder="请è¾å
¥" clearable disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¾
æäº§æ°éï¼" prop="pendingQuantity"> |
| | | <el-input v-model="form.pendingQuantity" placeholder="请è¾å
¥" clearable disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¬æ¬¡æäº§æ°éï¼" prop="schedulingNum"> |
| | | <el-input-number |
| | |
| | | @change="changeNum" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="产线ï¼" prop="lineId"> |
| | | <el-select |
| | | v-model="form.lineId" |
| | | placeholder="éæ©äº§çº¿" |
| | | style="width: 100%;" |
| | | filterable |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="line in lineList" |
| | | :key="line.id" |
| | | :label="line.name" |
| | | :value="line.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç产人ï¼" prop="productionUserId"> |
| | | <el-select |
| | | v-model="form.productionUserId" |
| | | placeholder="éæ©ç产人" |
| | | style="width: 100%;" |
| | | filterable |
| | | default-first-option |
| | | :reserve-keyword="false" |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="user in userList" |
| | | :key="user.userId" |
| | | :label="user.nickName" |
| | | :value="user.userId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js"; |
| | | import {userListNoPageByTenantId} from "@/api/system/user.js"; |
| | | import {productionDispatch} from "@/api/productionManagement/productionOrder.js"; |
| | | import {getDeptPositionTree} from "@/api/lavorissce/issue.js"; |
| | | import useUserStore from "@/store/modules/user.js"; |
| | | import dayjs from "dayjs"; |
| | | const { proxy } = getCurrentInstance() |
| | |
| | | schedulingDate: "", |
| | | pendingQuantity: "", |
| | | speculativeTradingName: "", // ç»å®æºå¨åç§° |
| | | lineId: "", // 产线ID |
| | | productionUserId: "", // ç产人ID |
| | | }, |
| | | rules: { |
| | | schedulingNum: [{ required: true, message: "请è¾å
¥", trigger: "blur" },], |
| | | schedulingUserId: [{ required: true, message: "è¯·éæ©", trigger: "change" },], |
| | | schedulingDate: [{ required: true, message: "è¯·éæ©", trigger: "change" },], |
| | | lineId: [{ required: true, message: "è¯·éæ©äº§çº¿", trigger: "change" },], |
| | | productionUserId: [{ required: true, message: "è¯·éæ©ç产人", trigger: "change" },], |
| | | }, |
| | | }); |
| | | const { form, rules } = toRefs(data); |
| | | const userList = ref([]) |
| | | const lineList = ref([]) |
| | | const userStore = useUserStore() |
| | | |
| | | |
| | |
| | | userListNoPageByTenantId().then((res) => { |
| | | userList.value = res.data; |
| | | }); |
| | | getDeptPositionTree().then((res) => { |
| | | lineList.value = res.data; |
| | | }); |
| | | form.value = {...row} |
| | | form.value.schedulingNum = 0 |
| | | form.value.schedulingUserId = userStore.id |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <!-- çæº1-4 å±ç¤ºï¼æ»é / æ£å¨ç产é / 空ä½éï¼ --> |
| | | <div class="machines-grid"> |
| | | <div v-for="machine in machines" :key="machine.id" class="machine-card"> |
| | | <div class="machine-title">{{ machine.name }}</div> |
| | | <div class="machine-metrics"> |
| | | <div class="machine-control"> |
| | | <span>æ»é(kg)ï¼</span> |
| | | <el-input-number v-model="machineData[machine.name].workLoad" :min="0" :step="1" size="small" /> |
| | | </div> |
| | | <div><span> é¢è®¡æå
¥é(kg)ï¼</span><span>{{ machineData[machine.name].currentWorkLoad }}</span></div> |
| | | <div><span>空ä½å·¥ä½é(kg)ï¼</span><span>{{ machineData[machine.name].vacant }}</span></div> |
| | | </div> |
| | | </div> |
| | | <div class="save-button-container"> |
| | | <div class="loss-rate-container"> |
| | | <span class="loss-rate-label">æèç(%)ï¼</span> |
| | | <el-select v-model="rate" placeholder="è¯·éæ©æèç" style="width: 120px" size="small"> |
| | | <el-option label="6" :value="6" /> |
| | | <el-option label="7" :value="7" /> |
| | | <el-option label="8" :value="8" /> |
| | | <el-option label="9" :value="9" /> |
| | | <el-option label="10" :value="10" /> |
| | | </el-select> |
| | | </div> |
| | | <el-button type="primary" @click="saveMachineTotals" size="small">ä¿å设置</el-button> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="machines-grid">--> |
| | | <!-- <div v-for="machine in machines" :key="machine.id" class="machine-card">--> |
| | | <!-- <div class="machine-title">{{ machine.name }}</div>--> |
| | | <!-- <div class="machine-metrics">--> |
| | | <!-- <div class="machine-control">--> |
| | | <!-- <span>æ»é(kg)ï¼</span>--> |
| | | <!-- <el-input-number v-model="machineData[machine.name].workLoad" :min="0" :step="1" size="small" />--> |
| | | <!-- </div>--> |
| | | <!-- <div><span> é¢è®¡æå
¥é(kg)ï¼</span><span>{{ machineData[machine.name].currentWorkLoad }}</span></div>--> |
| | | <!-- <div><span>空ä½å·¥ä½é(kg)ï¼</span><span>{{ machineData[machine.name].vacant }}</span></div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="save-button-container">--> |
| | | <!-- <div class="loss-rate-container">--> |
| | | <!-- <span class="loss-rate-label">æèç(%)ï¼</span>--> |
| | | <!-- <el-select v-model="rate" placeholder="è¯·éæ©æèç" style="width: 120px" size="small">--> |
| | | <!-- <el-option label="6" :value="6" />--> |
| | | <!-- <el-option label="7" :value="7" />--> |
| | | <!-- <el-option label="8" :value="8" />--> |
| | | <!-- <el-option label="9" :value="9" />--> |
| | | <!-- <el-option label="10" :value="10" />--> |
| | | <!-- </el-select>--> |
| | | <!-- </div>--> |
| | | <!-- <el-button type="primary" @click="saveMachineTotals" size="small">ä¿å设置</el-button>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <div class="search_form"> |
| | | <div> |
| | | <span class="search_title">客æ·åç§°ï¼</span> |
| | |
| | | prop: "specificationModel", |
| | | width: 120, |
| | | }, |
| | | { |
| | | label: "ç»å®æºå¨", |
| | | prop: "speculativeTradingName", |
| | | width: 220, |
| | | }, |
| | | // { |
| | | // label: "ç»å®æºå¨", |
| | | // prop: "speculativeTradingName", |
| | | // width: 220, |
| | | // }, |
| | | { |
| | | label: "åä½", |
| | | prop: "unit", |
| | |
| | | userList.value = res.data; |
| | | }); |
| | | form.value = {...row} |
| | | // ä¼å
使ç¨é䏿°æ®çproductionUserIdä½ä¸ºç产人 |
| | | if (row?.productionUserId) { |
| | | form.value.schedulingUserId = row.productionUserId; |
| | | } |
| | | } |
| | | |
| | | const changeNum = (value) => { |
| | |
| | | prop: "specificationModel", |
| | | width: 150, |
| | | }, |
| | | { |
| | | label: "ç»å®æºå¨", |
| | | prop: "speculativeTradingName", |
| | | width: 220, |
| | | }, |
| | | // { |
| | | // label: "ç»å®æºå¨", |
| | | // prop: "speculativeTradingName", |
| | | // width: 220, |
| | | // }, |
| | | { |
| | | label: "åä½", |
| | | prop: "unit", |
| | |
| | | // prop: "type", |
| | | // width: 150, |
| | | // }, |
| | | { |
| | | label: "æè", |
| | | prop: "loss", |
| | | width: 150, |
| | | }, |
| | | // { |
| | | // label: "æè", |
| | | // prop: "loss", |
| | | // width: 150, |
| | | // }, |
| | | { |
| | | label: "æäº§æ°é", |
| | | prop: "schedulingNum", |
| | |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | <el-table-column label="产å大类" prop="productCategory" /> |
| | | <el-table-column label="è§æ ¼åå·" prop="specificationModel" /> |
| | | <el-table-column label="ç»å®æºå¨" prop="speculativeTradingName" /> |
| | | <!-- <el-table-column label="ç»å®æºå¨" prop="speculativeTradingName" />--> |
| | | <el-table-column label="åä½" prop="unit" /> |
| | | <el-table-column label="æ°é" prop="quantity" /> |
| | | <el-table-column label="ç¨ç(%)" prop="taxRate" /> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç»å®æºå¨ï¼"> |
| | | <el-input v-model="productForm.speculativeTradingName" placeholder="请å
éæ©è§æ ¼åå·" clearable disabled /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- <el-row :gutter="30">--> |
| | | <!-- <el-col :span="24">--> |
| | | <!-- <el-form-item label="ç»å®æºå¨ï¼">--> |
| | | <!-- <el-input v-model="productForm.speculativeTradingName" placeholder="请å
éæ©è§æ ¼åå·" clearable disabled />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åä½ï¼" prop="unit"> |