parameter.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. <template>
  2. <div style="height:100%">
  3. <HcTabsSimple :cur="tabsKey" :datas="tabsData" @tabClick="tabsClick">
  4. <template #tab-pricetype>
  5. <HcCard actionSize="lg" >
  6. <template #action>
  7. <HcPages :pages="searchForm" @change="pageChange"></HcPages>
  8. </template>
  9. <div class="hc-page-layout-box">
  10. <HcCardItem ui="hac-card-item" style="margin-right: 20px;" scrollbar>
  11. <template #header>
  12. <div class="ml-3">
  13. 预算分类:
  14. <el-button _icon hc-btn size="small" type="primary" @click="openpriceEdit(1)">
  15. <HcIcon name="add"/>
  16. </el-button>
  17. </div>
  18. </template>
  19. <div class="hc-layout-left-box menu">
  20. <div class="hc-menu-contents-box">
  21. <el-scrollbar>
  22. <HcMenuSimple :datas="menuOptions" :keys="menuKey" :props="menusProps" :menus="contextMenu" @menuTap="contextMenuClick"
  23. @change="menuChange" />
  24. </el-scrollbar>
  25. </div>
  26. <!--左右拖动-->
  27. <HcDialog bgColor="#ffffff" isToBody :show="priceModal" :title="priceTitle" @close="priceModalClose">
  28. <el-form
  29. :model="priceform"
  30. label-position="left" label-width="auto"
  31. size="large"
  32. >
  33. <el-form-item label="预算分类名称:">
  34. <el-input v-model="priceform.name" />
  35. </el-form-item>
  36. </el-form>
  37. </HcDialog>
  38. </div>
  39. </HcCardItem>
  40. <div class="hc-page-content-box">
  41. <HcCardItem ui="hac-card-item" actionSize="lg" >
  42. <template #header>
  43. <div class="ml-3">
  44. 任务明细:
  45. <el-button _icon hc-btn size="small" type="primary" @click="openEdit(1)">
  46. <HcIcon name="add"/>
  47. </el-button>
  48. </div>
  49. </template>
  50. <HcTable :column="tableColumn" :datas="tableData" >
  51. <template #action="{row, index}">
  52. <el-button size="small" type="primary" @click="openEdit(2)">编辑</el-button>
  53. <el-button size="small" type="primary" @click="delTask">删除</el-button>
  54. </template>
  55. </HcTable>
  56. <HcDialog bgColor="#ffffff" isToBody :show="editTaskModal" :title="taskTitle" @close="testModalClose">
  57. <el-form
  58. label-position="left"
  59. label-width="100px"
  60. :model="formLabelAlign"
  61. style="max-width: 460px"
  62. >
  63. <el-form-item label="任务明细名称:">
  64. <el-input v-model="formLabelAlign.name" />
  65. </el-form-item>
  66. <el-form-item label="任务内容:">
  67. <el-input v-model="formLabelAlign.region" />
  68. </el-form-item>
  69. <el-form-item label="完成指标:">
  70. <el-input v-model="formLabelAlign.type" />
  71. </el-form-item>
  72. </el-form>
  73. </HcDialog>
  74. </HcCardItem >
  75. </div>
  76. </div>
  77. </HcCard>
  78. </template>
  79. <template #tab-tasktype>
  80. <HcCard actionSize="lg" scrollbar>
  81. <template #header>
  82. <div class="ml-3">
  83. 任务分类:<HcTooltip keys="tentative_device_approach_menu_add">
  84. <el-button _icon hc-btn size="small" type="primary" @click="openTypeEdit(1)">
  85. <HcIcon name="add"/>
  86. </el-button>
  87. </HcTooltip>
  88. </div>
  89. </template>
  90. <!-- <template #extra>
  91. <div style="float: right;">
  92. <el-button size="large" type="primary">
  93. <HcIcon name="save"/>
  94. <span>保存</span>
  95. </el-button>
  96. </div>
  97. </template> -->
  98. <HcTable :column="tasktableColumn" :datas="tasktableData">
  99. <template #action="{row, index}">
  100. <el-button size="small" type="primary" @click="openTypeEdit(2)">编辑</el-button>
  101. <el-button size="small" type="primary" @click="delTasktype">删除</el-button>
  102. </template>
  103. </HcTable>
  104. <template #action>
  105. <HcPages :pages="searchForm" @change="pageChange"></HcPages>
  106. </template>
  107. <HcDialog bgColor="#ffffff" isToBody :show="tasktypeModal" :title="taskTypeTitle" @close="taskTypeModalClose" l>
  108. <el-form
  109. label-position="left"
  110. :model="formtaskType"
  111. label-width="auto"
  112. size="large"
  113. >
  114. <el-form-item label="任务类型名称">
  115. <el-input v-model="formtaskType.name" />
  116. </el-form-item>
  117. <el-form-item label="完成指标">
  118. <el-select v-model="formtaskType.type" class="block" placeholder="请选择" >
  119. <el-option
  120. v-for="item in typeoptions"
  121. :key="item.value"
  122. :label="item.label"
  123. :value="item.value"
  124. />
  125. </el-select>
  126. </el-form-item>
  127. </el-form>
  128. </HcDialog>
  129. </HcCard>
  130. </template>
  131. <template #tab-indicator>
  132. 测试3
  133. </template>
  134. <template #tab-price>
  135. <HcCard actionSize="lg" scrollbar>
  136. <!-- <template #extra>
  137. <div style="float: right;">
  138. <el-button size="large" type="primary">
  139. <HcIcon name="save"/>
  140. <span>保存</span>
  141. </el-button>
  142. </div>
  143. </template> -->
  144. <template #header>
  145. <div class="ml-3">
  146. 岗位单价:<HcTooltip keys="tentative_device_approach_menu_add">
  147. <el-button _icon hc-btn size="small" type="primary" @click="positionEdit(1)">
  148. <HcIcon name="add"/>
  149. </el-button>
  150. </HcTooltip>
  151. </div>
  152. </template>
  153. <HcTable :column="positiontableColumn" :datas="positiontableData">
  154. <template #action="{row, index}">
  155. <el-button size="small" type="primary" @click="positionEdit(2)">编辑</el-button>
  156. <el-button size="small" type="primary" @click="delTaskposition">删除</el-button>
  157. </template>
  158. </HcTable>
  159. <template #action>
  160. <HcPages :pages="searchForm" @change="pageChange"></HcPages>
  161. </template>
  162. <HcDialog bgColor="#ffffff" isToBody :show="positonModal" :title="positonModalTitle" @close="positonModalClose">
  163. <el-form
  164. label-position="left"
  165. label-width="auto"
  166. :model="formposition"
  167. size="large"
  168. >
  169. <el-form-item label="岗位类型名称:">
  170. <el-input v-model="formposition.name" />
  171. </el-form-item>
  172. <el-form-item label="日单价:">
  173. <el-input v-model="formposition.price" />
  174. </el-form-item>
  175. </el-form>
  176. </HcDialog>
  177. </HcCard>
  178. </template>
  179. </HcTabsSimple>
  180. </div>
  181. </template>
  182. <script setup>
  183. import {ref, watch,onMounted} from "vue";
  184. import {useAppStore} from "~src/store";
  185. //渲染完成
  186. onMounted(() => {
  187. setContextMenu()
  188. })
  189. //类型处理
  190. const tabsKey = ref('pricetype')
  191. const tabsData = ref([
  192. {icon: 'bar-chart-box', label: '预算分类', key: 'pricetype'},
  193. {icon: 'tools', label: '任务类型', key: 'tasktype'},
  194. {icon: 'sun-cloudy', label: '指标依据', key: 'indicator'},
  195. {icon: 'sun-cloudy', label: '岗位单价', key: 'price'},
  196. ])
  197. const searchForm = ref({
  198. postType: '', name:'',
  199. current: 1, size: 20, total: 0
  200. })
  201. //分页被点击
  202. const pageChange = ({current, size}) => {
  203. searchForm.value.current = current
  204. searchForm.value.size = size
  205. }
  206. const tabsClick = (key) => {
  207. tabsKey.value = key
  208. }
  209. const tableColumn = [
  210. {key: 'name', name: '任务明细'},
  211. {key: 'text', name: '任务内容'},
  212. {key: 'color', name: '完成指标'},
  213. {key: 'action', name: '操作', width: 200}
  214. ]
  215. const tableData = ref([
  216. {name: '名称1', text: '文本1', color: 'red'},
  217. {name: '名称2', text: '文本2', color: 'blue'},
  218. {name: '名称3', text: '文本3', color: '无'}
  219. ])
  220. const positiontableColumn = [
  221. {key: 'name', name: '岗位类型名称'},
  222. {key: 'text', name: '日单价'},
  223. {key: 'action', name: '操作', width: 200}
  224. ]
  225. const positiontableData = ref([
  226. {name: '名称1', text: '文本1', color: 'red'},
  227. {name: '名称2', text: '文本2', color: 'blue'},
  228. {name: '名称3', text: '文本3', color: '无'}
  229. ])
  230. const tasktableColumn = [
  231. {key: 'name', name: '任务类型名称'},
  232. {key: 'text', name: '类型'},
  233. {key: 'action', name: '操作', width: 200}
  234. ]
  235. const tasktableData = ref([
  236. {name: '名称1', text: '文本1', color: 'red'},
  237. {name: '名称2', text: '文本2', color: 'blue'},
  238. {name: '名称3', text: '文本3', color: '无'}
  239. ])
  240. //左侧菜单
  241. const menuKey = ref('1')
  242. const menuOptions = ref([
  243. {key: '1', label: '合同洽谈', badge: 0},
  244. {key: '2', label: '合同洽谈', badge: 0},
  245. {key: '3', label: '合同洽谈', badge: 0},
  246. {key: '4', label: '合同洽谈', badge: 0},
  247. {key: '5', label: '合同洽谈', badge: 0},
  248. ]);
  249. const menuChange = (item) => {
  250. console.log(item)
  251. menuKey.value = item?.key
  252. }
  253. const menusProps = ref({
  254. key: 'key',
  255. label: 'label'
  256. })
  257. //左右拖动,改变树形结构宽度
  258. const leftWidth = ref(240);
  259. const onmousedown = () => {
  260. const leftNum = isCollapse.value ? 142 : 272
  261. document.onmousemove = (ve) => {
  262. let diffVal = ve.clientX - leftNum;
  263. if (diffVal >= 220 && diffVal <= 400) {
  264. leftWidth.value = diffVal;
  265. }
  266. }
  267. document.onmouseup = () => {
  268. document.onmousemove = null;
  269. document.onmouseup = null;
  270. }
  271. }
  272. //菜单的右键菜单
  273. const contextMenu = ref([])
  274. const setContextMenu = () => {
  275. let newArr = [];
  276. newArr.push({icon: 'draft', label: '编辑分类', key: "edit"})
  277. newArr.push({icon: 'delete-bin', label: '删除分类', key: "del"})
  278. contextMenu.value = newArr
  279. }
  280. //菜单的右键菜单被点击
  281. const contextMenuClick = ({key, item}) => {
  282. if (key === 'edit') {
  283. openpriceEdit(2)
  284. menuKey.value=item?.key
  285. } else if (key === 'del') {
  286. window?.$messageBox?.alert('您确定要删除该预算分类信息吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
  287. showCancelButton: true,
  288. confirmButtonText: '确认注销',
  289. cancelButtonText: '取消',
  290. type: 'warning',
  291. callback: (action) => {
  292. if (action === 'confirm') {
  293. console.log(11111);
  294. }
  295. }
  296. })
  297. }
  298. }
  299. const editTaskModal=ref(false)
  300. const testModalClose=()=>{
  301. editTaskModal.value=false
  302. }
  303. const priceTitle=ref('')
  304. const priceModal=ref(false)
  305. const openpriceEdit=(type)=>{
  306. if(type===1){
  307. priceTitle.value='新增分类'
  308. }else{
  309. priceTitle.value='编辑分类'
  310. }
  311. priceModal.value=true
  312. }
  313. const delTask=()=>{
  314. window?.$messageBox?.alert('您确定要删除该任务明细吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
  315. showCancelButton: true,
  316. confirmButtonText: '确认注销',
  317. cancelButtonText: '取消',
  318. type: 'warning',
  319. callback: (action) => {
  320. if (action === 'confirm') {
  321. console.log(11111);
  322. }
  323. }
  324. })
  325. }
  326. const delTasktype=()=>{
  327. window?.$messageBox?.alert('您确定要删除该任务分类吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
  328. showCancelButton: true,
  329. confirmButtonText: '确认注销',
  330. cancelButtonText: '取消',
  331. type: 'warning',
  332. callback: (action) => {
  333. if (action === 'confirm') {
  334. console.log(11111);
  335. }
  336. }
  337. })
  338. }
  339. const delTaskposition=()=>{
  340. window?.$messageBox?.alert('您确定要删除该岗位单价吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
  341. showCancelButton: true,
  342. confirmButtonText: '确认注销',
  343. cancelButtonText: '取消',
  344. type: 'warning',
  345. callback: (action) => {
  346. if (action === 'confirm') {
  347. console.log(11111);
  348. }
  349. }
  350. })
  351. }
  352. const priceform=ref({})
  353. const priceModalClose=()=>{
  354. priceModal.value=false
  355. }
  356. const openEdit=(type)=>{
  357. if(type===1){
  358. taskTitle.value='新增任务明细'
  359. }else{
  360. taskTitle.value='编辑任务明细'
  361. }
  362. editTaskModal.value=true
  363. }
  364. const formLabelAlign = ref({
  365. name: '',
  366. region: '',
  367. type: '',
  368. })
  369. const taskTitle=ref('')
  370. const taskTypeTitle=ref('')
  371. const formtaskType=ref({})
  372. const tasktypeModal=ref(false)
  373. const taskTypeModalClose=()=>{
  374. tasktypeModal.value=false
  375. }
  376. const openTypeEdit=(type)=>{
  377. if(type===1){
  378. taskTypeTitle.value='新增任务'
  379. }else{
  380. taskTypeTitle.value='编辑任务'
  381. }
  382. tasktypeModal.value=true
  383. }
  384. const typeoptions=ref([
  385. {
  386. value: '1',
  387. label: '固定任务',
  388. },
  389. {
  390. value: '2',
  391. label: '临时任务',
  392. },
  393. ])
  394. const positonModal=ref(false)
  395. const positonModalTitle=ref('')
  396. const positonModalClose=()=>{
  397. positonModal.value=false
  398. }
  399. const formposition=ref({})
  400. const positionEdit=(type)=>{
  401. if(type===1){
  402. positonModalTitle.value='新增岗位类型'
  403. }else{
  404. positonModalTitle.value='编辑岗位类型'
  405. }
  406. positonModal.value=true
  407. }
  408. </script>
  409. <style lang="scss" scoped>
  410. </style>
  411. <style lang="scss">
  412. .hc-page-layout-box {
  413. display: flex;
  414. position: relative;
  415. // height: calc(100vh - 228px);
  416. .hc-layout-left-box {
  417. width: 382px;
  418. position: relative;
  419. // background: #f1f5f8;
  420. // background: transparent;
  421. border-radius: 10px;
  422. // margin-right: 24px;
  423. box-shadow: none;
  424. .horizontal-drag-line {
  425. position: absolute;
  426. right: 0;
  427. top: 0;
  428. width: 4px;
  429. height: 100%;
  430. user-select: none;
  431. cursor: col-resize;
  432. background-color: #00000000;
  433. }
  434. &.menu {
  435. width: 100%;
  436. .hc-menu-header-box {
  437. position: relative;
  438. padding: 15px 18px;
  439. display: flex;
  440. align-items: center;
  441. border-bottom: 1px solid #E9E9E9;
  442. .name {
  443. flex: auto;
  444. position: relative;
  445. }
  446. }
  447. .hc-menu-contents-box {
  448. position: relative;
  449. padding: 15px 18px;
  450. // height: calc(100% - 60px);
  451. }
  452. }
  453. }
  454. .hc-page-content-box {
  455. flex: 1;
  456. position: relative;
  457. }
  458. }
  459. </style>